Skip to content

Commit 221a17f

Browse files
committed
Do not expand same class twice in (quick) type hierarchy
Requires eclipse-platform/eclipse.platform.ui#2692 Fixes eclipse-jdt#1830
1 parent 42dc611 commit 221a17f

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

org.eclipse.jdt.ui/.settings/.api_filters

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,14 @@
137137
</message_arguments>
138138
</filter>
139139
</resource>
140+
<resource path="ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java" type="org.eclipse.jdt.internal.ui.typehierarchy.HierarchyInformationControl">
141+
<filter id="571519004">
142+
<message_arguments>
143+
<message_argument value="org.eclipse.jdt.internal.ui.typehierarchy.HierarchyInformationControl.createTreeViewer(Composite, int)"/>
144+
<message_argument value="TreeViewer"/>
145+
</message_arguments>
146+
</filter>
147+
</resource>
140148
<resource path="ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java" type="org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer">
141149
<filter id="571473929">
142150
<message_arguments>

org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@
1414
package org.eclipse.jdt.internal.ui.typehierarchy;
1515

1616
import java.lang.reflect.InvocationTargetException;
17+
import java.util.HashSet;
18+
import java.util.Set;
19+
import java.util.function.Predicate;
1720

1821
import org.eclipse.swt.SWT;
1922
import org.eclipse.swt.events.KeyAdapter;
@@ -23,6 +26,7 @@
2326
import org.eclipse.swt.widgets.Shell;
2427
import org.eclipse.swt.widgets.Text;
2528
import org.eclipse.swt.widgets.Tree;
29+
import org.eclipse.swt.widgets.Widget;
2630

2731
import org.eclipse.jface.bindings.TriggerSequence;
2832
import org.eclipse.jface.bindings.keys.KeySequence;
@@ -130,7 +134,23 @@ protected TreeViewer createTreeViewer(Composite parent, int style) {
130134
gd.heightHint= tree.getItemHeight() * 12;
131135
tree.setLayoutData(gd);
132136

133-
TreeViewer treeViewer= new TreeViewer(tree);
137+
TreeViewer treeViewer= new TreeViewer(tree) {
138+
@Override
139+
protected Predicate<Widget> getShouldWidgetExpand() {
140+
141+
Set<Object> expanded= new HashSet<>();
142+
143+
// Expand every class/interface only once
144+
return w -> {
145+
if (w == null) {
146+
return false;
147+
}
148+
149+
Object data= w.getData();
150+
return data == null || expanded.add(data);
151+
};
152+
}
153+
};
134154
treeViewer.addFilter(new ViewerFilter() {
135155
@Override
136156
public boolean select(Viewer viewer, Object parentElement, Object element) {

org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/typehierarchy/TypeHierarchyViewer.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,15 @@
1313
*******************************************************************************/
1414
package org.eclipse.jdt.internal.ui.typehierarchy;
1515

16+
import java.util.HashSet;
17+
import java.util.Set;
18+
import java.util.function.Predicate;
19+
1620
import org.eclipse.swt.SWT;
1721
import org.eclipse.swt.widgets.Composite;
1822
import org.eclipse.swt.widgets.Menu;
1923
import org.eclipse.swt.widgets.Tree;
24+
import org.eclipse.swt.widgets.Widget;
2025

2126
import org.eclipse.core.runtime.Assert;
2227

@@ -182,4 +187,19 @@ protected TypeHierarchyContentProvider getHierarchyContentProvider() {
182187
return (TypeHierarchyContentProvider)getContentProvider();
183188
}
184189

190+
@Override
191+
protected Predicate<Widget> getShouldWidgetExpand() {
192+
Set<Object> expanded= new HashSet<>();
193+
194+
// Expand every class/interface only once
195+
return w -> {
196+
if (w == null) {
197+
return false;
198+
}
199+
200+
Object data= w.getData();
201+
return data == null || expanded.add(data);
202+
};
203+
}
204+
185205
}

0 commit comments

Comments
 (0)