1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Type Hierarchy: filters for method pane

This commit is contained in:
Markus Schorn 2007-01-17 10:39:29 +00:00
parent ef4b5ec3b6
commit a89ed5cff7
17 changed files with 351 additions and 33 deletions

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -18,8 +18,10 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.IPositionConverter; import org.eclipse.cdt.core.IPositionConverter;
import org.eclipse.cdt.core.dom.ast.ASTTypeUtil; import org.eclipse.cdt.core.dom.ast.ASTTypeUtil;
import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.dom.ast.IParameter; import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMember;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICElementVisitor; import org.eclipse.cdt.core.model.ICElementVisitor;
@ -202,10 +204,6 @@ abstract class CElementHandle implements ICElementHandle, ISourceReference {
return false; return false;
} }
public boolean isStatic() throws CModelException {
return false;
}
public boolean isVolatile() throws CModelException { public boolean isVolatile() throws CModelException {
return false; return false;
} }
@ -238,10 +236,6 @@ abstract class CElementHandle implements ICElementHandle, ISourceReference {
return false; return false;
} }
public ASTAccessVisibility getVisibility() throws CModelException {
return ASTAccessVisibility.PUBLIC;
}
public boolean isMutable() throws CModelException { public boolean isMutable() throws CModelException {
return false; return false;
} }
@ -274,4 +268,23 @@ abstract class CElementHandle implements ICElementHandle, ISourceReference {
} }
return parameterTypes; return parameterTypes;
} }
protected ASTAccessVisibility getVisibility(IBinding binding) {
if (binding instanceof ICPPMember) {
ICPPMember member= (ICPPMember) binding;
try {
switch (member.getVisibility()) {
case ICPPMember.v_private:
return ASTAccessVisibility.PRIVATE;
case ICPPMember.v_protected:
return ASTAccessVisibility.PROTECTED;
case ICPPMember.v_public:
return ASTAccessVisibility.PUBLIC;
}
} catch (DOMException e) {
CCorePlugin.log(e);
}
}
return ASTAccessVisibility.PUBLIC;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -12,6 +12,7 @@
package org.eclipse.cdt.internal.core.model.ext; package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IEnumeration;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
public class EnumerationHandle extends CElementHandle implements org.eclipse.cdt.core.model.IEnumeration, ICElementHandle { public class EnumerationHandle extends CElementHandle implements org.eclipse.cdt.core.model.IEnumeration, ICElementHandle {
@ -19,4 +20,8 @@ public class EnumerationHandle extends CElementHandle implements org.eclipse.cdt
public EnumerationHandle(ICElement parent, IEnumeration enumeration) { public EnumerationHandle(ICElement parent, IEnumeration enumeration) {
super(parent, ICElement.C_ENUMERATION, enumeration.getName()); super(parent, ICElement.C_ENUMERATION, enumeration.getName());
} }
public boolean isStatic() throws CModelException {
return false;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -11,12 +11,34 @@
package org.eclipse.cdt.internal.core.model.ext; package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IField;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
public class FieldHandle extends CElementHandle implements org.eclipse.cdt.core.model.IField { public class FieldHandle extends CElementHandle implements org.eclipse.cdt.core.model.IField {
private ASTAccessVisibility fVisibility;
private boolean fIsStatic;
public FieldHandle(ICElement parent, IField field) { public FieldHandle(ICElement parent, IField field) {
super(parent, ICElement.C_FIELD, field.getName()); super(parent, ICElement.C_FIELD, field.getName());
fVisibility= getVisibility(field);
try {
fIsStatic= field.isStatic();
} catch (DOMException e) {
CCorePlugin.log(e);
fIsStatic= false;
}
}
public ASTAccessVisibility getVisibility() throws CModelException {
return fVisibility;
}
public boolean isStatic() throws CModelException {
return fIsStatic;
} }
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -11,6 +11,7 @@
package org.eclipse.cdt.internal.core.model.ext; package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunction;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
@ -21,10 +22,17 @@ import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
public class FunctionHandle extends CElementHandle implements org.eclipse.cdt.core.model.IFunction { public class FunctionHandle extends CElementHandle implements org.eclipse.cdt.core.model.IFunction {
private String[] fParameterTypes; private String[] fParameterTypes;
private boolean fIsStatic;
public FunctionHandle(ICElement parent, IFunction func) throws DOMException { public FunctionHandle(ICElement parent, IFunction func) throws DOMException {
super(parent, ICElement.C_FUNCTION, func.getName()); super(parent, ICElement.C_FUNCTION, func.getName());
fParameterTypes= extractParameterTypes(func); fParameterTypes= extractParameterTypes(func);
try {
fIsStatic= func.isStatic();
} catch (DOMException e) {
CCorePlugin.log(e);
fIsStatic= false;
}
} }
public boolean equals(Object obj) { public boolean equals(Object obj) {
@ -45,4 +53,8 @@ public class FunctionHandle extends CElementHandle implements org.eclipse.cdt.co
public String getSignature() throws CModelException { public String getSignature() throws CModelException {
return FunctionDeclaration.getSignature(this); return FunctionDeclaration.getSignature(this);
} }
public boolean isStatic() throws CModelException {
return fIsStatic;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -11,21 +11,33 @@
package org.eclipse.cdt.internal.core.model.ext; package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod; import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IMethod; import org.eclipse.cdt.core.model.IMethod;
import org.eclipse.cdt.core.model.IMethodDeclaration; import org.eclipse.cdt.core.model.IMethodDeclaration;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.internal.core.model.FunctionDeclaration; import org.eclipse.cdt.internal.core.model.FunctionDeclaration;
import org.eclipse.cdt.internal.core.model.MethodDeclaration; import org.eclipse.cdt.internal.core.model.MethodDeclaration;
public class MethodHandle extends CElementHandle implements IMethod { public class MethodHandle extends CElementHandle implements IMethod {
private String[] fParameterTypes; private String[] fParameterTypes;
private ASTAccessVisibility fVisibility;
private boolean fIsStatic;
public MethodHandle(ICElement parent, ICPPMethod method) throws DOMException { public MethodHandle(ICElement parent, ICPPMethod method) throws DOMException {
super(parent, ICElement.C_METHOD, method.getName()); super(parent, ICElement.C_METHOD, method.getName());
fParameterTypes= extractParameterTypes(method); fParameterTypes= extractParameterTypes(method);
fVisibility= getVisibility(method);
try {
fIsStatic= method.isStatic();
} catch (DOMException e) {
CCorePlugin.log(e);
fIsStatic= false;
}
} }
public boolean equals(Object obj) { public boolean equals(Object obj) {
@ -46,4 +58,12 @@ public class MethodHandle extends CElementHandle implements IMethod {
public String getSignature() throws CModelException { public String getSignature() throws CModelException {
return FunctionDeclaration.getSignature(this); return FunctionDeclaration.getSignature(this);
} }
public boolean isStatic() throws CModelException {
return fIsStatic;
}
public ASTAccessVisibility getVisibility() throws CModelException {
return fVisibility;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -64,4 +64,8 @@ public class StructureHandle extends CElementHandle implements IStructure {
public boolean isUnion() throws CModelException { public boolean isUnion() throws CModelException {
return getElementType() == ICElement.C_UNION; return getElementType() == ICElement.C_UNION;
} }
public boolean isStatic() throws CModelException {
return false;
}
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2006 Wind River Systems, Inc. and others. * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -11,11 +11,26 @@
package org.eclipse.cdt.internal.core.model.ext; package org.eclipse.cdt.internal.core.model.ext;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.IVariable;
import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
public class VariableHandle extends CElementHandle implements org.eclipse.cdt.core.model.IVariable { public class VariableHandle extends CElementHandle implements org.eclipse.cdt.core.model.IVariable {
private boolean fIsStatic;
public VariableHandle(ICElement parent, IVariable var) { public VariableHandle(ICElement parent, IVariable var) {
super(parent, ICElement.C_VARIABLE, var.getName()); super(parent, ICElement.C_VARIABLE, var.getName());
try {
fIsStatic= var.isStatic();
} catch (DOMException e) {
CCorePlugin.log(e);
fIsStatic= false;
}
}
public boolean isStatic() throws CModelException {
return fIsStatic;
} }
} }

View file

@ -218,6 +218,7 @@ public class CPluginImages {
public static final String IMG_LCL_TYPE_HIERARCHY= NAME_PREFIX + "hierarchy_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_TYPE_HIERARCHY= NAME_PREFIX + "hierarchy_co.gif"; //$NON-NLS-1$
public static final String IMG_LCL_SUB_TYPE_HIERARCHY= NAME_PREFIX + "sub_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_SUB_TYPE_HIERARCHY= NAME_PREFIX + "sub_co.gif"; //$NON-NLS-1$
public static final String IMG_LCL_SUPER_TYPE_HIERARCHY= NAME_PREFIX + "super_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_SUPER_TYPE_HIERARCHY= NAME_PREFIX + "super_co.gif"; //$NON-NLS-1$
public static final String IMG_LCL_SHOW_INHERITED_MEMBERS= NAME_PREFIX + "inher_co.gif"; //$NON-NLS-1$
public static final ImageDescriptor DESC_OBJS_TEMPLATE= createManaged(T_OBJ, IMG_OBJS_TEMPLATE); public static final ImageDescriptor DESC_OBJS_TEMPLATE= createManaged(T_OBJ, IMG_OBJS_TEMPLATE);

View file

@ -1,3 +1,13 @@
###############################################################################
# Copyright (c) 2006, 2007 Wind River Systems, Inc. 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
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
# Markus Schorn (Wind River Systems)
###############################################################################
CHViewPart_emptyPageMessage=To display the call hierarchy, select a function or method and select the 'Open Call Hierarchy' menu option. CHViewPart_emptyPageMessage=To display the call hierarchy, select a function or method and select the 'Open Call Hierarchy' menu option.
CHViewPart_ShowCallers_label=Show Callers CHViewPart_ShowCallers_label=Show Callers
CHViewPart_ShowCallers_tooltip=Show Callers CHViewPart_ShowCallers_tooltip=Show Callers
@ -6,7 +16,7 @@ CHViewPart_ShowCallees_tooltip=Show Callees
CHViewPart_ShowReference_label=Show Reference CHViewPart_ShowReference_label=Show Reference
CHViewPart_ShowReference_tooltip=Show Reference CHViewPart_ShowReference_tooltip=Show Reference
CHViewPart_FilterVariables_label=Filter Variables CHViewPart_FilterVariables_label=Filter Variables
CHViewPart_FilterVariables_tooltip=Hide Variables, Constents and Enumerators CHViewPart_FilterVariables_tooltip=Hide Variables, Constants and Enumerators
CHViewPart_HideMacros_label=Hide Macros CHViewPart_HideMacros_label=Hide Macros
CHViewPart_HideMacros_tooltip=Hides Macros CHViewPart_HideMacros_tooltip=Hides Macros
CHViewPart_ShowFiles_label=Show File Names CHViewPart_ShowFiles_label=Show File Names

View file

@ -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 * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -2340,6 +2340,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IR
addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDeclarations"); //$NON-NLS-1$ addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDeclarations"); //$NON-NLS-1$
addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDefinition"); //$NON-NLS-1$ addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenDefinition"); //$NON-NLS-1$
addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenTypeHierarchy"); //$NON-NLS-1$ addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenTypeHierarchy"); //$NON-NLS-1$
addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenCallHierarchy"); //$NON-NLS-1$
addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenOutline"); //$NON-NLS-1$ addAction(menu, IContextMenuConstants.GROUP_OPEN, "OpenOutline"); //$NON-NLS-1$
} }

View file

@ -30,6 +30,12 @@ public class Messages extends NLS {
public static String THViewPart_CompleteTypeHierarchy; public static String THViewPart_CompleteTypeHierarchy;
public static String THViewPart_CompleteTypeHierarchy_tooltip; public static String THViewPart_CompleteTypeHierarchy_tooltip;
public static String THViewPart_FocusOn; public static String THViewPart_FocusOn;
public static String THViewPart_HideFields_label;
public static String THViewPart_HideFields_tooltip;
public static String THViewPart_HideNonPublic_label;
public static String THViewPart_HideNonPublic_tooltip;
public static String THViewPart_HideStatic_label;
public static String THViewPart_HideStatic_tooltip;
public static String THViewPart_HorizontalOrientation; public static String THViewPart_HorizontalOrientation;
public static String THViewPart_instruction; public static String THViewPart_instruction;
public static String THViewPart_LayoutMenu; public static String THViewPart_LayoutMenu;
@ -40,6 +46,8 @@ public class Messages extends NLS {
public static String THViewPart_Refresh_tooltip; public static String THViewPart_Refresh_tooltip;
public static String THViewPart_ShowFileNames; public static String THViewPart_ShowFileNames;
public static String THViewPart_ShowFileNames_tooltip; public static String THViewPart_ShowFileNames_tooltip;
public static String THViewPart_ShowInherited_label;
public static String THViewPart_ShowInherited_tooltip;
public static String THViewPart_SinglePaneOrientation; public static String THViewPart_SinglePaneOrientation;
public static String THViewPart_SubtypeHierarchy; public static String THViewPart_SubtypeHierarchy;
public static String THViewPart_SubtypeHierarchy_tooltip; public static String THViewPart_SubtypeHierarchy_tooltip;

View file

@ -12,7 +12,10 @@
package org.eclipse.cdt.internal.ui.typehierarchy; package org.eclipse.cdt.internal.ui.typehierarchy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
@ -64,7 +67,23 @@ class THGraphNode {
fMembers= array; fMembers= array;
} }
public Object[] getMembers() { public Object[] getMembers(boolean addInherited) {
return fMembers; if (!addInherited) {
return fMembers;
}
ArrayList list= new ArrayList();
collectMembers(new HashSet(), list);
return list.toArray();
}
private void collectMembers(HashSet visited, List list) {
if (visited.add(this)) {
list.addAll(Arrays.asList(fMembers));
List bases= getOutgoing();
for (Iterator iterator = bases.iterator(); iterator.hasNext();) {
THGraphEdge edge = (THGraphEdge) iterator.next();
edge.getEndNode().collectMembers(visited, list);
}
}
} }
} }

View file

@ -64,6 +64,7 @@ public class THHierarchyModel {
private ICElement fInput; private ICElement fInput;
private int fHierarchyKind; private int fHierarchyKind;
private boolean fShowInheritedMembers;
private THGraph fGraph; private THGraph fGraph;
private Object[] fRootNodes; private Object[] fRootNodes;
@ -92,6 +93,14 @@ public class THHierarchyModel {
computeNodes(); computeNodes();
} }
public boolean isShowInheritedMembers() {
return fShowInheritedMembers;
}
public void setShowInheritedMembers(boolean showInheritedMembers) {
fShowInheritedMembers = showInheritedMembers;
}
public Object[] getHierarchyRootElements() { public Object[] getHierarchyRootElements() {
if (fRootNodes == null) { if (fRootNodes == null) {
return new Object[] {"..."}; //$NON-NLS-1$ return new Object[] {"..."}; //$NON-NLS-1$
@ -172,6 +181,9 @@ public class THHierarchyModel {
stack.add(fInput); stack.add(fInput);
handled.add(fInput); handled.add(fInput);
while (!stack.isEmpty()) { while (!stack.isEmpty()) {
if (monitor.isCanceled()) {
return;
}
ICElement elem= (ICElement) stack.remove(stack.size()-1); ICElement elem= (ICElement) stack.remove(stack.size()-1);
THGraphNode graphNode= graph.addNode(elem); THGraphNode graphNode= graph.addNode(elem);
try { try {
@ -181,6 +193,9 @@ public class THHierarchyModel {
addMembers(index, graphNode, ct); addMembers(index, graphNode, ct);
ICPPBase[] bases= ct.getBases(); ICPPBase[] bases= ct.getBases();
for (int i = 0; i < bases.length; i++) { for (int i = 0; i < bases.length; i++) {
if (monitor.isCanceled()) {
return;
}
ICPPBase base= bases[i]; ICPPBase base= bases[i];
IBinding basecl= base.getBaseClass(); IBinding basecl= base.getBaseClass();
ICElement[] baseElems= IndexUI.findRepresentative(index, basecl); ICElement[] baseElems= IndexUI.findRepresentative(index, basecl);
@ -204,7 +219,7 @@ public class THHierarchyModel {
} }
private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws DOMException, CoreException { private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws DOMException, CoreException {
if (graphNode.getMembers() == null) { if (graphNode.getMembers(false) == null) {
if (binding instanceof ICPPClassType) { if (binding instanceof ICPPClassType) {
ICPPClassType ct= (ICPPClassType) binding; ICPPClassType ct= (ICPPClassType) binding;
ArrayList memberList= new ArrayList(); ArrayList memberList= new ArrayList();
@ -359,7 +374,7 @@ public class THHierarchyModel {
public Object[] getMembers() { public Object[] getMembers() {
if (fHierarchySelection != null) { if (fHierarchySelection != null) {
THGraphNode gnode= fGraph.getNode(fHierarchySelection.getRepresentedDeclaration()); THGraphNode gnode= fGraph.getNode(fHierarchySelection.getRepresentedDeclaration());
return gnode.getMembers(); return gnode.getMembers(fShowInheritedMembers);
} }
return NO_CHILDREN; return NO_CHILDREN;
} }

View file

@ -55,6 +55,9 @@ public class THLabelProvider extends LabelProvider implements IColorProvider {
} }
} }
} }
else if (element instanceof ICElement) {
return fCLabelProvider.getImage(element);
}
return super.getImage(element); return super.getImage(element);
} }

View file

@ -35,6 +35,8 @@ import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.CLabel;
@ -45,6 +47,7 @@ import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
@ -69,6 +72,9 @@ import com.ibm.icu.text.MessageFormat;
import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IDeclaration;
import org.eclipse.cdt.core.model.IMember;
import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility;
import org.eclipse.cdt.refactoring.actions.CRefactoringActionGroup; import org.eclipse.cdt.refactoring.actions.CRefactoringActionGroup;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.actions.OpenViewActionGroup; import org.eclipse.cdt.ui.actions.OpenViewActionGroup;
@ -77,6 +83,7 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
import org.eclipse.cdt.internal.ui.IContextMenuConstants; import org.eclipse.cdt.internal.ui.IContextMenuConstants;
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup; import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
import org.eclipse.cdt.internal.ui.viewsupport.AdaptingSelectionProvider; import org.eclipse.cdt.internal.ui.viewsupport.AdaptingSelectionProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels; import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider; import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.cdt.internal.ui.viewsupport.EditorOpener; import org.eclipse.cdt.internal.ui.viewsupport.EditorOpener;
@ -90,6 +97,10 @@ public class THViewPart extends ViewPart {
private static final String TRUE = String.valueOf(true); private static final String TRUE = String.valueOf(true);
// private static final String KEY_WORKING_SET_FILTER = "workingSetFilter"; //$NON-NLS-1$ // private static final String KEY_WORKING_SET_FILTER = "workingSetFilter"; //$NON-NLS-1$
private static final String KEY_SHOW_FILES= "showFilesInLabels"; //$NON-NLS-1$ private static final String KEY_SHOW_FILES= "showFilesInLabels"; //$NON-NLS-1$
private static final String KEY_SHOW_INHERITED_MEMBERS= "showInheritedMembers"; //$NON-NLS-1$
private static final String KEY_FILTER_FIELDS= "filterFields"; //$NON-NLS-1$
private static final String KEY_FILTER_STATIC= "filterStatic"; //$NON-NLS-1$
private static final String KEY_FILTER_NON_PUBLIC= "filterNonPublic"; //$NON-NLS-1$
private static final String KEY_MODE= "hierarchyMode"; //$NON-NLS-1$ private static final String KEY_MODE= "hierarchyMode"; //$NON-NLS-1$
private static final String KEY_ORIENTATION= "viewOrientation"; //$NON-NLS-1$ private static final String KEY_ORIENTATION= "viewOrientation"; //$NON-NLS-1$
private static final String KEY_SPLITTER_W1 = "splitterWeight1"; //$NON-NLS-1$ private static final String KEY_SPLITTER_W1 = "splitterWeight1"; //$NON-NLS-1$
@ -101,7 +112,8 @@ public class THViewPart extends ViewPart {
private static final int ORIENTATION_VERTICAL = 2; private static final int ORIENTATION_VERTICAL = 2;
private static final int ORIENTATION_SINGLE = 3; 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_SIMPLE = CElementLabels.M_PARAMETER_TYPES;
// private static final int METHOD_LABEL_OPTIONS_QUALIFIED = METHOD_LABEL_OPTIONS_SIMPLE | CElementLabels.M_FULLY_QUALIFIED; 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 IMemento fMemento; private IMemento fMemento;
private boolean fShowsMessage= true; private boolean fShowsMessage= true;
@ -134,6 +146,7 @@ public class THViewPart extends ViewPart {
private Action fShowSuperTypeHierarchyAction; private Action fShowSuperTypeHierarchyAction;
private Action fShowSubTypeHierarchyAction; private Action fShowSubTypeHierarchyAction;
private Action fShowTypeHierarchyAction; private Action fShowTypeHierarchyAction;
private Action fShowInheritedMembersAction;
private Action fShowFilesInLabelsAction; private Action fShowFilesInLabelsAction;
private Action fRefreshAction; private Action fRefreshAction;
private Action fCancelAction; private Action fCancelAction;
@ -144,6 +157,14 @@ public class THViewPart extends ViewPart {
private Action fAutomaticOrientation; private Action fAutomaticOrientation;
private Action fSingleOrientation; private Action fSingleOrientation;
private Action fFieldFilterAction;
private Action fStaticFilterAction;
private Action fNonPublicFilterAction;
private ViewerFilter fFieldFilter;
private ViewerFilter fStaticFilter;
private ViewerFilter fNonPublicFilter;
// action groups // action groups
private OpenViewActionGroup fOpenViewActionGroup; private OpenViewActionGroup fOpenViewActionGroup;
private SelectionSearchGroup fSelectionSearchGroup; private SelectionSearchGroup fSelectionSearchGroup;
@ -228,10 +249,18 @@ public class THViewPart extends ViewPart {
int mode= THHierarchyModel.TYPE_HIERARCHY; int mode= THHierarchyModel.TYPE_HIERARCHY;
int orientation= ORIENTATION_AUTOMATIC; int orientation= ORIENTATION_AUTOMATIC;
boolean showFiles= false; boolean showFiles= false;
boolean showInheritedMembers= false;
boolean hideFields= false;
boolean hideStatic= false;
boolean hideNonPublic= false;
int[] weights= {35,65}; int[] weights= {35,65};
if (fMemento != null) { if (fMemento != null) {
showFiles= TRUE.equals(fMemento.getString(KEY_SHOW_FILES)); showFiles= TRUE.equals(fMemento.getString(KEY_SHOW_FILES));
showInheritedMembers= TRUE.equals(fMemento.getString(KEY_SHOW_INHERITED_MEMBERS));
hideFields= TRUE.equals(fMemento.getString(KEY_FILTER_FIELDS));
hideStatic= TRUE.equals(fMemento.getString(KEY_FILTER_STATIC));
hideNonPublic= TRUE.equals(fMemento.getString(KEY_FILTER_NON_PUBLIC));
Integer intval= fMemento.getInteger(KEY_MODE); Integer intval= fMemento.getInteger(KEY_MODE);
if (intval != null) { if (intval != null) {
mode= intval.intValue(); mode= intval.intValue();
@ -251,6 +280,16 @@ public class THViewPart extends ViewPart {
restoreHierarchyKind(mode); restoreHierarchyKind(mode);
fSplitter.setWeights(weights); fSplitter.setWeights(weights);
fShowInheritedMembersAction.setChecked(showInheritedMembers);
fShowInheritedMembersAction.run();
fFieldFilterAction.setChecked(hideFields);
fFieldFilterAction.run();
fStaticFilterAction.setChecked(hideStatic);
fStaticFilterAction.run();
fNonPublicFilterAction.setChecked(hideNonPublic);
fNonPublicFilterAction.run();
fHierarchyLabelProvider.setShowFiles(showFiles); fHierarchyLabelProvider.setShowFiles(showFiles);
fShowFilesInLabelsAction.setChecked(showFiles); fShowFilesInLabelsAction.setChecked(showFiles);
@ -267,7 +306,11 @@ public class THViewPart extends ViewPart {
// if (fWorkingSetFilterUI != null) { // if (fWorkingSetFilterUI != null) {
// fWorkingSetFilterUI.saveState(memento, KEY_WORKING_SET_FILTER); // fWorkingSetFilterUI.saveState(memento, KEY_WORKING_SET_FILTER);
// } // }
memento.putString(KEY_SHOW_INHERITED_MEMBERS, String.valueOf(fShowInheritedMembersAction.isChecked()));
memento.putString(KEY_SHOW_FILES, String.valueOf(fShowFilesInLabelsAction.isChecked())); memento.putString(KEY_SHOW_FILES, String.valueOf(fShowFilesInLabelsAction.isChecked()));
memento.putString(KEY_FILTER_FIELDS, String.valueOf(fFieldFilterAction.isChecked()));
memento.putString(KEY_FILTER_STATIC, String.valueOf(fStaticFilterAction.isChecked()));
memento.putString(KEY_FILTER_NON_PUBLIC, String.valueOf(fNonPublicFilterAction.isChecked()));
int[] weights= fSplitter.getWeights(); int[] weights= fSplitter.getWeights();
memento.putInteger(KEY_SPLITTER_W1, weights[0]); memento.putInteger(KEY_SPLITTER_W1, weights[0]);
memento.putInteger(KEY_SPLITTER_W2, weights[1]); memento.putInteger(KEY_SPLITTER_W2, weights[1]);
@ -366,7 +409,7 @@ public class THViewPart extends ViewPart {
} }
private Control createMethodControl(ViewForm parent) { private Control createMethodControl(ViewForm parent) {
fMethodLabelProvider= new CUILabelProvider(METHOD_LABEL_OPTIONS_SIMPLE, 0); fMethodLabelProvider= new CUILabelProvider(METHOD_LABEL_OPTIONS_SIMPLE, METHOD_ICON_OPTIONS);
fMethodViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); fMethodViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
fMethodViewer.setContentProvider(new THMethodContentProvider()); fMethodViewer.setContentProvider(new THMethodContentProvider());
fMethodViewer.setLabelProvider(fMethodLabelProvider); fMethodViewer.setLabelProvider(fMethodLabelProvider);
@ -432,6 +475,7 @@ public class THViewPart extends ViewPart {
THNode node= selectionToNode(event.getSelection()); THNode node= selectionToNode(event.getSelection());
fModel.onHierarchySelectionChanged(node); fModel.onHierarchySelectionChanged(node);
fMethodViewer.refresh(); fMethodViewer.refresh();
updateDescription();
} }
} }
@ -527,6 +571,96 @@ public class THViewPart extends ViewPart {
fShowSuperTypeHierarchyAction.setToolTipText(Messages.THViewPart_SupertypeHierarchy_tooltip); fShowSuperTypeHierarchyAction.setToolTipText(Messages.THViewPart_SupertypeHierarchy_tooltip);
CPluginImages.setImageDescriptors(fShowSuperTypeHierarchyAction, CPluginImages.T_LCL, CPluginImages.IMG_LCL_SUPER_TYPE_HIERARCHY); CPluginImages.setImageDescriptors(fShowSuperTypeHierarchyAction, CPluginImages.T_LCL, CPluginImages.IMG_LCL_SUPER_TYPE_HIERARCHY);
fShowInheritedMembersAction= new Action(Messages.THViewPart_ShowInherited_label, IAction.AS_CHECK_BOX) {
public void run() {
onShowInheritedMembers(isChecked());
}
};
fShowInheritedMembersAction.setToolTipText(Messages.THViewPart_ShowInherited_tooltip);
CPluginImages.setImageDescriptors(fShowInheritedMembersAction, CPluginImages.T_LCL, CPluginImages.IMG_LCL_SHOW_INHERITED_MEMBERS);
fFieldFilter= new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof ICElement) {
ICElement node= (ICElement) element;
switch (node.getElementType()) {
case ICElement.C_ENUMERATOR:
case ICElement.C_FIELD:
case ICElement.C_TEMPLATE_VARIABLE:
case ICElement.C_VARIABLE:
case ICElement.C_VARIABLE_DECLARATION:
case ICElement.C_VARIABLE_LOCAL:
return false;
}
}
return true;
}
};
fStaticFilter= new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof IDeclaration) {
IDeclaration node= (IDeclaration) element;
try {
return !node.isStatic();
} catch (CModelException e) {
CUIPlugin.getDefault().log(e);
}
}
return true;
}
};
fNonPublicFilter= new ViewerFilter() {
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof IMember) {
IMember node= (IMember) element;
try {
return ASTAccessVisibility.PUBLIC.equals(node.getVisibility());
} catch (CModelException e) {
CUIPlugin.getDefault().log(e);
}
}
return true;
}
};
fFieldFilterAction= new Action(Messages.THViewPart_HideFields_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fFieldFilter);
}
else {
fMethodViewer.removeFilter(fFieldFilter);
}
}
};
fFieldFilterAction.setToolTipText(Messages.THViewPart_HideFields_tooltip);
CPluginImages.setImageDescriptors(fFieldFilterAction, CPluginImages.T_LCL, CPluginImages.IMG_ACTION_HIDE_FIELDS);
fStaticFilterAction= new Action(Messages.THViewPart_HideStatic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fStaticFilter);
}
else {
fMethodViewer.removeFilter(fStaticFilter);
}
}
};
fStaticFilterAction.setToolTipText(Messages.THViewPart_HideStatic_tooltip);
CPluginImages.setImageDescriptors(fStaticFilterAction, CPluginImages.T_LCL, CPluginImages.IMG_ACTION_HIDE_STATIC);
fNonPublicFilterAction= new Action(Messages.THViewPart_HideNonPublic_label, IAction.AS_CHECK_BOX) {
public void run() {
if (isChecked()) {
fMethodViewer.addFilter(fNonPublicFilter);
}
else {
fMethodViewer.removeFilter(fNonPublicFilter);
}
}
};
fNonPublicFilterAction.setToolTipText(Messages.THViewPart_HideNonPublic_tooltip);
CPluginImages.setImageDescriptors(fNonPublicFilterAction, CPluginImages.T_LCL, CPluginImages.IMG_ACTION_SHOW_PUBLIC);
fOpenElement= new Action(Messages.THViewPart_Open) { fOpenElement= new Action(Messages.THViewPart_Open) {
public void run() { public void run() {
onOpenElement(getSite().getSelectionProvider().getSelection()); onOpenElement(getSite().getSelectionProvider().getSelection());
@ -595,11 +729,15 @@ public class THViewPart extends ViewPart {
submenu.add(fSingleOrientation); submenu.add(fSingleOrientation);
mm.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, submenu); mm.appendToGroup(IContextMenuConstants.GROUP_VIEWER_SETUP, submenu);
// mm.add(fReferencedByAction);
// mm.add(fMakesReferenceToAction);
mm.add(new Separator()); mm.add(new Separator());
mm.add(fShowFilesInLabelsAction); mm.add(fShowFilesInLabelsAction);
// method toolbar
fMethodToolbarManager.add(fShowInheritedMembersAction);
fMethodToolbarManager.add(new Separator());
fMethodToolbarManager.add(fFieldFilterAction);
fMethodToolbarManager.add(fStaticFilterAction);
fMethodToolbarManager.add(fNonPublicFilterAction);
} }
protected void onOpenElement(ISelection selection) { protected void onOpenElement(ISelection selection) {
@ -663,6 +801,19 @@ public class THViewPart extends ViewPart {
String scope= workingSet.getLabel(); String scope= workingSet.getLabel();
message= MessageFormat.format("{0} - {1}", new Object[] {label, scope}); //$NON-NLS-1$ message= MessageFormat.format("{0} - {1}", new Object[] {label, scope}); //$NON-NLS-1$
} }
label= ""; //$NON-NLS-1$
Image image= null;
THNode node= fModel.getSelectionInHierarchy();
if (node != null) {
elem= node.getRepresentedDeclaration();
if (elem != null) {
label= CElementLabels.getElementLabel(elem, 0);
image= fHierarchyLabelProvider.getImage(elem);
}
}
fMethodLabel.setText(label);
fMethodLabel.setImage(image);
} }
} }
setContentDescription(message); setContentDescription(message);
@ -689,6 +840,15 @@ 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();
}
}
private void updateView() { private void updateView() {
if (!fShowsMessage) { if (!fShowsMessage) {
fIgnoreSelectionChanges++; fIgnoreSelectionChanges++;

View file

@ -21,18 +21,26 @@ THHistoryListAction_label=Open History...
THViewPart_instruction=To display the type hierarchy, select a type or member and select the 'Open Type Hierarchy' menu option. THViewPart_instruction=To display the type hierarchy, select a type or member and select the 'Open Type Hierarchy' menu option.
THViewPart_MethodPane_title=Content THViewPart_MethodPane_title=Content
THViewPart_HorizontalOrientation=Horizontal View Orientation THViewPart_HorizontalOrientation=Horizontal View Orientation
THViewPart_HideNonPublic_tooltip=Hide Non-Public Members
THViewPart_VerticalOrientation=Vertical View Orientation THViewPart_VerticalOrientation=Vertical View Orientation
THViewPart_SinglePaneOrientation=Hierarchy View Only THViewPart_SinglePaneOrientation=Hierarchy View Only
THViewPart_CompleteTypeHierarchy=Type Hieararchy THViewPart_CompleteTypeHierarchy=Type Hieararchy
THViewPart_CompleteTypeHierarchy_tooltip=Show the Type Hierarchy THViewPart_CompleteTypeHierarchy_tooltip=Show the Type Hierarchy
THViewPart_SubtypeHierarchy=Subtype Hieararchy THViewPart_SubtypeHierarchy=Subtype Hieararchy
THViewPart_HideFields_label=Hide Fields
THViewPart_HideStatic_label=Hide Static Members
THViewPart_SubtypeHierarchy_tooltip=Show the Subtype Hierarchy THViewPart_SubtypeHierarchy_tooltip=Show the Subtype Hierarchy
THViewPart_SupertypeHierarchy=Supertype Hieararchy THViewPart_SupertypeHierarchy=Supertype Hieararchy
THViewPart_HideFields_tooltip=Hide Fields
THViewPart_HideStatic_tooltip=Hide Static Fields and Methods
THViewPart_Open=Open THViewPart_Open=Open
THViewPart_Open_tooltip=Open THViewPart_Open_tooltip=Open
THViewPart_ShowFileNames=Show File Names THViewPart_ShowFileNames=Show File Names
THViewPart_Cancel_tooltip=Cancel THViewPart_Cancel_tooltip=Cancel
THViewPart_ShowFileNames_tooltip=Show File Names THViewPart_ShowFileNames_tooltip=Show File Names
THViewPart_ShowInherited_label=Show Inherited Members
THViewPart_HideNonPublic_label=Hide Non-Public Members
THViewPart_ShowInherited_tooltip=Show All Inherited Members
THViewPart_Refresh=Refresh THViewPart_Refresh=Refresh
THViewPart_LayoutMenu=Layout THViewPart_LayoutMenu=Layout
THViewPart_FocusOn=Focus On ''{0}'' THViewPart_FocusOn=Focus On ''{0}''

View file

@ -171,11 +171,13 @@ public class OpenViewActionGroup extends ActionGroup {
*/ */
public void fillContextMenu(IMenuManager menu) { public void fillContextMenu(IMenuManager menu) {
super.fillContextMenu(menu); super.fillContextMenu(menu);
if (useTypeHierarchy() && !fIsTypeHiararchyViewerOwner && fOpenTypeHierarchy.isEnabled()) { if (!fEditorIsOwner) {
menu.appendToGroup(fGroupName, fOpenTypeHierarchy); if (useTypeHierarchy() && !fIsTypeHiararchyViewerOwner && fOpenTypeHierarchy.isEnabled()) {
} menu.appendToGroup(fGroupName, fOpenTypeHierarchy);
if (!fIsCallHiararchyViewerOwner && fOpenCallHierarchy.isEnabled()) { }
menu.appendToGroup(fGroupName, fOpenCallHierarchy); if (!fIsCallHiararchyViewerOwner && fOpenCallHierarchy.isEnabled()) {
menu.appendToGroup(fGroupName, fOpenCallHierarchy);
}
} }
// appendToGroup(menu, fOpenSuperImplementation); // appendToGroup(menu, fOpenSuperImplementation);
IStructuredSelection selection= getStructuredSelection(); IStructuredSelection selection= getStructuredSelection();