|
Lines 14-19
Link Here
|
| 14 |
import java.util.Arrays; |
14 |
import java.util.Arrays; |
| 15 |
import java.util.Comparator; |
15 |
import java.util.Comparator; |
| 16 |
|
16 |
|
|
|
17 |
import org.eclipse.core.runtime.IStatus; |
| 18 |
import org.eclipse.core.runtime.Status; |
| 17 |
import org.eclipse.jface.util.Policy; |
19 |
import org.eclipse.jface.util.Policy; |
| 18 |
|
20 |
|
| 19 |
/** |
21 |
/** |
|
Lines 121-154
Link Here
|
| 121 |
return cat1 - cat2; |
123 |
return cat1 - cat2; |
| 122 |
} |
124 |
} |
| 123 |
|
125 |
|
| 124 |
String name1; |
126 |
String name1 = getLabel(viewer, e1); |
| 125 |
String name2; |
127 |
String name2 = getLabel(viewer, e2); |
| 126 |
|
|
|
| 127 |
if (viewer == null || !(viewer instanceof ContentViewer)) { |
| 128 |
name1 = e1.toString(); |
| 129 |
name2 = e2.toString(); |
| 130 |
} else { |
| 131 |
IBaseLabelProvider prov = ((ContentViewer) viewer) |
| 132 |
.getLabelProvider(); |
| 133 |
if (prov instanceof ILabelProvider) { |
| 134 |
ILabelProvider lprov = (ILabelProvider) prov; |
| 135 |
name1 = lprov.getText(e1); |
| 136 |
name2 = lprov.getText(e2); |
| 137 |
} else { |
| 138 |
name1 = e1.toString(); |
| 139 |
name2 = e2.toString(); |
| 140 |
} |
| 141 |
} |
| 142 |
if (name1 == null) { |
| 143 |
name1 = "";//$NON-NLS-1$ |
| 144 |
} |
| 145 |
if (name2 == null) { |
| 146 |
name2 = "";//$NON-NLS-1$ |
| 147 |
} |
| 148 |
|
128 |
|
| 149 |
// use the comparator to compare the strings |
129 |
// use the comparator to compare the strings |
| 150 |
return getComparator().compare(name1, name2); |
130 |
return getComparator().compare(name1, name2); |
| 151 |
} |
131 |
} |
|
|
132 |
|
| 133 |
private String getLabel(Viewer viewer, Object e1) { |
| 134 |
String name1; |
| 135 |
if (viewer == null || !(viewer instanceof ContentViewer)) { |
| 136 |
name1 = e1.toString(); |
| 137 |
} else { |
| 138 |
IBaseLabelProvider prov = ((ContentViewer) viewer) |
| 139 |
.getLabelProvider(); |
| 140 |
if (prov instanceof ILabelProvider) { |
| 141 |
ILabelProvider lprov = (ILabelProvider) prov; |
| 142 |
name1 = lprov.getText(e1); |
| 143 |
} else { |
| 144 |
name1 = e1.toString(); |
| 145 |
} |
| 146 |
} |
| 147 |
if (name1 == null) { |
| 148 |
name1 = "";//$NON-NLS-1$ |
| 149 |
} |
| 150 |
return name1; |
| 151 |
} |
| 152 |
|
152 |
|
| 153 |
/** |
153 |
/** |
| 154 |
* Returns whether this viewer sorter would be affected |
154 |
* Returns whether this viewer sorter would be affected |
|
Lines 181-191
Link Here
|
| 181 |
* @param viewer the viewer |
181 |
* @param viewer the viewer |
| 182 |
* @param elements the elements to sort |
182 |
* @param elements the elements to sort |
| 183 |
*/ |
183 |
*/ |
| 184 |
public void sort(final Viewer viewer, Object[] elements) { |
184 |
public void sort(final Viewer viewer, Object[] elements) { |
| 185 |
Arrays.sort(elements, new Comparator() { |
185 |
try { |
| 186 |
public int compare(Object a, Object b) { |
186 |
Arrays.sort(elements, new Comparator() { |
| 187 |
return ViewerComparator.this.compare(viewer, a, b); |
187 |
public int compare(Object a, Object b) { |
| 188 |
} |
188 |
return ViewerComparator.this.compare(viewer, a, b); |
| 189 |
}); |
189 |
} |
| 190 |
} |
190 |
}); |
|
|
191 |
} catch (IllegalArgumentException e) { |
| 192 |
String msg = "Workaround for comparator violation:\n\t- set system property java.util.Arrays.useLegacyMergeSort=true\n\t- use a 1.6 JRE " //$NON-NLS-1$ |
| 193 |
+ "\nmessage: " + e.getLocalizedMessage() //$NON-NLS-1$ |
| 194 |
+ "\nthis: " + getClass().getName() //$NON-NLS-1$ |
| 195 |
+ "\ncomparator: " + comparator.getClass().getName() //$NON-NLS-1$ |
| 196 |
+ "\narray:"; //$NON-NLS-1$ |
| 197 |
for (int i = 0; i < elements.length; i++) { |
| 198 |
msg += "\n\t" + getLabel(viewer, elements[i]); //$NON-NLS-1$ |
| 199 |
} |
| 200 |
Policy.getLog().log(new Status(IStatus.ERROR, "org.eclipse.jface", msg)); //$NON-NLS-1$ |
| 201 |
throw e; |
| 202 |
} |
| 203 |
} |
| 191 |
} |
204 |
} |