From 8af8fc67dff1b38942c30f818d8d520477f24b4e Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 24 May 2007 09:17:54 +0000 Subject: [PATCH] Avoid logging of problem bindings using CallHierarchy or TypeHierarchy. --- .../core/browser/IndexTypeReference.java | 7 ++- .../core/model/ext/CElementHandleFactory.java | 16 ++++- .../ui/callhierarchy/CHContentProvider.java | 9 +-- .../internal/ui/callhierarchy/CHQueries.java | 13 ++-- .../ui/callhierarchy/CallHierarchyUI.java | 7 --- .../actions/OpenDeclarationsAction.java | 4 +- .../internal/ui/typehierarchy/THGraph.java | 49 ++++++++------- .../ui/typehierarchy/TypeHierarchyUI.java | 40 ++++++------ .../cdt/internal/ui/viewsupport/IndexUI.java | 61 +++++++++++-------- 9 files changed, 106 insertions(+), 100 deletions(-) diff --git a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/IndexTypeReference.java b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/IndexTypeReference.java index 7beefb58213..6d78125c484 100644 --- a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/IndexTypeReference.java +++ b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/IndexTypeReference.java @@ -7,12 +7,13 @@ * * Contributors: * Anton Leherbauer (Wind River Systems) - initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.browser; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.browser.TypeReference; -import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ITranslationUnit; @@ -54,8 +55,8 @@ public class IndexTypeReference extends TypeReference { IRegion region= new Region(getOffset(), getLength()); try { return CElementHandleFactory.create(tu, binding, true, region, timestamp); - } catch (CoreException exc) { - } catch (DOMException exc) { + } catch (CoreException e) { + CCorePlugin.log(e); } } return null; diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java index b787d040854..d54e6d818a9 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/ext/CElementHandleFactory.java @@ -46,9 +46,19 @@ import org.eclipse.jface.text.IRegion; public class CElementHandleFactory { private CElementHandleFactory() {} - public static ICElementHandle create(ITranslationUnit tu, IBinding binding, boolean definition, - IRegion region, long timestamp) throws CoreException, DOMException { - + public static ICElementHandle create(ITranslationUnit tu, IBinding binding, boolean isDefinition, + IRegion region, long timestamp) throws CoreException { + try { + return internalCreate(tu, binding, isDefinition, region, timestamp); + } + catch (DOMException e) { + return null; + } + } + + + public static ICElementHandle internalCreate(ITranslationUnit tu, IBinding binding, boolean definition, + IRegion region, long timestamp) throws CoreException, DOMException { ICElement parentElement= create(tu, binding.getScope()); if (parentElement == null) { return null; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHContentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHContentProvider.java index d50814fff90..317f494e8d0 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHContentProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHContentProvider.java @@ -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 * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,7 +19,6 @@ import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.swt.widgets.Display; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndexName; @@ -100,15 +99,13 @@ public class CHContentProvider extends AsyncTreeContentProvider { } } catch (CoreException e) { CUIPlugin.getDefault().log(e); - } catch (DOMException e) { - CUIPlugin.getDefault().log(e); } catch (InterruptedException e) { } } return NO_CHILDREN; } - private Object[] asyncronouslyComputeReferencedBy(CHNode parent) throws CoreException, InterruptedException, DOMException { + private Object[] asyncronouslyComputeReferencedBy(CHNode parent) throws CoreException, InterruptedException { ICProject[] scope= CoreModel.getDefault().getCModel().getCProjects(); IIndex index= CCorePlugin.getIndexManager().getIndex(scope); index.acquireReadLock(); @@ -120,7 +117,7 @@ public class CHContentProvider extends AsyncTreeContentProvider { } } - private Object[] asyncronouslyComputeRefersTo(CHNode parent) throws CoreException, InterruptedException, DOMException { + private Object[] asyncronouslyComputeRefersTo(CHNode parent) throws CoreException, InterruptedException { ICProject[] scope= CoreModel.getDefault().getCModel().getCProjects(); IIndex index= CCorePlugin.getIndexManager().getIndex(scope); index.acquireReadLock(); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHQueries.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHQueries.java index 7afe74e57a6..7811763b658 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHQueries.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CHQueries.java @@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.ui.callhierarchy; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.index.IIndex; import org.eclipse.cdt.core.index.IIndexName; @@ -36,10 +35,9 @@ public class CHQueries { /** * Searches for functions and methods that call a given element. - * @throws DOMException */ - public static CHNode[] findCalledBy(CHContentProvider cp, CHNode node, - IIndex index, IProgressMonitor pm) throws CoreException, DOMException { + public static CHNode[] findCalledBy(CHContentProvider cp, CHNode node, IIndex index, IProgressMonitor pm) + throws CoreException { CalledByResult result= new CalledByResult(); ICElement callee= node.getRepresentedDeclaration(); if (! (callee instanceof ISourceReference)) { @@ -51,7 +49,8 @@ public class CHQueries { return cp.createNodes(node, result); } - private static void findCalledBy(IIndex index, IBinding callee, ICProject project, CalledByResult result) throws CoreException, DOMException { + private static void findCalledBy(IIndex index, IBinding callee, ICProject project, CalledByResult result) + throws CoreException { if (callee != null) { IIndexName[] names= index.findReferences(callee); for (int i = 0; i < names.length; i++) { @@ -69,9 +68,9 @@ public class CHQueries { /** * Searches for all calls that are made within a given range. - * @throws DOMException */ - public static CHNode[] findCalls(CHContentProvider cp, CHNode node, IIndex index, IProgressMonitor pm) throws CoreException, DOMException { + public static CHNode[] findCalls(CHContentProvider cp, CHNode node, IIndex index, IProgressMonitor pm) + throws CoreException { ICElement caller= node.getRepresentedDeclaration(); CallsToResult result= new CallsToResult(); IIndexName callerName= IndexUI.elementToName(index, caller); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CallHierarchyUI.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CallHierarchyUI.java index 0c19442dcdd..b300e5eadc3 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CallHierarchyUI.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/callhierarchy/CallHierarchyUI.java @@ -24,7 +24,6 @@ import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IEnumerator; @@ -186,9 +185,6 @@ public class CallHierarchyUI { catch (CoreException e) { CUIPlugin.getDefault().log(e); } - catch (DOMException e) { - CUIPlugin.getDefault().log(e); - } catch (InterruptedException e) { Thread.currentThread().interrupt(); } @@ -229,9 +225,6 @@ public class CallHierarchyUI { catch (CoreException e) { CUIPlugin.getDefault().log(e); } - catch (DOMException e) { - CUIPlugin.getDefault().log(e); - } catch (InterruptedException e) { Thread.currentThread().interrupt(); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java index a51903ffaf8..fd2553229e9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/OpenDeclarationsAction.java @@ -131,7 +131,7 @@ public class OpenDeclarationsAction extends SelectionParseAction { declNames= findNames(fIndex, ast, false, clsBinding); } } catch (DOMException e) { - CCorePlugin.log(e); + // don't log problem bindings. } } } @@ -227,8 +227,6 @@ public class OpenDeclarationsAction extends SelectionParseAction { } } catch (CoreException e) { CUIPlugin.getDefault().log(e); - } catch (DOMException e) { - CUIPlugin.getDefault().log(e); } } if (elements.isEmpty()) { 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 197ded42403..83f2cef49cd 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 @@ -31,6 +31,7 @@ import org.eclipse.cdt.core.dom.ast.ITypedef; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.index.IIndex; +import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IIndexName; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.ui.CUIPlugin; @@ -140,8 +141,6 @@ class THGraph { fInputNode= addNode(inputHandle == null ? input : inputHandle); } catch (CoreException e) { CUIPlugin.getDefault().log(e); - } catch (DOMException e) { - CUIPlugin.getDefault().log(e); } } } @@ -161,7 +160,7 @@ class THGraph { ICElement elem= (ICElement) stack.remove(stack.size()-1); THGraphNode graphNode= addNode(elem); try { - IBinding binding = IndexUI.elementToBinding(index, elem); + IIndexBinding binding = IndexUI.elementToBinding(index, elem); if (binding != null) { addMembers(index, graphNode, binding); } @@ -205,6 +204,7 @@ class THGraph { } } } catch (DOMException e) { + // index bindings should not throw this kind of exception, might as well log it. CUIPlugin.getDefault().log(e); } catch (CoreException e) { CUIPlugin.getDefault().log(e); @@ -254,33 +254,35 @@ class THGraph { } } } - } catch (DOMException e) { - CUIPlugin.getDefault().log(e); } catch (CoreException e) { CUIPlugin.getDefault().log(e); } } } - private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws DOMException, CoreException { + private void addMembers(IIndex index, THGraphNode graphNode, IBinding binding) throws CoreException { if (graphNode.getMembers(false) == null) { ArrayList memberList= new ArrayList(); - if (binding instanceof ICPPClassType) { - ICPPClassType ct= (ICPPClassType) binding; - IBinding[] members= ct.getDeclaredFields(); - addMemberElements(index, members, memberList); - members= ct.getDeclaredMethods(); - addMemberElements(index, members, memberList); - } - else if (binding instanceof ICompositeType) { - ICompositeType ct= (ICompositeType) binding; - IBinding[] members= ct.getFields(); - addMemberElements(index, members, memberList); - } - else if (binding instanceof IEnumeration) { - IEnumeration ct= (IEnumeration) binding; - IBinding[] members= ct.getEnumerators(); - addMemberElements(index, members, memberList); + try { + if (binding instanceof ICPPClassType) { + ICPPClassType ct= (ICPPClassType) binding; + IBinding[] members= ct.getDeclaredFields(); + addMemberElements(index, members, memberList); + members= ct.getDeclaredMethods(); + addMemberElements(index, members, memberList); + } + else if (binding instanceof ICompositeType) { + ICompositeType ct= (ICompositeType) binding; + IBinding[] members= ct.getFields(); + addMemberElements(index, members, memberList); + } + else if (binding instanceof IEnumeration) { + IEnumeration ct= (IEnumeration) binding; + IBinding[] members= ct.getEnumerators(); + addMemberElements(index, members, memberList); + } + } catch (DOMException e) { + // problem bindings should not be reported to the log. } if (memberList.isEmpty()) { graphNode.setMembers(NO_MEMBERS); @@ -291,7 +293,8 @@ class THGraph { } } - private void addMemberElements(IIndex index, IBinding[] members, ArrayList memberList) throws CoreException, DOMException { + private void addMemberElements(IIndex index, IBinding[] members, ArrayList memberList) + throws CoreException { for (int i = 0; i < members.length; i++) { IBinding binding = members[i]; ICElement[] elems= IndexUI.findRepresentative(index, binding); 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 a8417ec8448..f63fa0ccd3a 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 @@ -176,9 +176,6 @@ public class TypeHierarchyUI { catch (CoreException e) { CUIPlugin.getDefault().log(e); } - catch (DOMException e) { - CUIPlugin.getDefault().log(e); - } catch (InterruptedException e) { } return null; @@ -212,32 +209,33 @@ public class TypeHierarchyUI { catch (CoreException e) { CUIPlugin.getDefault().log(e); } - catch (DOMException e) { - CUIPlugin.getDefault().log(e); - } catch (InterruptedException e) { } return null; } - private static IBinding findTypeBinding(IBinding memberBinding) throws DOMException { - if (memberBinding instanceof IEnumerator) { - IType type= ((IEnumerator) memberBinding).getType(); - if (type instanceof IBinding) { - return (IBinding) type; + private static IBinding findTypeBinding(IBinding memberBinding) { + try { + if (memberBinding instanceof IEnumerator) { + IType type= ((IEnumerator) memberBinding).getType(); + if (type instanceof IBinding) { + return (IBinding) type; + } } - } - else if (memberBinding instanceof ICPPMember) { - return ((ICPPMember) memberBinding).getClassOwner(); - } - else if (memberBinding instanceof IField) { - return ((IField) memberBinding).getCompositeTypeOwner(); + else if (memberBinding instanceof ICPPMember) { + return ((ICPPMember) memberBinding).getClassOwner(); + } + else if (memberBinding instanceof IField) { + return ((IField) memberBinding).getCompositeTypeOwner(); + } + } catch (DOMException e) { + // don't log problem bindings } return null; } - private static ICElement findDefinition(ICProject project, IIndex index, - IASTName name, IBinding binding) throws CoreException, DOMException { + private static ICElement findDefinition(ICProject project, IIndex index, IASTName name, IBinding binding) + throws CoreException { if (name != null && name.isDefinition()) { return IndexUI.getCElementForName(project, index, name); } @@ -249,8 +247,8 @@ public class TypeHierarchyUI { return IndexUI.findAnyDeclaration(index, project, binding); } - private static ICElement findDeclaration(ICProject project, IIndex index, - IASTName name, IBinding binding) throws CoreException, DOMException { + private static ICElement findDeclaration(ICProject project, IIndex index, IASTName name, IBinding binding) + throws CoreException { if (name != null && name.isDefinition()) { return IndexUI.getCElementForName(project, index, name); } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java index a5130a1a3d1..e1ca48b4406 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/viewsupport/IndexUI.java @@ -65,7 +65,7 @@ import org.eclipse.cdt.internal.ui.editor.ASTProvider; public class IndexUI { private static final ICElementHandle[] EMPTY_ELEMENTS = new ICElementHandle[0]; - public static IIndexBinding elementToBinding(IIndex index, ICElement element) throws CoreException, DOMException { + public static IIndexBinding elementToBinding(IIndex index, ICElement element) throws CoreException { if (element instanceof ISourceReference) { ISourceReference sf = ((ISourceReference)element); ISourceRange range= sf.getSourceRange(); @@ -90,23 +90,27 @@ public class IndexUI { return null; } - private static boolean checkBinding(IIndexBinding binding, ICElement element) throws DOMException { - switch(element.getElementType()) { - case ICElement.C_ENUMERATION: - return binding instanceof IEnumeration; - case ICElement.C_NAMESPACE: - return binding instanceof ICPPNamespace; - case ICElement.C_STRUCT: - return binding instanceof ICompositeType && - ((ICompositeType) binding).getKey() == ICompositeType.k_struct; - case ICElement.C_CLASS: - return binding instanceof ICPPClassType && - ((ICompositeType) binding).getKey() == ICPPClassType.k_class; - case ICElement.C_UNION: - return binding instanceof ICompositeType && - ((ICompositeType) binding).getKey() == ICompositeType.k_union; - case ICElement.C_TYPEDEF: - return binding instanceof ITypedef; + private static boolean checkBinding(IIndexBinding binding, ICElement element) { + try { + switch(element.getElementType()) { + case ICElement.C_ENUMERATION: + return binding instanceof IEnumeration; + case ICElement.C_NAMESPACE: + return binding instanceof ICPPNamespace; + case ICElement.C_STRUCT: + return binding instanceof ICompositeType && + ((ICompositeType) binding).getKey() == ICompositeType.k_struct; + case ICElement.C_CLASS: + return binding instanceof ICPPClassType && + ((ICompositeType) binding).getKey() == ICPPClassType.k_class; + case ICElement.C_UNION: + return binding instanceof ICompositeType && + ((ICompositeType) binding).getKey() == ICompositeType.k_union; + case ICElement.C_TYPEDEF: + return binding instanceof ITypedef; + } + } catch (DOMException e) { + // index bindings don't throw the DOMException. } return false; } @@ -142,8 +146,7 @@ public class IndexUI { return null; } - public static ICElementHandle[] findRepresentative(IIndex index, IBinding binding) - throws CoreException, DOMException { + public static ICElementHandle[] findRepresentative(IIndex index, IBinding binding) throws CoreException { ICElementHandle[] defs = IndexUI.findAllDefinitions(index, binding); if (defs.length == 0) { ICElementHandle elem = IndexUI.findAnyDeclaration(index, null, binding); @@ -154,7 +157,7 @@ public class IndexUI { return defs; } - public static ICElementHandle[] findAllDefinitions(IIndex index, IBinding binding) throws CoreException, DOMException { + public static ICElementHandle[] findAllDefinitions(IIndex index, IBinding binding) throws CoreException { if (binding != null) { IIndexName[] defs= index.findDefinitions(binding); @@ -172,7 +175,8 @@ public class IndexUI { return EMPTY_ELEMENTS; } - public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IName declName) throws CoreException, DOMException { + public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IName declName) + throws CoreException { if (declName instanceof IASTName) { return getCElementForName(preferProject, index, (IASTName) declName); } @@ -182,7 +186,8 @@ public class IndexUI { return null; } - public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IASTName declName) throws CoreException, DOMException { + public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IASTName declName) + throws CoreException { assert !declName.isReference(); IBinding binding= declName.resolveBinding(); if (binding != null) { @@ -212,7 +217,8 @@ public class IndexUI { } } - public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IIndexName declName) throws CoreException, DOMException { + public static ICElementHandle getCElementForName(ICProject preferProject, IIndex index, IIndexName declName) + throws CoreException { assert !declName.isReference(); ITranslationUnit tu= getTranslationUnit(preferProject, declName); if (tu != null) { @@ -221,14 +227,15 @@ public class IndexUI { return null; } - public static ICElementHandle getCElementForName(ITranslationUnit tu, IIndex index, IIndexName declName) throws CoreException, - DOMException { + public static ICElementHandle getCElementForName(ITranslationUnit tu, IIndex index, IIndexName declName) + throws CoreException { IRegion region= new Region(declName.getNodeOffset(), declName.getNodeLength()); long timestamp= declName.getFile().getTimestamp(); return CElementHandleFactory.create(tu, index.findBinding(declName), declName.isDefinition(), region, timestamp); } - public static ICElementHandle findAnyDeclaration(IIndex index, ICProject preferProject, IBinding binding) throws CoreException, DOMException { + public static ICElementHandle findAnyDeclaration(IIndex index, ICProject preferProject, IBinding binding) + throws CoreException { if (binding != null) { IIndexName[] names= index.findNames(binding, IIndex.FIND_DECLARATIONS); for (int i = 0; i < names.length; i++) {