From 066875bdab9904a0f367cbd95041fb5f5334ff01 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 29 Apr 2008 08:43:11 +0000 Subject: [PATCH] Support search for references off #undef statement (fixes a NPE). --- .../eclipse/cdt/internal/core/pdom/PDOM.java | 6 +++++ .../core/pdom/dom/PDOMASTAdapter.java | 8 ++++-- .../cdt/internal/core/pdom/dom/PDOMFile.java | 3 ++- .../search/PDOMSearchTextSelectionQuery.java | 26 ++++++++++--------- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index f1b58924e79..8e2bb51d9c1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -34,6 +34,7 @@ import org.eclipse.cdt.core.dom.IPDOMNode; import org.eclipse.cdt.core.dom.IPDOMVisitor; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IEnumeration; @@ -364,6 +365,11 @@ public class PDOM extends PlatformObject implements IPDOM { if (linkage != null) { return findBindingInLinkage(linkage, binding); } + } else if (name.getPropertyInParent() == IASTPreprocessorStatement.MACRO_NAME) { + PDOMLinkage linkage= adaptLinkage(name.getLinkage()); + if (linkage != null) { + return linkage.findMacroContainer(name.toCharArray()); + } } return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java index da9a2bde2d1..5d79f606fdd 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMASTAdapter.java @@ -8,7 +8,6 @@ * Contributors: * Markus Schorn - initial API and implementation *******************************************************************************/ - package org.eclipse.cdt.internal.core.pdom.dom; import org.eclipse.cdt.core.dom.ILinkage; @@ -159,6 +158,11 @@ public class PDOMASTAdapter { public boolean isPartOfTranslationUnitFile() { return fLocation.getFileName().equals(fDelegate.getTranslationUnit().getFilePath()); } + + @Override + public String toString() { + return fDelegate.toString(); + } } private static class AnonymousEnumeration implements IEnumeration { @@ -319,7 +323,7 @@ public class PDOMASTAdapter { } } - private static class AnonymousCPPEnumeration extends AnonymousCPPBinding implements IEnumeration, ICPPBinding { + private static class AnonymousCPPEnumeration extends AnonymousCPPBinding implements IEnumeration { public AnonymousCPPEnumeration(char[] name, IEnumeration delegate) { super(name, (ICPPBinding) delegate); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java index fbe0ac92842..5425feb76de 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMFile.java @@ -307,7 +307,8 @@ public class PDOMFile implements IIndexFragmentFile { return null; } try { - if (binding instanceof IMacroBinding) { + if (binding instanceof IMacroBinding + || (binding == null && name.getPropertyInParent() == IASTPreprocessorStatement.MACRO_NAME)) { return createPDOMMacroReferenceName(linkage, name); } PDOMBinding pdomBinding = linkage.addBinding(name); diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTextSelectionQuery.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTextSelectionQuery.java index c5f1b9e1324..1db125b00ac 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTextSelectionQuery.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchTextSelectionQuery.java @@ -60,19 +60,21 @@ public class PDOMSearchTextSelectionQuery extends PDOMSearchQuery { searchText= searchName.toString(); IBinding binding= searchName.resolveBinding(); if (binding instanceof IProblemBinding == false) { - IScope scope= null; - try { - scope = binding.getScope(); - } catch (DOMException e) { - } - if (scope instanceof ICPPBlockScope || scope instanceof ICFunctionScope) { - createLocalMatches(ast, binding); - } - else { - binding = index.findBinding(searchName); - if (binding != null) { - createMatches(index, binding); + if (binding != null) { + IScope scope= null; + try { + scope = binding.getScope(); + } catch (DOMException e) { } + if (scope instanceof ICPPBlockScope || scope instanceof ICFunctionScope) { + createLocalMatches(ast, binding); + return Status.OK_STATUS; + } + } + binding = index.findBinding(searchName); + if (binding != null) { + createMatches(index, binding); + return Status.OK_STATUS; } } }