Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 364735
Collapse All | Expand All

(-)a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ViewerComparator.java (-31 / +44 lines)
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
}

Return to bug 364735