From b202de6bec2527560232d3ccdaf2dcb81be1604b Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 17 Oct 2006 12:01:58 +0000 Subject: [PATCH] Testcase for search in unnamed namespace. --- .../indexer/tests/IndexSearchTest.java | 28 ++++++++++++++++++- .../resources/indexTests/search/nested.cpp | 4 +++ .../internal/core/pdom/dom/PDOMLinkage.java | 22 +++++++++++++-- 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/indexer/tests/IndexSearchTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/indexer/tests/IndexSearchTest.java index 71bc36b61df..007117c8654 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/indexer/tests/IndexSearchTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/indexer/tests/IndexSearchTest.java @@ -144,8 +144,14 @@ public class IndexSearchTest extends BaseTestCase { bindings= fIndex.findBindings(new Pattern[]{pns, pns, pcl}, false, INDEX_FILTER, NPM); assertEquals(1, bindings.length); checkIsClass(bindings[0]); + } + + public void testFindNamespaceInNamespace() throws CoreException { + Pattern pcl= Pattern.compile("C160913"); + Pattern pns= Pattern.compile("ns160913"); + + IIndexBinding[] bindings; - // same with namespace bindings= fIndex.findBindings(pns, true, INDEX_FILTER, NPM); assertEquals(1, bindings.length); checkIsNamespace(bindings[0]); @@ -164,6 +170,26 @@ public class IndexSearchTest extends BaseTestCase { checkIsNamespace(bindings[0]); } + public void testClassInUnnamedNamespace1() throws CoreException { + Pattern pcl= Pattern.compile("CInUnnamed160913"); + + IIndexBinding[] bindings; + + bindings= fIndex.findBindings(pcl, false, INDEX_FILTER, NPM); + assertEquals(1, bindings.length); + checkIsClass(bindings[0]); + } + + public void _testClassInUnnamedNamespace2() throws CoreException { + Pattern pcl= Pattern.compile("CInUnnamed160913"); + + IIndexBinding[] bindings; + + // the binding in the unnamed namespace is not visible in global scope. + bindings= fIndex.findBindings(pcl, true, INDEX_FILTER, NPM); + assertEquals(0, bindings.length); + } + public void testFindEnumerator() throws CoreException { Pattern pEnumeration= Pattern.compile("E20061017"); Pattern pEnumerator= Pattern.compile("e20061017"); diff --git a/core/org.eclipse.cdt.core.tests/resources/indexTests/search/nested.cpp b/core/org.eclipse.cdt.core.tests/resources/indexTests/search/nested.cpp index 552105faaac..74e8cce1a04 100644 --- a/core/org.eclipse.cdt.core.tests/resources/indexTests/search/nested.cpp +++ b/core/org.eclipse.cdt.core.tests/resources/indexTests/search/nested.cpp @@ -7,3 +7,7 @@ namespace ns160913 { class C160913{}; } }; + +namespace { + class CInUnnamed160913{}; +}; \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java index 06990ac1cd3..f4cf8ce19ed 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/dom/PDOMLinkage.java @@ -24,9 +24,9 @@ import org.eclipse.cdt.core.dom.ast.IPointerType; import org.eclipse.cdt.core.dom.ast.IQualifierType; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope; import org.eclipse.cdt.core.index.IIndexBinding; import org.eclipse.cdt.core.index.IIndexLinkage; -import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.internal.core.dom.parser.ASTInternal; import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.cdt.internal.core.pdom.db.BTree; @@ -102,7 +102,7 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage getIndex().accept(new IBTreeVisitor() { public int compare(int record) throws CoreException { return 1; - }; + } public boolean visit(int record) throws CoreException { PDOMBinding binding = pdom.getBinding(record); if (binding != null) { @@ -111,7 +111,7 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage visitor.leave(binding); } return true; - }; + } }); } @@ -162,6 +162,22 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage } // the scope is from the ast + + // mstodo revisit unnamed namespaces + IScope testScope= scope; + while (testScope instanceof ICPPNamespaceScope) { + IName name= testScope.getScopeName(); + if (name != null && name.toCharArray().length == 0) { + testScope= scope.getParent(); + if (testScope != null) { + scope= testScope; + } + } + else { + testScope= null; + } + } + IASTNode scopeNode = ASTInternal.getPhysicalNodeOfScope(scope); if (scopeNode instanceof IASTCompoundStatement) return null;