1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 08:55:25 +02:00

Bug 325623: Hide non-implementing leaves in quick type hierarchy.

This commit is contained in:
Markus Schorn 2010-09-28 09:15:23 +00:00
parent c72c78d35c
commit 62104189e0
4 changed files with 39 additions and 28 deletions

View file

@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.ui.typehierarchy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
@ -71,10 +70,12 @@ class THHierarchyModel {
private Display fDisplay;
private ITHModelPresenter fView;
private WorkingSetFilterUI fFilter;
private final boolean fHideNonImplementorLeaves;
public THHierarchyModel(ITHModelPresenter view, Display display) {
public THHierarchyModel(ITHModelPresenter view, Display display, boolean hideNonImplementors) {
fDisplay= display;
fView= view;
fHideNonImplementorLeaves= hideNonImplementors;
}
public ICElement getInput() {
@ -121,7 +122,7 @@ class THHierarchyModel {
fSelectedTypeNode= null;
fTypeToSelect= input;
}
synchronized public void computeGraph() {
if (fJob != null) {
fJob.cancel();
@ -201,8 +202,7 @@ class THHierarchyModel {
}
}
for (Iterator<THGraphNode> iterator = groots.iterator(); iterator.hasNext();) {
THGraphNode gnode = iterator.next();
for (THGraphNode gnode : groots) {
THNode node = createNode(null, gnode, inputNode);
roots.add(node);
stack.add(node);
@ -216,8 +216,7 @@ class THHierarchyModel {
leafs.add(node);
}
else {
for (Iterator<THGraphEdge> iterator = edges.iterator(); iterator.hasNext();) {
THGraphEdge edge = iterator.next();
for (THGraphEdge edge : edges) {
THGraphNode gchildNode= fwd ? edge.getEndNode() : edge.getStartNode();
THNode childNode= createNode(node, gchildNode, inputNode);
node.addChild(childNode);
@ -234,15 +233,22 @@ class THHierarchyModel {
}
updateImplementors();
if (!fwd && fHideNonImplementorLeaves && fSelectedMember != null && fMemberSignatureToSelect != null)
removeNonImplementorLeaves(fRootNodes);
}
private void removeFilteredLeafs(THNode[] rootNodes) {
for (int i = 0; i < rootNodes.length; i++) {
THNode node = rootNodes[i];
for (THNode node : rootNodes) {
node.removeFilteredLeafs();
}
}
private void removeNonImplementorLeaves(THNode[] rootNodes) {
for (THNode node : rootNodes) {
node.removeNonImplementorLeafs();
}
}
private THNode findSelection(THNode[] searchme) {
THNode[] result= new THNode[2];
findSelection(searchme, result);
@ -252,9 +258,9 @@ class THHierarchyModel {
return result[1];
}
private void findSelection(THNode[] seachme, THNode[] result) {
for (int i = 0; i < seachme.length; i++) {
findSelection(seachme[i], result);
private void findSelection(THNode[] searchme, THNode[] result) {
for (THNode element : searchme) {
findSelection(element, result);
if (result[0] != null) {
break;
}
@ -283,15 +289,13 @@ class THHierarchyModel {
if (gnode != null) {
ICElement[] members= gnode.getMembers(fShowInheritedMembers);
if (members != null) {
for (int i = 0; i < members.length; i++) {
ICElement member= members[i];
for (ICElement member : members) {
if (member.equals(oldSelection)) {
fSelectedMember= member;
return;
}
}
for (int i = 0; i < members.length; i++) {
ICElement member= members[i];
for (ICElement member : members) {
if (fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
fSelectedMember= member;
return;
@ -383,8 +387,7 @@ class THHierarchyModel {
private void updateImplementors() {
if (fRootNodes != null) {
for (int i = 0; i < fRootNodes.length; i++) {
THNode node = fRootNodes[i];
for (THNode node : fRootNodes) {
updateImplementors(node);
}
}
@ -393,8 +396,7 @@ class THHierarchyModel {
private void updateImplementors(THNode node) {
node.setIsImplementor(isImplementor(node.getElement()));
THNode[] children= node.getChildren();
for (int i = 0; i < children.length; i++) {
THNode child = children[i];
for (THNode child : children) {
updateImplementors(child);
}
}
@ -408,8 +410,7 @@ class THHierarchyModel {
if (gnode != null) {
ICElement[] members= gnode.getMembers(false);
if (members != null) {
for (int i = 0; i < members.length; i++) {
ICElement member = members[i];
for (ICElement member : members) {
if (member == fSelectedMember) {
return true;
}

View file

@ -56,7 +56,7 @@ public class THInformationControl extends AbstractInformationControl implements
@Override
protected TreeViewer createTreeViewer(Composite parent, int style) {
Display display= getShell().getDisplay();
fModel= new THHierarchyModel(this, display);
fModel= new THHierarchyModel(this, display, true);
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
fHierarchyLabelProvider.setMarkImplementers(false);
fHierarchyTreeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
@ -151,7 +151,7 @@ public class THInformationControl extends AbstractInformationControl implements
THNode selection= fModel.getSelectionInHierarchy();
if (selection != null) {
fHierarchyTreeViewer.setSelection(new StructuredSelection(selection));
fHierarchyTreeViewer.expandToLevel(selection, 1);
fHierarchyTreeViewer.expandToLevel(selection, 2);
}
break;
}
@ -176,8 +176,8 @@ public class THInformationControl extends AbstractInformationControl implements
}
private THNode findElement(TreeItem[] items) {
for (int i= 0; i < items.length; i++) {
Object item= items[i].getData();
for (TreeItem item2 : items) {
Object item= item2.getData();
THNode element= null;
if (item instanceof THNode) {
element= (THNode)item;
@ -188,7 +188,7 @@ public class THInformationControl extends AbstractInformationControl implements
if (fStringMatcher.match(label))
return element;
}
element= findElement(items[i].getItems());
element= findElement(item2.getItems());
if (element != null)
return element;
}

View file

@ -129,5 +129,15 @@ public class THNode implements IAdaptable {
}
}
}
public void removeNonImplementorLeafs() {
for (Iterator<THNode> iterator = fChildren.iterator(); iterator.hasNext();) {
THNode child = iterator.next();
child.removeNonImplementorLeafs();
if (!child.isImplementor() && !child.hasChildren()) {
iterator.remove();
}
}
}
}

View file

@ -525,7 +525,7 @@ public class THViewPart extends ViewPart implements ITHModelPresenter {
private Control createHierarchyControl(ViewForm parent) {
Display display= getSite().getShell().getDisplay();
fModel= new THHierarchyModel(this, display);
fModel= new THHierarchyModel(this, display, false);
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
fHierarchyTreeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
fHierarchyTreeViewer.setContentProvider(new THContentProvider());