Skip to content

Commit d4aa37b

Browse files
committed
Add ViewerComparator methods in INavigatorSorterService
As every ViewerSorter is ViewerComparator the new default methods can be trivially added to implementors. There are expected to be none as the interface is marked as noimplement and noextend. For consistency ViewerSorter to ViewerComparator has been done wherever spotted.
1 parent 05b9f73 commit d4aa37b

File tree

12 files changed

+159
-96
lines changed

12 files changed

+159
-96
lines changed

bundles/org.eclipse.ui.navigator/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %Plugin.name
44
Bundle-SymbolicName: org.eclipse.ui.navigator; singleton:=true
5-
Bundle-Version: 3.12.600.qualifier
5+
Bundle-Version: 3.13.0.qualifier
66
Bundle-Activator: org.eclipse.ui.internal.navigator.NavigatorPlugin
77
Bundle-Vendor: %Plugin.providerName
88
Bundle-Localization: plugin

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptor.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,31 +90,27 @@ public boolean isEnabledForParent(Object aParent) {
9090

9191
/**
9292
*
93-
* @return An instance of the ViewerSorter defined by the extension. Callers
94-
* of this method are responsible for managing the instantiated
95-
* filter.
93+
* @return An instance of the ViewerComparator defined by the extension. Callers
94+
* of this method are responsible for managing the instantiated filter.
9695
*/
97-
public ViewerSorter createSorter() {
98-
final ViewerSorter[] sorter = new ViewerSorter[1];
96+
public ViewerComparator createComparator() {
97+
final ViewerComparator[] sorter = new ViewerComparator[1];
9998

10099
SafeRunner.run(new NavigatorSafeRunnable(element) {
101100
@Override
102101
public void run() throws Exception {
103-
sorter[0] = createSorterInstance();
102+
sorter[0] = createComparatorInstance();
104103
}
105104
});
106105
if (sorter[0] != null)
107106
return sorter[0];
108107
return SkeletonViewerSorter.INSTANCE;
109108
}
110109

111-
private ViewerSorter createSorterInstance() throws CoreException {
110+
private ViewerComparator createComparatorInstance() throws CoreException {
112111
Object contributed = element.createExecutableExtension(ATT_CLASS);
113-
if (contributed instanceof ViewerSorter) {
114-
return (ViewerSorter) contributed;
115-
}
116-
if (contributed instanceof ViewerComparator) {
117-
return new WrappedViewerComparator((ViewerComparator) contributed);
112+
if (contributed instanceof ViewerComparator comparator) {
113+
return comparator;
118114
}
119115
throw new ClassCastException("Class contributed by " + element.getNamespaceIdentifier() + //$NON-NLS-1$
120116
" to " + INavigatorContentExtPtConstants.TAG_NAVIGATOR_CONTENT + //$NON-NLS-1$

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/CommonSorterDescriptorManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2006, 2015 IBM Corporation and others.
2+
* Copyright (c) 2006, 2025 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -40,7 +40,7 @@ public class CommonSorterDescriptorManager {
4040

4141
private static final CommonSorterDescriptor[] NO_SORTER_DESCRIPTORS = new CommonSorterDescriptor[0];
4242

43-
private final Map<INavigatorContentDescriptor, Set> sortersMap = new HashMap<>();
43+
private final Map<INavigatorContentDescriptor, Set<CommonSorterDescriptor>> sortersMap = new HashMap<>();
4444

4545
/**
4646
*

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/sorters/NavigatorSorterService.java

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2006, 2015 IBM Corporation and others.
2+
* Copyright (c) 2006, 2025 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Map;
2121

22+
import org.eclipse.jface.viewers.ViewerComparator;
2223
import org.eclipse.jface.viewers.ViewerSorter;
2324
import org.eclipse.ui.internal.navigator.NavigatorContentService;
2425
import org.eclipse.ui.internal.navigator.VisibilityAssistant.VisibilityListener;
@@ -37,7 +38,7 @@ public class NavigatorSorterService implements INavigatorSorterService, Visibili
3738
private final NavigatorContentService contentService;
3839

3940
/* A map of (CommonSorterDescriptor, ViewerSorter)-pairs */
40-
private final Map<CommonSorterDescriptor, ViewerSorter> sorters = new HashMap<>();
41+
private final Map<CommonSorterDescriptor, ViewerComparator> sorters = new HashMap<>();
4142

4243
private INavigatorContentDescriptor[] sortOnlyDescriptors;
4344

@@ -66,70 +67,94 @@ private synchronized void computeSortOnlyDescriptors() {
6667
}
6768

6869
@Override
70+
@Deprecated(forRemoval = true, since = "2025-03")
6971
public ViewerSorter findSorterForParent(Object aParent) {
7072

71-
CommonSorterDescriptor[] descriptors = CommonSorterDescriptorManager
72-
.getInstance().findApplicableSorters(contentService, aParent);
73+
ViewerComparator comparator = findComparatorForParent(aParent);
74+
if (comparator != null) {
75+
return new CommonSorterDescriptor.WrappedViewerComparator(comparator);
76+
}
77+
return SkeletonViewerSorter.INSTANCE;
78+
}
79+
80+
@Override
81+
public ViewerComparator findComparatorForParent(Object aParent) {
82+
83+
CommonSorterDescriptor[] descriptors = CommonSorterDescriptorManager.getInstance()
84+
.findApplicableSorters(contentService, aParent);
7385
if (descriptors.length > 0) {
74-
return getSorter(descriptors[0]);
86+
return getComparator(descriptors[0]);
7587
}
7688
return SkeletonViewerSorter.INSTANCE;
7789
}
7890

79-
private ViewerSorter getSorter(CommonSorterDescriptor descriptor) {
80-
ViewerSorter sorter = null;
91+
92+
private ViewerComparator getComparator(CommonSorterDescriptor descriptor) {
93+
ViewerComparator sorter = null;
8194
synchronized (sorters) {
8295
sorter = sorters.get(descriptor);
8396
if (sorter == null) {
84-
sorters.put(descriptor, sorter = descriptor.createSorter());
97+
sorters.put(descriptor, sorter = descriptor.createComparator());
8598
}
8699
}
87100
return sorter;
88101
}
89102

90103
@Override
104+
@Deprecated(forRemoval = true, since = "2025-03")
91105
public synchronized ViewerSorter findSorter(INavigatorContentDescriptor source,
92106
Object parent, Object lvalue, Object rvalue) {
93107

94-
CommonSorterDescriptorManager dm = CommonSorterDescriptorManager
95-
.getInstance();
108+
ViewerComparator comparator = findComparator(source, parent, lvalue, rvalue);
109+
if (comparator != null) {
110+
return new CommonSorterDescriptor.WrappedViewerComparator(comparator);
111+
}
112+
return null;
113+
}
114+
115+
@Override
116+
public synchronized ViewerComparator findComparator(INavigatorContentDescriptor source, Object parent,
117+
Object lvalue,
118+
Object rvalue) {
119+
120+
CommonSorterDescriptorManager dm = CommonSorterDescriptorManager.getInstance();
96121
CommonSorterDescriptor[] descriptors;
97122

98123
INavigatorContentDescriptor lookupDesc;
99124
for (int i = 0; i < sortOnlyDescriptors.length; i++) {
100125
lookupDesc = sortOnlyDescriptors[i];
101-
if (source!= null && source.getSequenceNumber() < lookupDesc.getSequenceNumber()) {
126+
if (source != null && source.getSequenceNumber() < lookupDesc.getSequenceNumber()) {
102127
lookupDesc = source;
103128
source = null;
104129
i--;
105130
}
106-
descriptors = dm. findApplicableSorters(contentService, lookupDesc, parent);
131+
descriptors = dm.findApplicableSorters(contentService, lookupDesc, parent);
107132
if (descriptors.length > 0) {
108-
return getSorter(descriptors[0]);
133+
return getComparator(descriptors[0]);
109134
}
110135
}
111136

112137
if (source != null) {
113-
descriptors = dm. findApplicableSorters(contentService, source, parent);
138+
descriptors = dm.findApplicableSorters(contentService, source, parent);
114139
if (descriptors.length > 0) {
115-
return getSorter(descriptors[0]);
140+
return getComparator(descriptors[0]);
116141
}
117142
}
118143
return null;
119144
}
120145

121146
@Override
122-
public Map findAvailableSorters(INavigatorContentDescriptor theSource) {
147+
public Map<String, ViewerComparator> findAvailableSorters(INavigatorContentDescriptor theSource) {
123148

124149
CommonSorterDescriptor[] descriptors = CommonSorterDescriptorManager.getInstance().findApplicableSorters(theSource);
125-
Map<String, ViewerSorter> sorters = new HashMap<>();
150+
Map<String, ViewerComparator> sorters = new HashMap<>();
126151

127152
int count = 0;
128153
for (CommonSorterDescriptor descriptor : descriptors) {
129154
if(descriptor.getId() != null && descriptor.getId().length() > 0)
130-
sorters.put(descriptor.getId(), getSorter(descriptor));
155+
sorters.put(descriptor.getId(), getComparator(descriptor));
131156
else
132-
sorters.put(theSource.getId()+".sorter."+ (++count), getSorter(descriptor)); //$NON-NLS-1$
157+
sorters.put(theSource.getId() + ".sorter." + (++count), getComparator(descriptor)); //$NON-NLS-1$
133158
}
134159
return sorters;
135160
}

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonNavigator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public void createPartControl(Composite aParent) {
192192
commonViewer.addFilter(visibleFilter);
193193
}
194194

195-
commonViewer.setSorter(new CommonViewerSorter());
195+
commonViewer.setComparator(new CommonViewerSorter());
196196

197197
/*
198198
* make sure input is set after sorters and filters to avoid unnecessary

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewer.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
2626
import org.eclipse.jface.viewers.StructuredSelection;
2727
import org.eclipse.jface.viewers.TreeViewer;
28+
import org.eclipse.jface.viewers.ViewerComparator;
2829
import org.eclipse.jface.viewers.ViewerSorter;
2930
import org.eclipse.swt.dnd.DND;
3031
import org.eclipse.swt.events.DisposeEvent;
@@ -263,10 +264,11 @@ public void dispose() {
263264
* Sets this viewer's sorter and triggers refiltering and resorting of this
264265
* viewer's element. Passing <code>null</code> turns sorting off.
265266
*
266-
* @param sorter
267-
* a viewer sorter, or <code>null</code> if none
267+
* @param sorter a viewer sorter, or <code>null</code> if none
268+
* @deprecated Use {@link #setComparator(ViewerComparator)} instead.
268269
*/
269270
@Override
271+
@Deprecated(forRemoval = true, since = "2025-03")
270272
public void setSorter(ViewerSorter sorter) {
271273
if (sorter != null && sorter instanceof CommonViewerSorter commonSorter) {
272274
commonSorter.setContentService(contentService);
@@ -275,6 +277,21 @@ public void setSorter(ViewerSorter sorter) {
275277
super.setSorter(sorter);
276278
}
277279

280+
/**
281+
* Sets this viewer's sorter and triggers refiltering and resorting of this
282+
* viewer's element. Passing <code>null</code> turns sorting off.
283+
*
284+
* @param comparator a viewer sorter, or <code>null</code> if none
285+
*/
286+
@Override
287+
public void setComparator(ViewerComparator comparator) {
288+
if (comparator != null && comparator instanceof CommonViewerSorter commonSorter) {
289+
commonSorter.setContentService(contentService);
290+
}
291+
292+
super.setComparator(comparator);
293+
}
294+
278295
/**
279296
* <p>
280297
* The {@link INavigatorContentService}provides the hook into the framework

bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/navigator/CommonViewerSorter.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2006, 2015 IBM Corporation and others.
2+
* Copyright (c) 2006, 2025 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -19,7 +19,7 @@
1919
import org.eclipse.jface.viewers.TreePath;
2020
import org.eclipse.jface.viewers.TreePathViewerSorter;
2121
import org.eclipse.jface.viewers.Viewer;
22-
import org.eclipse.jface.viewers.ViewerSorter;
22+
import org.eclipse.jface.viewers.ViewerComparator;
2323
import org.eclipse.osgi.util.NLS;
2424
import org.eclipse.ui.internal.navigator.CommonNavigatorMessages;
2525
import org.eclipse.ui.internal.navigator.NavigatorContentService;
@@ -99,15 +99,15 @@ public int compare(Viewer viewer, TreePath parentPath, Object e1, Object e2) {
9999
return -1;
100100
}
101101

102-
ViewerSorter sorter = null;
102+
ViewerComparator sorter = null;
103103

104104
// shortcut if contributed by same source
105105
if (sourceOfLvalue == sourceOfRvalue) {
106-
sorter = sorterService.findSorter(sourceOfLvalue, parent, e1, e2);
106+
sorter = sorterService.findComparator(sourceOfLvalue, parent, e1, e2);
107107
} else {
108108
// findSorter returns the sorter specified at the source or if it has a higher priority a sortOnly sorter that is registered for the parent
109-
ViewerSorter lSorter = findApplicableSorter(sourceOfLvalue, parent, e1, e2);
110-
ViewerSorter rSorter = findApplicableSorter(sourceOfRvalue, parent, e1, e2);
109+
ViewerComparator lSorter = findApplicableSorter(sourceOfLvalue, parent, e1, e2);
110+
ViewerComparator rSorter = findApplicableSorter(sourceOfRvalue, parent, e1, e2);
111111
sorter = rSorter;
112112

113113
if (rSorter == null || (lSorter != null && sourceOfLvalue.getSequenceNumber() < sourceOfRvalue.getSequenceNumber())) {
@@ -126,10 +126,10 @@ public int compare(Viewer viewer, TreePath parentPath, Object e1, Object e2) {
126126
return categoryDelta;
127127
}
128128

129-
private ViewerSorter findApplicableSorter(INavigatorContentDescriptor descriptor, Object parent,
129+
private ViewerComparator findApplicableSorter(INavigatorContentDescriptor descriptor, Object parent,
130130
Object e1,
131131
Object e2) {
132-
ViewerSorter sorter = sorterService.findSorter(descriptor, parent, e1, e2);
132+
ViewerComparator sorter = sorterService.findComparator(descriptor, parent, e1, e2);
133133
if (!descriptor.isSortOnly()) { // for compatibility
134134
if (!(descriptor.isTriggerPoint(e1) && descriptor.isTriggerPoint(e2))) {
135135
return null;
@@ -155,7 +155,7 @@ public boolean isSorterProperty(TreePath parentPath, Object element, String prop
155155
INavigatorContentDescriptor contentDesc = getSource(element);
156156
if (parentPath.getSegmentCount() == 0)
157157
return false;
158-
ViewerSorter sorter = sorterService.findSorter(contentDesc, parentPath.getLastSegment(), element, null);
158+
ViewerComparator sorter = sorterService.findComparator(contentDesc, parentPath.getLastSegment(), element, null);
159159
if (sorter != null)
160160
return sorter.isSorterProperty(element, property);
161161
return false;

0 commit comments

Comments
 (0)