diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyBaseTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyBaseTest.java
index f971d887301..a5317a955b4 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyBaseTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/typehierarchy/TypeHierarchyBaseTest.java
@@ -122,7 +122,7 @@ public class TypeHierarchyBaseTest extends BaseUITestCase {
runEventQueue(10);
}
assertNotNull(th);
- return th.getMethodViewer();
+ return th.getMemberViewer();
}
protected TreeItem checkTreeNode(Tree tree, int i0, String label) {
diff --git a/core/org.eclipse.cdt.ui/icons/ovr16/defines_co.gif b/core/org.eclipse.cdt.ui/icons/ovr16/defines_co.gif
new file mode 100644
index 00000000000..53b995be2af
Binary files /dev/null and b/core/org.eclipse.cdt.ui/icons/ovr16/defines_co.gif differ
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java
index be0a525a956..aa65b8ac87d 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CPluginImages.java
@@ -232,6 +232,7 @@ public class CPluginImages {
public static final ImageDescriptor DESC_OVR_REC_RELATESTO= create(T_OVR, "rec_relatesto_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_REC_REFERENCEDBY= create(T_OVR, "rec_referencedby_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_SYSTEM_INCLUDE= create(T_OVR, "systeminclude_co.gif"); //$NON-NLS-1$
+ public static final ImageDescriptor DESC_OVR_DEFINES= create(T_OVR, "defines_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_WARNING= create(T_OVR, "warning_co.gif"); //$NON-NLS-1$
public static final ImageDescriptor DESC_OVR_ERROR= create(T_OVR, "error_co.gif"); //$NON-NLS-1$
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java
index 7e79d4ada39..e74cb00045b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraph.java
@@ -39,7 +39,7 @@ import org.eclipse.cdt.internal.core.model.ext.ICElementHandle;
import org.eclipse.cdt.internal.ui.viewsupport.IndexUI;
class THGraph {
- private static final Object[] NO_MEMBERS = new Object[0];
+ private static final ICElement[] NO_MEMBERS = new ICElement[0];
private THGraphNode fInputNode= null;
private HashSet fRootNodes= new HashSet();
private HashSet fLeaveNodes= new HashSet();
@@ -252,31 +252,29 @@ class THGraph {
private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws DOMException, CoreException {
if (graphNode.getMembers(false) == null) {
+ ArrayList memberList= new ArrayList();
if (binding instanceof ICPPClassType) {
ICPPClassType ct= (ICPPClassType) binding;
- ArrayList memberList= new ArrayList();
IBinding[] members= ct.getDeclaredFields();
addMemberElements(index, members, memberList);
members= ct.getDeclaredMethods();
addMemberElements(index, members, memberList);
- graphNode.setMembers(memberList.toArray());
}
else if (binding instanceof ICompositeType) {
ICompositeType ct= (ICompositeType) binding;
- ArrayList memberList= new ArrayList();
IBinding[] members= ct.getFields();
addMemberElements(index, members, memberList);
- graphNode.setMembers(memberList.toArray());
}
else if (binding instanceof IEnumeration) {
IEnumeration ct= (IEnumeration) binding;
- ArrayList memberList= new ArrayList();
IBinding[] members= ct.getEnumerators();
addMemberElements(index, members, memberList);
- graphNode.setMembers(memberList.toArray());
+ }
+ if (memberList.isEmpty()) {
+ graphNode.setMembers(NO_MEMBERS);
}
else {
- graphNode.setMembers(NO_MEMBERS);
+ graphNode.setMembers((ICElement[]) memberList.toArray(new ICElement[memberList.size()]));
}
}
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraphNode.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraphNode.java
index 81f18ed6377..21d2dab9823 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraphNode.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THGraphNode.java
@@ -24,7 +24,7 @@ class THGraphNode {
private List fOutgoing= Collections.EMPTY_LIST;
private List fIncoming= Collections.EMPTY_LIST;
private ICElement fElement;
- private Object[] fMembers= null;
+ private ICElement[] fMembers= null;
THGraphNode(ICElement element) {
fElement= element;
@@ -63,17 +63,17 @@ class THGraphNode {
return fIncoming;
}
- public void setMembers(Object[] array) {
+ public void setMembers(ICElement[] array) {
fMembers= array;
}
- public Object[] getMembers(boolean addInherited) {
+ public ICElement[] getMembers(boolean addInherited) {
if (!addInherited) {
return fMembers;
}
ArrayList list= new ArrayList();
collectMembers(new HashSet(), list);
- return list.toArray();
+ return (ICElement[]) list.toArray(new ICElement[list.size()]);
}
private void collectMembers(HashSet visited, List list) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THHierarchyModel.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THHierarchyModel.java
index 4d528d29e38..7a2afc159c7 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THHierarchyModel.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THHierarchyModel.java
@@ -58,9 +58,11 @@ class THHierarchyModel {
private boolean fShowInheritedMembers;
private THGraph fGraph;
- private Object[] fRootNodes;
- private THNode fHierarchySelection;
- private ICElement fHierarchySelectionToRestore;
+ private THNode[] fRootNodes;
+ private THNode fSelectedTypeNode;
+ private ICElement fTypeToSelect;
+ private ICElement fSelectedMember;
+ private String fMemberSignatureToSelect;
private Job fJob;
private Display fDisplay;
@@ -90,6 +92,8 @@ class THHierarchyModel {
public void setShowInheritedMembers(boolean showInheritedMembers) {
fShowInheritedMembers = showInheritedMembers;
+ computeSelectedMember();
+ updateImplementors();
}
public Object[] getHierarchyRootElements() {
@@ -107,8 +111,8 @@ class THHierarchyModel {
stopGraphComputation();
fInput= input;
fRootNodes= null;
- fHierarchySelection= null;
- fHierarchySelectionToRestore= input;
+ fSelectedTypeNode= null;
+ fTypeToSelect= input;
}
synchronized public void computeGraph() {
@@ -198,7 +202,7 @@ class THHierarchyModel {
while(!stack.isEmpty()) {
THNode node= (THNode) stack.remove(stack.size()-1);
- THGraphNode gnode= fGraph.getNode(node.getRepresentedDeclaration());
+ THGraphNode gnode= fGraph.getNode(node.getElement());
List edges= fwd ? gnode.getOutgoing() : gnode.getIncoming();
if (edges.isEmpty()) {
leaves.add(node);
@@ -213,25 +217,53 @@ class THHierarchyModel {
}
}
}
- fHierarchySelection= newSelection[0];
- if (fHierarchySelection == null) {
- fHierarchySelection= newSelection[1];
+ fSelectedTypeNode= newSelection[0];
+ if (fSelectedTypeNode == null) {
+ fSelectedTypeNode= newSelection[1];
}
- if (fHierarchySelection != null) {
- fHierarchySelectionToRestore= fHierarchySelection.getRepresentedDeclaration();
+ if (fSelectedTypeNode != null) {
+ fTypeToSelect= fSelectedTypeNode.getElement();
+ computeSelectedMember();
}
- fRootNodes= roots.toArray();
+
+ fRootNodes= (THNode[]) roots.toArray(new THNode[roots.size()]);
+ updateImplementors();
+ }
+
+ private void computeSelectedMember() {
+ ICElement oldSelection= fSelectedMember;
+ fSelectedMember= null;
+ if (fSelectedTypeNode != null && fMemberSignatureToSelect != null) {
+ THGraphNode gnode= fGraph.getNode(fSelectedTypeNode.getElement());
+ if (gnode != null) {
+ ICElement[] members= gnode.getMembers(fShowInheritedMembers);
+ for (int i = 0; i < members.length; i++) {
+ ICElement member= members[i];
+ if (member.equals(oldSelection)) {
+ fSelectedMember= member;
+ return;
+ }
+ }
+ for (int i = 0; i < members.length; i++) {
+ ICElement member= members[i];
+ if (fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
+ fSelectedMember= member;
+ return;
+ }
+ }
+ }
+ }
}
private THNode createNode(THNode[] newSelection, THNode parent, THGraphNode gnode) {
ICElement element = gnode.getElement();
THNode node= new THNode(parent, element);
if (newSelection[0] == null) {
- if (node.equals(fHierarchySelection)) {
+ if (node.equals(fSelectedTypeNode)) {
newSelection[0]= node;
}
else if (newSelection[1] == null) {
- if (element.equals(fHierarchySelectionToRestore)) {
+ if (element.equals(fTypeToSelect)) {
newSelection[1]= node;
}
}
@@ -250,8 +282,8 @@ class THHierarchyModel {
fView.setMessage(Messages.THHierarchyModel_errorComputingHierarchy);
}
else {
- if (fHierarchySelectionToRestore == fInput) {
- fHierarchySelectionToRestore= inputNode.getElement();
+ if (fTypeToSelect == fInput) {
+ fTypeToSelect= inputNode.getElement();
}
fInput= inputNode.getElement();
}
@@ -275,19 +307,21 @@ class THHierarchyModel {
}
public THNode getSelectionInHierarchy() {
- return fHierarchySelection;
+ return fSelectedTypeNode;
}
public void onHierarchySelectionChanged(THNode node) {
- fHierarchySelection= node;
+ fSelectedTypeNode= node;
if (node != null) {
- fHierarchySelectionToRestore= node.getRepresentedDeclaration();
+ fTypeToSelect= node.getElement();
}
+ computeSelectedMember();
+ updateImplementors();
}
public Object[] getMembers() {
- if (fHierarchySelection != null) {
- THGraphNode gnode= fGraph.getNode(fHierarchySelection.getRepresentedDeclaration());
+ if (fSelectedTypeNode != null) {
+ THGraphNode gnode= fGraph.getNode(fSelectedTypeNode.getElement());
Object[] result= gnode.getMembers(fShowInheritedMembers);
if (result != null) {
return result;
@@ -295,4 +329,57 @@ class THHierarchyModel {
}
return NO_CHILDREN;
}
+
+ public void onMemberSelectionChanged(ICElement elem) {
+ fSelectedMember= elem;
+ if (fSelectedMember != null) {
+ fMemberSignatureToSelect= TypeHierarchyUI.getLocalElementSignature(fSelectedMember);
+ }
+ updateImplementors();
+ }
+
+ private void updateImplementors() {
+ if (fRootNodes != null) {
+ for (int i = 0; i < fRootNodes.length; i++) {
+ THNode node = fRootNodes[i];
+ updateImplementors(node);
+ }
+ }
+ }
+
+ 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];
+ updateImplementors(child);
+ }
+ }
+
+ private boolean isImplementor(ICElement element) {
+ if (element == null || fSelectedMember == null) {
+ return false;
+ }
+ THGraphNode gnode= fGraph.getNode(element);
+ if (gnode != null) {
+ ICElement[] members= gnode.getMembers(false);
+ if (members != null) {
+ for (int i = 0; i < members.length; i++) {
+ ICElement member = members[i];
+ if (member == fSelectedMember) {
+ return true;
+ }
+ if (fMemberSignatureToSelect != null &&
+ fMemberSignatureToSelect.equals(TypeHierarchyUI.getLocalElementSignature(member))) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public ICElement getSelectedMember() {
+ return fSelectedMember;
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THLabelProvider.java
index 4b03be34a5d..951f9b83c22 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THLabelProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THLabelProvider.java
@@ -47,7 +47,7 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
public Image getImage(Object element) {
if (element instanceof THNode) {
THNode node= (THNode) element;
- ICElement decl= node.getRepresentedDeclaration();
+ ICElement decl= node.getElement();
if (decl != null) {
Image image= fCLabelProvider.getImage(decl);
if (image != null) {
@@ -64,7 +64,7 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
public String getText(Object element) {
if (element instanceof THNode) {
THNode node= (THNode) element;
- ICElement decl= node.getRepresentedDeclaration();
+ ICElement decl= node.getElement();
if (decl != null) {
String label= fCLabelProvider.getText(decl);
return label;
@@ -93,6 +93,9 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
flags |= CElementImageDescriptor.REFERENCED_BY;
}
}
+ if (node.isImplementor()) {
+ flags |= CElementImageDescriptor.DEFINES;
+ }
String key= image.toString()+String.valueOf(flags);
Image result= (Image) fCachedImages.get(key);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMethodContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMemberContentProvider.java
similarity index 92%
rename from core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMethodContentProvider.java
rename to core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMemberContentProvider.java
index 1e598c3d1a2..8ec56d6daa0 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMethodContentProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THMemberContentProvider.java
@@ -14,11 +14,11 @@ package org.eclipse.cdt.internal.ui.typehierarchy;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
-public class THMethodContentProvider implements IStructuredContentProvider {
+public class THMemberContentProvider implements IStructuredContentProvider {
private static final Object[] NO_CHILDREN= new Object[0];
private THHierarchyModel fModel;
- public THMethodContentProvider() {
+ public THMemberContentProvider() {
}
final public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THNode.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THNode.java
index fd48741dd98..d388923a8b1 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THNode.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THNode.java
@@ -23,18 +23,19 @@ import org.eclipse.cdt.internal.ui.util.CoreUtility;
public class THNode implements IAdaptable {
private THNode fParent;
- private ICElement fRepresentedDecl;
+ private ICElement fElement;
private List fChildren= Collections.EMPTY_LIST;
private int fHashCode;
private boolean fIsFiltered;
+ private boolean fIsImplementor;
/**
* Creates a new node for the include browser
*/
public THNode(THNode parent, ICElement decl) {
fParent= parent;
- fRepresentedDecl= decl;
+ fElement= decl;
fHashCode= computeHashCode();
}
@@ -43,8 +44,8 @@ public class THNode implements IAdaptable {
if (fParent != null) {
hashCode= fParent.hashCode() * 31;
}
- if (fRepresentedDecl != null) {
- hashCode+= fRepresentedDecl.hashCode();
+ if (fElement != null) {
+ hashCode+= fElement.hashCode();
}
return hashCode;
}
@@ -63,7 +64,7 @@ public class THNode implements IAdaptable {
return false;
}
- return CoreUtility.safeEquals(fRepresentedDecl, rhs.fRepresentedDecl);
+ return CoreUtility.safeEquals(fElement, rhs.fElement);
}
/**
@@ -74,13 +75,13 @@ public class THNode implements IAdaptable {
}
- public ICElement getRepresentedDeclaration() {
- return fRepresentedDecl;
+ public ICElement getElement() {
+ return fElement;
}
public Object getAdapter(Class adapter) {
if (adapter.isAssignableFrom(ICElement.class)) {
- return getRepresentedDeclaration();
+ return getElement();
}
return null;
}
@@ -112,8 +113,16 @@ public class THNode implements IAdaptable {
return !fChildren.isEmpty();
}
- public Object[] getChildren() {
- return fChildren.toArray();
+ public THNode[] getChildren() {
+ return (THNode[]) fChildren.toArray(new THNode[fChildren.size()]);
+ }
+
+ public void setIsImplementor(boolean val) {
+ fIsImplementor= val;
+ }
+
+ public boolean isImplementor() {
+ return fIsImplementor;
}
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java
index e8e6203bb41..18812077549 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/THViewPart.java
@@ -112,9 +112,9 @@ public class THViewPart extends ViewPart {
private static final int ORIENTATION_HORIZONTAL = 1;
private static final int ORIENTATION_VERTICAL = 2;
private static final int ORIENTATION_SINGLE = 3;
- private static final int METHOD_LABEL_OPTIONS_SIMPLE = CElementLabels.M_PARAMETER_TYPES;
- private static final int METHOD_LABEL_OPTIONS_QUALIFIED = METHOD_LABEL_OPTIONS_SIMPLE | CElementLabels.ALL_POST_QUALIFIED;
- private static final int METHOD_ICON_OPTIONS = CElementImageProvider.OVERLAY_ICONS;
+ private static final int MEMBER_LABEL_OPTIONS_SIMPLE = CElementLabels.M_PARAMETER_TYPES;
+ private static final int MEMBER_LABEL_OPTIONS_QUALIFIED = MEMBER_LABEL_OPTIONS_SIMPLE | CElementLabels.ALL_POST_QUALIFIED;
+ private static final int MEMBER_ICON_OPTIONS = CElementImageProvider.OVERLAY_ICONS;
private IMemento fMemento;
private boolean fShowsMessage= true;
@@ -129,21 +129,21 @@ public class THViewPart extends ViewPart {
private Text fInfoText;
private SashForm fSplitter;
private ViewForm fHierarchyViewForm;
- private ViewForm fMethodViewForm;
- private CLabel fMethodLabel;
+ private ViewForm fMemberViewForm;
+ private CLabel fMemberLabel;
// viewers
private THHierarchyModel fModel;
private THLabelProvider fHierarchyLabelProvider;
- private CUILabelProvider fMethodLabelProvider;
- private TableViewer fMethodViewer;
+ private CUILabelProvider fMemberLabelProvider;
+ private TableViewer fMemberViewer;
private TreeViewer fHierarchyTreeViewer;
// filters, sorter
// private WorkingSetFilterUI fWorkingSetFilterUI;
// actions
- private ToolBarManager fMethodToolbarManager;
+ private ToolBarManager fMemberToolbarManager;
private Action fShowSuperTypeHierarchyAction;
private Action fShowSubTypeHierarchyAction;
private Action fShowTypeHierarchyAction;
@@ -189,13 +189,13 @@ public class THViewPart extends ViewPart {
if (input == null) {
setMessage(Messages.THViewPart_instruction);
fHierarchyTreeViewer.setInput(null);
- fMethodViewer.setInput(null);
+ fMemberViewer.setInput(null);
return;
}
fShowsMessage= false;
fModel.setInput(input);
fHierarchyTreeViewer.setInput(fModel);
- fMethodViewer.setInput(fModel);
+ fMemberViewer.setInput(fModel);
fPagebook.showPage(fSplitter);
updateDescription();
updateHistory(input);
@@ -222,7 +222,7 @@ public class THViewPart extends ViewPart {
private void initSelectionProvider() {
SelectionProviderMediator mediator= new SelectionProviderMediator();
mediator.addViewer(fHierarchyTreeViewer);
- mediator.addViewer(fMethodViewer);
+ mediator.addViewer(fMemberViewer);
getSite().setSelectionProvider(new AdaptingSelectionProvider(ICElement.class, mediator));
}
@@ -294,7 +294,7 @@ public class THViewPart extends ViewPart {
fHierarchyLabelProvider.setShowFiles(showFiles);
fShowFilesInLabelsAction.setChecked(showFiles);
- fMethodToolbarManager.update(true);
+ fMemberToolbarManager.update(true);
}
public void init(IViewSite site, IMemento memento) throws PartInitException {
@@ -347,14 +347,14 @@ public class THViewPart extends ViewPart {
onContextMenuAboutToShow(m, false);
}
});
- menu = manager.createContextMenu(fMethodViewer.getControl());
- fMethodViewer.getControl().setMenu(menu);
- site.registerContextMenu(CUIPlugin.ID_TYPE_HIERARCHY + ".methods", manager, fMethodViewer); //$NON-NLS-1$
+ menu = manager.createContextMenu(fMemberViewer.getControl());
+ fMemberViewer.getControl().setMenu(menu);
+ site.registerContextMenu(CUIPlugin.ID_TYPE_HIERARCHY + ".members", manager, fMemberViewer); //$NON-NLS-1$
}
protected void onContextMenuAboutToShow(IMenuManager menu, boolean hierarchyView) {
CUIPlugin.createStandardGroups(menu);
- StructuredViewer viewer= hierarchyView ? (StructuredViewer) fHierarchyTreeViewer : fMethodViewer;
+ StructuredViewer viewer= hierarchyView ? (StructuredViewer) fHierarchyTreeViewer : fMemberViewer;
final ICElement elem= selectionToElement(viewer.getSelection());
if (elem != null) {
menu.appendToGroup(IContextMenuConstants.GROUP_OPEN, fOpenElement);
@@ -400,31 +400,31 @@ public class THViewPart extends ViewPart {
Control hierarchyControl= createHierarchyControl(fHierarchyViewForm);
fHierarchyViewForm.setContent(hierarchyControl);
- fMethodViewForm= new ViewForm(fSplitter, SWT.NONE);
- Control methodControl= createMethodControl(fMethodViewForm);
- fMethodViewForm.setContent(methodControl);
+ fMemberViewForm= new ViewForm(fSplitter, SWT.NONE);
+ Control memberControl= createMemberControl(fMemberViewForm);
+ fMemberViewForm.setContent(memberControl);
- fMethodLabel = new CLabel(fMethodViewForm, SWT.NONE);
- fMethodLabel.setText(Messages.THViewPart_MethodPane_title);
- fMethodViewForm.setTopLeft(fMethodLabel);
+ fMemberLabel = new CLabel(fMemberViewForm, SWT.NONE);
+ fMemberLabel.setText(Messages.THViewPart_MethodPane_title);
+ fMemberViewForm.setTopLeft(fMemberLabel);
}
- private Control createMethodControl(ViewForm parent) {
- fMethodLabelProvider= new CUILabelProvider(METHOD_LABEL_OPTIONS_SIMPLE, METHOD_ICON_OPTIONS);
- fMethodViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
- fMethodViewer.setContentProvider(new THMethodContentProvider());
- fMethodViewer.setLabelProvider(fMethodLabelProvider);
- fMethodViewer.addOpenListener(new IOpenListener() {
+ private Control createMemberControl(ViewForm parent) {
+ fMemberLabelProvider= new CUILabelProvider(MEMBER_LABEL_OPTIONS_SIMPLE, MEMBER_ICON_OPTIONS);
+ fMemberViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ fMemberViewer.setContentProvider(new THMemberContentProvider());
+ fMemberViewer.setLabelProvider(fMemberLabelProvider);
+ fMemberViewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
onOpenElement(event.getSelection());
}
});
- fMethodViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ fMemberViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(final SelectionChangedEvent event) {
- onMethodSelectionChanged(event);
+ onMemberSelectionChanged(event);
}
});
- fMethodViewer.setSorter(new ViewerSorter() {
+ fMemberViewer.setSorter(new ViewerSorter() {
public int category(Object element) {
if (element instanceof ICElement) {
ICElement celem= (ICElement)element;
@@ -446,14 +446,17 @@ public class THViewPart extends ViewPart {
}
});
- ToolBar methodToolBar= new ToolBar(parent, SWT.FLAT | SWT.WRAP);
- parent.setTopCenter(methodToolBar);
- fMethodToolbarManager= new ToolBarManager(methodToolBar);
- return fMethodViewer.getControl();
+ ToolBar memberToolBar= new ToolBar(parent, SWT.FLAT | SWT.WRAP);
+ parent.setTopCenter(memberToolBar);
+ fMemberToolbarManager= new ToolBarManager(memberToolBar);
+ return fMemberViewer.getControl();
}
- protected void onMethodSelectionChanged(SelectionChangedEvent event) {
+ protected void onMemberSelectionChanged(SelectionChangedEvent event) {
if (fIgnoreSelectionChanges == 0) {
+ ICElement elem= selectionToElement(event.getSelection());
+ fModel.onMemberSelectionChanged(elem);
+ fHierarchyTreeViewer.refresh();
}
}
@@ -485,8 +488,7 @@ public class THViewPart extends ViewPart {
if (fIgnoreSelectionChanges == 0) {
THNode node= selectionToNode(event.getSelection());
fModel.onHierarchySelectionChanged(node);
- fMethodViewer.refresh();
- updateDescription();
+ updateView();
}
}
@@ -636,10 +638,10 @@ public class THViewPart extends ViewPart {
fFieldFilterAction= new Action(Messages.THViewPart_HideFields_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
- fMethodViewer.addFilter(fFieldFilter);
+ fMemberViewer.addFilter(fFieldFilter);
}
else {
- fMethodViewer.removeFilter(fFieldFilter);
+ fMemberViewer.removeFilter(fFieldFilter);
}
}
};
@@ -649,10 +651,10 @@ public class THViewPart extends ViewPart {
fStaticFilterAction= new Action(Messages.THViewPart_HideStatic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
- fMethodViewer.addFilter(fStaticFilter);
+ fMemberViewer.addFilter(fStaticFilter);
}
else {
- fMethodViewer.removeFilter(fStaticFilter);
+ fMemberViewer.removeFilter(fStaticFilter);
}
}
};
@@ -662,10 +664,10 @@ public class THViewPart extends ViewPart {
fNonPublicFilterAction= new Action(Messages.THViewPart_HideNonPublic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
- fMethodViewer.addFilter(fNonPublicFilter);
+ fMemberViewer.addFilter(fNonPublicFilter);
}
else {
- fMethodViewer.removeFilter(fNonPublicFilter);
+ fMemberViewer.removeFilter(fNonPublicFilter);
}
}
};
@@ -743,12 +745,12 @@ public class THViewPart extends ViewPart {
mm.add(new Separator());
mm.add(fShowFilesInLabelsAction);
- // method toolbar
- fMethodToolbarManager.add(fShowInheritedMembersAction);
- fMethodToolbarManager.add(new Separator());
- fMethodToolbarManager.add(fFieldFilterAction);
- fMethodToolbarManager.add(fStaticFilterAction);
- fMethodToolbarManager.add(fNonPublicFilterAction);
+ // member toolbar
+ fMemberToolbarManager.add(fShowInheritedMembersAction);
+ fMemberToolbarManager.add(new Separator());
+ fMemberToolbarManager.add(fFieldFilterAction);
+ fMemberToolbarManager.add(fStaticFilterAction);
+ fMemberToolbarManager.add(fNonPublicFilterAction);
}
protected void onOpenElement(ISelection selection) {
@@ -817,14 +819,14 @@ public class THViewPart extends ViewPart {
Image image= null;
THNode node= fModel.getSelectionInHierarchy();
if (node != null) {
- elem= node.getRepresentedDeclaration();
+ elem= node.getElement();
if (elem != null) {
label= CElementLabels.getElementLabel(elem, 0);
image= fHierarchyLabelProvider.getImage(elem);
}
}
- fMethodLabel.setText(label);
- fMethodLabel.setImage(image);
+ fMemberLabel.setText(label);
+ fMemberLabel.setImage(image);
}
}
setContentDescription(message);
@@ -854,21 +856,33 @@ public class THViewPart extends ViewPart {
protected void onShowInheritedMembers(boolean show) {
if (fModel.isShowInheritedMembers() != show) {
fModel.setShowInheritedMembers(show);
- fMethodLabelProvider.setTextFlags(show ?
- METHOD_LABEL_OPTIONS_QUALIFIED : METHOD_LABEL_OPTIONS_SIMPLE);
- fMethodViewer.refresh();
+ fMemberLabelProvider.setTextFlags(show ?
+ MEMBER_LABEL_OPTIONS_QUALIFIED : MEMBER_LABEL_OPTIONS_SIMPLE);
+ updateViewers();
}
}
-
- private void updateView() {
+
+ private void updateViewers() {
if (!fShowsMessage) {
fIgnoreSelectionChanges++;
try {
fHierarchyTreeViewer.refresh();
- fMethodViewer.refresh();
+ fMemberViewer.refresh();
+ setSelections();
+ }
+ finally {
+ fIgnoreSelectionChanges--;
+ }
+ }
+ }
+
+ private void updateView() {
+ if (!fShowsMessage) {
+ fIgnoreSelectionChanges++;
+ try {
+ updateViewers();
updateDescription();
updateActionEnablement();
- setSelections();
}
finally {
fIgnoreSelectionChanges--;
@@ -884,6 +898,10 @@ public class THViewPart extends ViewPart {
fHierarchyTreeViewer.setSelection(new StructuredSelection(node));
fHierarchyTreeViewer.expandToLevel(node, 1);
}
+ ICElement elem= fModel.getSelectedMember();
+ if (elem != null) {
+ fMemberViewer.setSelection(new StructuredSelection(elem));
+ }
}
finally {
fIgnoreSelectionChanges--;
@@ -947,8 +965,8 @@ public class THViewPart extends ViewPart {
return fHierarchyTreeViewer;
}
- public TableViewer getMethodViewer() {
- return fMethodViewer;
+ public TableViewer getMemberViewer() {
+ return fMemberViewer;
}
private void restoreOrientation(int orientation) {
@@ -998,10 +1016,10 @@ public class THViewPart extends ViewPart {
orientation= getBestOrientation();
}
if (orientation == ORIENTATION_SINGLE) {
- fMethodViewForm.setVisible(false);
+ fMemberViewForm.setVisible(false);
} else {
if (fCurrentViewOrientation == ORIENTATION_SINGLE) {
- fMethodViewForm.setVisible(true);
+ fMemberViewForm.setVisible(true);
}
boolean horizontal= orientation == ORIENTATION_HORIZONTAL;
fSplitter.setOrientation(horizontal ? SWT.HORIZONTAL : SWT.VERTICAL);
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/TypeHierarchyUI.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/TypeHierarchyUI.java
index aa08e8b47fa..be07093a29b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/TypeHierarchyUI.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/typehierarchy/TypeHierarchyUI.java
@@ -32,8 +32,10 @@ import org.eclipse.cdt.core.dom.ast.IEnumeration;
import org.eclipse.cdt.core.dom.ast.ITypedef;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexManager;
+import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
+import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.ui.CUIPlugin;
@@ -218,4 +220,21 @@ public class TypeHierarchyUI {
}
return false;
}
+
+ static String getLocalElementSignature(ICElement element) {
+ if (element != null) {
+ try {
+ switch (element.getElementType()) {
+ case ICElement.C_METHOD:
+ case ICElement.C_METHOD_DECLARATION:
+ return ((IFunctionDeclaration) element).getSignature();
+ case ICElement.C_FIELD:
+ return element.getElementName();
+ }
+ } catch (CModelException e) {
+ CUIPlugin.getDefault().log(e);
+ }
+ }
+ return null;
+ }
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/CElementImageProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/CElementImageProvider.java
index 091e6253060..f8ff8f793dc 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/CElementImageProvider.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/CElementImageProvider.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -444,12 +444,12 @@ public class CElementImageProvider {
if ((renderFlags & OVERLAY_WARNING) !=0) {
flags |= CElementImageDescriptor.WARNING;
}
- if ((renderFlags & OVERLAY_OVERRIDE) !=0) {
- flags |= CElementImageDescriptor.OVERRIDES;
- }
- if ((renderFlags & OVERLAY_IMPLEMENTS) !=0) {
- flags |= CElementImageDescriptor.IMPLEMENTS;
- }
+// if ((renderFlags & OVERLAY_OVERRIDE) !=0) {
+// flags |= CElementImageDescriptor.OVERRIDES;
+// }
+// if ((renderFlags & OVERLAY_IMPLEMENTS) !=0) {
+// flags |= CElementImageDescriptor.IMPLEMENTS;
+// }
return flags;
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementImageDescriptor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementImageDescriptor.java
index a50477072a0..714294d4a38 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementImageDescriptor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementImageDescriptor.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+ * Copyright (c) 2000, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -49,7 +49,9 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the static adornment */
public final static int STATIC= 0x008;
- /** Flag to render the runnable adornment */
+ /**
+ * @deprecated flag never had an effect
+ */
public final static int RUNNABLE= 0x010;
/** Flag to render the waring adornment */
@@ -58,10 +60,14 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the error adornment */
public final static int ERROR= 0x040;
- /** Flag to render the 'override' adornment */
+ /**
+ * @deprecated flag never had an effect
+ */
public final static int OVERRIDES= 0x080;
- /** Flag to render the 'implements' adornment */
+ /**
+ * @deprecated flag never had an effect
+ */
public final static int IMPLEMENTS= 0x100;
/** Flag to render the 'relates to' adornment (for trees, an arrow down) */
@@ -79,6 +85,9 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/** Flag to render the 'system include' adornment */
public final static int SYSTEM_INCLUDE= 0x2000;
+ /** Flag to render the 'defines' adornment in the type hierarchy*/
+ public final static int DEFINES= 0x4000;
+
private ImageDescriptor fBaseImage;
private int fFlags;
private Point fSize;
@@ -103,8 +112,8 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
/**
* Sets the descriptors adornments. Valid values are: ABSTRACT
, FINAL
,
- * SYNCHRONIZED
, STATIC,
RUNNABLE,
WARNING,
- *
ERROR,
OVERRIDDEN, or any combination of those.
+ *
STATIC,
WARNING,
+ *
ERROR, or any combination of those.
*
* @param adornments the image descritpors adornments
*/
@@ -199,6 +208,10 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
x-= data.width;
drawImage(data, x, 0);
}
+ if ((fFlags & DEFINES) != 0) {
+ data= CPluginImages.DESC_OVR_DEFINES.getImageData();
+ drawImage(data, 0, 0);
+ }
if ((fFlags & TEMPLATE) != 0) {
data= CPluginImages.DESC_OVR_TEMPLATE.getImageData();
x-= data.width;
@@ -235,26 +248,16 @@ public class CElementImageDescriptor extends CompositeImageDescriptor {
x-= data.width;
drawImage(data, x, size.y-data.height);
}
- /*if ((fFlags & SYNCHRONIZED) != 0) {
- data= CPluginImages.DESC_OVR_SYNCH.getImageData();
- x-= data.width;
- drawImage(data, x, size.y - data.height);
- }
- if ((fFlags & RUNNABLE) != 0) {
- data= CPluginImages.DESC_OVR_RUN.getImageData();
- x-= data.width;
- drawImage(data, x, size.y - data.height);
- }
- if ((fFlags & OVERRIDES) != 0) {
- data= CPluginImages.DESC_OVR_OVERRIDES.getImageData();
- x-= data.width;
- drawImage(data, x, size.y - data.height);
- }
- if ((fFlags & IMPLEMENTS) != 0) {
- data= CPluginImages.DESC_OVR_IMPLEMENTS.getImageData();
- x-= data.width;
- drawImage(data, x, size.y - data.height);
- } */
+// if ((fFlags & OVERRIDES) != 0) {
+// data= CPluginImages.DESC_OVR_OVERRIDES.getImageData();
+// x-= data.width;
+// drawImage(data, x, size.y - data.height);
+// }
+// if ((fFlags & IMPLEMENTS) != 0) {
+// data= CPluginImages.DESC_OVR_IMPLEMENTS.getImageData();
+// x-= data.width;
+// drawImage(data, x, size.y - data.height);
+// }
}
private void drawBottomLeft() {