Skip to content

Commit d3fe01f

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 9df2422 commit d3fe01f

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,14 @@
145145
</message_arguments>
146146
</filter>
147147
</resource>
148+
<resource path="ui/org/eclipse/jdt/internal/ui/typehierarchy/HierarchyInformationControl.java" type="org.eclipse.jdt.internal.ui.typehierarchy.HierarchyInformationControl">
149+
<filter id="571519004">
150+
<message_arguments>
151+
<message_argument value="org.eclipse.jdt.internal.ui.typehierarchy.HierarchyInformationControl.createTreeViewer(Composite, int)"/>
152+
<message_argument value="TreeViewer"/>
153+
</message_arguments>
154+
</filter>
155+
</resource>
148156
<resource path="ui/org/eclipse/jdt/internal/ui/viewsupport/ProblemTableViewer.java" type="org.eclipse.jdt.internal.ui.viewsupport.ProblemTableViewer">
149157
<filter id="571473929">
150158
<message_arguments>

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

Lines changed: 18 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.Function;
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,20 @@ 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 void internalExpandToLevel(Widget widget, int level) {
140+
141+
Set<Object> expanded= new HashSet<>();
142+
143+
Function<Widget, Boolean> expandOnlyOnce= w -> {
144+
Object data= w.getData();
145+
return data == null || expanded.add(data);
146+
};
147+
148+
internalConditionalExpandToLevel(widget, level, expandOnlyOnce, w -> Boolean.TRUE);
149+
}
150+
};
134151
treeViewer.addFilter(new ViewerFilter() {
135152
@Override
136153
public boolean select(Viewer viewer, Object parentElement, Object element) {

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

Lines changed: 17 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.Function;
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,16 @@ protected TypeHierarchyContentProvider getHierarchyContentProvider() {
182187
return (TypeHierarchyContentProvider)getContentProvider();
183188
}
184189

190+
@Override
191+
protected void internalExpandToLevel(Widget widget, int level) {
192+
Set<Object> expanded= new HashSet<>();
193+
194+
Function<Widget, Boolean> expandOnlyOnce= w -> {
195+
Object data= w.getData();
196+
return data == null || expanded.add(data);
197+
};
198+
199+
internalConditionalExpandToLevel(widget, level, expandOnlyOnce, w -> Boolean.TRUE);
200+
}
201+
185202
}

0 commit comments

Comments
 (0)