mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-13 11:15:38 +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.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -71,10 +70,12 @@ class THHierarchyModel {
|
||||||
private Display fDisplay;
|
private Display fDisplay;
|
||||||
private ITHModelPresenter fView;
|
private ITHModelPresenter fView;
|
||||||
private WorkingSetFilterUI fFilter;
|
private WorkingSetFilterUI fFilter;
|
||||||
|
private final boolean fHideNonImplementorLeaves;
|
||||||
|
|
||||||
public THHierarchyModel(ITHModelPresenter view, Display display) {
|
public THHierarchyModel(ITHModelPresenter view, Display display, boolean hideNonImplementors) {
|
||||||
fDisplay= display;
|
fDisplay= display;
|
||||||
fView= view;
|
fView= view;
|
||||||
|
fHideNonImplementorLeaves= hideNonImplementors;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICElement getInput() {
|
public ICElement getInput() {
|
||||||
|
@ -201,8 +202,7 @@ class THHierarchyModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Iterator<THGraphNode> iterator = groots.iterator(); iterator.hasNext();) {
|
for (THGraphNode gnode : groots) {
|
||||||
THGraphNode gnode = iterator.next();
|
|
||||||
THNode node = createNode(null, gnode, inputNode);
|
THNode node = createNode(null, gnode, inputNode);
|
||||||
roots.add(node);
|
roots.add(node);
|
||||||
stack.add(node);
|
stack.add(node);
|
||||||
|
@ -216,8 +216,7 @@ class THHierarchyModel {
|
||||||
leafs.add(node);
|
leafs.add(node);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (Iterator<THGraphEdge> iterator = edges.iterator(); iterator.hasNext();) {
|
for (THGraphEdge edge : edges) {
|
||||||
THGraphEdge edge = iterator.next();
|
|
||||||
THGraphNode gchildNode= fwd ? edge.getEndNode() : edge.getStartNode();
|
THGraphNode gchildNode= fwd ? edge.getEndNode() : edge.getStartNode();
|
||||||
THNode childNode= createNode(node, gchildNode, inputNode);
|
THNode childNode= createNode(node, gchildNode, inputNode);
|
||||||
node.addChild(childNode);
|
node.addChild(childNode);
|
||||||
|
@ -234,15 +233,22 @@ class THHierarchyModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
updateImplementors();
|
updateImplementors();
|
||||||
|
if (!fwd && fHideNonImplementorLeaves && fSelectedMember != null && fMemberSignatureToSelect != null)
|
||||||
|
removeNonImplementorLeaves(fRootNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeFilteredLeafs(THNode[] rootNodes) {
|
private void removeFilteredLeafs(THNode[] rootNodes) {
|
||||||
for (int i = 0; i < rootNodes.length; i++) {
|
for (THNode node : rootNodes) {
|
||||||
THNode node = rootNodes[i];
|
|
||||||
node.removeFilteredLeafs();
|
node.removeFilteredLeafs();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void removeNonImplementorLeaves(THNode[] rootNodes) {
|
||||||
|
for (THNode node : rootNodes) {
|
||||||
|
node.removeNonImplementorLeafs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private THNode findSelection(THNode[] searchme) {
|
private THNode findSelection(THNode[] searchme) {
|
||||||
THNode[] result= new THNode[2];
|
THNode[] result= new THNode[2];
|
||||||
findSelection(searchme, result);
|
findSelection(searchme, result);
|
||||||
|
@ -252,9 +258,9 @@ class THHierarchyModel {
|
||||||
return result[1];
|
return result[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findSelection(THNode[] seachme, THNode[] result) {
|
private void findSelection(THNode[] searchme, THNode[] result) {
|
||||||
for (int i = 0; i < seachme.length; i++) {
|
for (THNode element : searchme) {
|
||||||
findSelection(seachme[i], result);
|
findSelection(element, result);
|
||||||
if (result[0] != null) {
|
if (result[0] != null) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -283,15 +289,13 @@ class THHierarchyModel {
|
||||||
if (gnode != null) {
|
if (gnode != null) {
|
||||||
ICElement[] members= gnode.getMembers(fShowInheritedMembers);
|
ICElement[] members= gnode.getMembers(fShowInheritedMembers);
|
||||||
if (members != null) {
|
if (members != null) {
|
||||||
for (int i = 0; i < members.length; i++) {
|
for (ICElement member : members) {
|
||||||
ICElement member= members[i];
|
|
||||||
if (member.equals(oldSelection)) {
|
if (member.equals(oldSelection)) {
|
||||||
fSelectedMember= member;
|
fSelectedMember= member;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int i = 0; i < members.length; i++) {
|
for (ICElement member : members) {
|
||||||
ICElement member= members[i];
|
|
||||||
if (fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
|
if (fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
|
||||||
fSelectedMember= member;
|
fSelectedMember= member;
|
||||||
return;
|
return;
|
||||||
|
@ -383,8 +387,7 @@ class THHierarchyModel {
|
||||||
|
|
||||||
private void updateImplementors() {
|
private void updateImplementors() {
|
||||||
if (fRootNodes != null) {
|
if (fRootNodes != null) {
|
||||||
for (int i = 0; i < fRootNodes.length; i++) {
|
for (THNode node : fRootNodes) {
|
||||||
THNode node = fRootNodes[i];
|
|
||||||
updateImplementors(node);
|
updateImplementors(node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -393,8 +396,7 @@ class THHierarchyModel {
|
||||||
private void updateImplementors(THNode node) {
|
private void updateImplementors(THNode node) {
|
||||||
node.setIsImplementor(isImplementor(node.getElement()));
|
node.setIsImplementor(isImplementor(node.getElement()));
|
||||||
THNode[] children= node.getChildren();
|
THNode[] children= node.getChildren();
|
||||||
for (int i = 0; i < children.length; i++) {
|
for (THNode child : children) {
|
||||||
THNode child = children[i];
|
|
||||||
updateImplementors(child);
|
updateImplementors(child);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,8 +410,7 @@ class THHierarchyModel {
|
||||||
if (gnode != null) {
|
if (gnode != null) {
|
||||||
ICElement[] members= gnode.getMembers(false);
|
ICElement[] members= gnode.getMembers(false);
|
||||||
if (members != null) {
|
if (members != null) {
|
||||||
for (int i = 0; i < members.length; i++) {
|
for (ICElement member : members) {
|
||||||
ICElement member = members[i];
|
|
||||||
if (member == fSelectedMember) {
|
if (member == fSelectedMember) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class THInformationControl extends AbstractInformationControl implements
|
||||||
@Override
|
@Override
|
||||||
protected TreeViewer createTreeViewer(Composite parent, int style) {
|
protected TreeViewer createTreeViewer(Composite parent, int style) {
|
||||||
Display display= getShell().getDisplay();
|
Display display= getShell().getDisplay();
|
||||||
fModel= new THHierarchyModel(this, display);
|
fModel= new THHierarchyModel(this, display, true);
|
||||||
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
|
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
|
||||||
fHierarchyLabelProvider.setMarkImplementers(false);
|
fHierarchyLabelProvider.setMarkImplementers(false);
|
||||||
fHierarchyTreeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
|
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();
|
THNode selection= fModel.getSelectionInHierarchy();
|
||||||
if (selection != null) {
|
if (selection != null) {
|
||||||
fHierarchyTreeViewer.setSelection(new StructuredSelection(selection));
|
fHierarchyTreeViewer.setSelection(new StructuredSelection(selection));
|
||||||
fHierarchyTreeViewer.expandToLevel(selection, 1);
|
fHierarchyTreeViewer.expandToLevel(selection, 2);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -176,8 +176,8 @@ public class THInformationControl extends AbstractInformationControl implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private THNode findElement(TreeItem[] items) {
|
private THNode findElement(TreeItem[] items) {
|
||||||
for (int i= 0; i < items.length; i++) {
|
for (TreeItem item2 : items) {
|
||||||
Object item= items[i].getData();
|
Object item= item2.getData();
|
||||||
THNode element= null;
|
THNode element= null;
|
||||||
if (item instanceof THNode) {
|
if (item instanceof THNode) {
|
||||||
element= (THNode)item;
|
element= (THNode)item;
|
||||||
|
@ -188,7 +188,7 @@ public class THInformationControl extends AbstractInformationControl implements
|
||||||
if (fStringMatcher.match(label))
|
if (fStringMatcher.match(label))
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
element= findElement(items[i].getItems());
|
element= findElement(item2.getItems());
|
||||||
if (element != null)
|
if (element != null)
|
||||||
return element;
|
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) {
|
private Control createHierarchyControl(ViewForm parent) {
|
||||||
Display display= getSite().getShell().getDisplay();
|
Display display= getSite().getShell().getDisplay();
|
||||||
fModel= new THHierarchyModel(this, display);
|
fModel= new THHierarchyModel(this, display, false);
|
||||||
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
|
fHierarchyLabelProvider= new THLabelProvider(display, fModel);
|
||||||
fHierarchyTreeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
|
fHierarchyTreeViewer = new TreeViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
|
||||||
fHierarchyTreeViewer.setContentProvider(new THContentProvider());
|
fHierarchyTreeViewer.setContentProvider(new THContentProvider());
|
||||||
|
|
Loading…
Add table
Reference in a new issue