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:
parent
c72c78d35c
commit
62104189e0
4 changed files with 39 additions and 28 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Reference in a new issue