1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-23 17:05:26 +02:00

Fix for 172453, inconsistencies in index API + testcases.

This commit is contained in:
Markus Schorn 2007-02-01 14:20:43 +00:00
parent 97429d512d
commit 50c791143e
27 changed files with 276 additions and 207 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
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -21,6 +21,7 @@ import java.util.regex.Pattern;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.IPDOMManager;
import org.eclipse.cdt.core.dom.ast.IASTName;
@ -49,7 +50,6 @@ import org.eclipse.cdt.core.testplugin.TestScannerProvider;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.core.testplugin.util.TestSourceReader;
import org.eclipse.cdt.internal.core.CCoreInternals;
import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@ -408,7 +408,7 @@ public class IndexBugsTests extends BaseTestCase {
fIndex.acquireReadLock();
try {
IBinding[] bindings= fIndex.findInGlobalScope(Linkage.C_LINKAGE, "S20070201".toCharArray());
IBinding[] bindings= fIndex.findBindings("S20070201".toCharArray(), IndexFilter.getFilter(ILinkage.C_LINKAGE_ID), NPM);
assertEquals(2, bindings.length);
IBinding struct, typedef;
@ -443,7 +443,7 @@ public class IndexBugsTests extends BaseTestCase {
fIndex.acquireReadLock();
try {
IBinding[] bindings= fIndex.findInGlobalScope(Linkage.CPP_LINKAGE, "S20070201".toCharArray());
IBinding[] bindings= fIndex.findBindings("S20070201".toCharArray(), IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID), NPM);
assertEquals(2, bindings.length);
IBinding struct, typedef;

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
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -140,6 +140,9 @@ public class IndexIncludeTest extends IndexTestBase {
IIndexBinding[] result= fIndex.findBindings(Pattern.compile("testInclude_cpp"), true, IndexFilter.ALL, NPM);
assertEquals(1, result.length);
result= fIndex.findBindings("testInclude_cpp".toCharArray(), IndexFilter.ALL, NPM);
assertEquals(1, result.length);
}
finally {
fIndex.releaseReadLock();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 Symbian Software Systems and others.
* Copyright (c) 2006, 2007 Symbian Software Systems 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
@ -101,6 +101,12 @@ public class IndexLocationTest extends BaseTestCase {
assertEquals(1, bs1.length);
assertEquals(1, bs2.length);
assertEquals(1, bs3.length);
bs1 = index.findBindings("foo".toCharArray(), IndexFilter.ALL, new NullProgressMonitor());
bs2 = index.findBindings("bar".toCharArray(), IndexFilter.ALL, new NullProgressMonitor());
bs3 = index.findBindings("baz".toCharArray(), IndexFilter.ALL, new NullProgressMonitor());
assertEquals(1, bs1.length);
assertEquals(1, bs2.length);
assertEquals(1, bs3.length);
IIndexName[] nms1 = index.findNames(bs1[0], IIndex.FIND_ALL_OCCURENCES);
IIndexName[] nms2 = index.findNames(bs2[0], IIndex.FIND_ALL_OCCURENCES);
IIndexName[] nms3 = index.findNames(bs3[0], IIndex.FIND_ALL_OCCURENCES);

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
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -104,8 +104,10 @@ public class IndexSearchTest extends IndexTestBase {
}
public void testFindClassInNamespace() throws CoreException {
Pattern pcl= Pattern.compile("C160913");
Pattern pns= Pattern.compile("ns160913");
String scl = "C160913";
Pattern pcl= Pattern.compile(scl);
String sns = "ns160913";
Pattern pns= Pattern.compile(sns);
IIndexBinding[] bindings;
@ -113,6 +115,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(scl.toCharArray(), INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(pcl, false, INDEX_FILTER, NPM);
assertEquals(3, bindings.length);
checkIsClass(bindings[0]);
@ -123,6 +129,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(new char[][]{sns.toCharArray(), scl.toCharArray()}, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(new Pattern[]{pns, pcl}, false, INDEX_FILTER, NPM);
assertEquals(2, bindings.length);
checkIsClass(bindings[0]);
@ -132,6 +142,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(new char[][]{sns.toCharArray(), sns.toCharArray(), scl.toCharArray()}, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
bindings= fIndex.findBindings(new Pattern[]{pns, pns, pcl}, false, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsClass(bindings[0]);
@ -140,6 +154,8 @@ public class IndexSearchTest extends IndexTestBase {
public void testFindNamespaceInNamespace() throws CoreException {
Pattern pcl= Pattern.compile("C160913");
Pattern pns= Pattern.compile("ns160913");
char[] scl= pcl.pattern().toCharArray();
char[] sns= pns.pattern().toCharArray();
IIndexBinding[] bindings;
@ -147,6 +163,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsNamespace(bindings[0]);
bindings= fIndex.findBindings(sns, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsNamespace(bindings[0]);
bindings= fIndex.findBindings(pns, false, INDEX_FILTER, NPM);
assertEquals(2, bindings.length);
checkIsNamespace(bindings[0]);
@ -156,6 +176,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsNamespace(bindings[0]);
bindings= fIndex.findBindings(new char[][]{sns, sns}, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsNamespace(bindings[0]);
bindings= fIndex.findBindings(new Pattern[]{pns, pns}, false, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsNamespace(bindings[0]);
@ -169,12 +193,17 @@ public class IndexSearchTest extends IndexTestBase {
// the binding in the unnamed namespace is not visible in global scope.
bindings= fIndex.findBindings(pcl, true, INDEX_FILTER, NPM);
assertEquals(0, bindings.length);
}
bindings= fIndex.findBindings(pcl.pattern().toCharArray(), INDEX_FILTER, NPM);
assertEquals(0, bindings.length);
}
public void testFindEnumerator() throws CoreException {
Pattern pEnumeration= Pattern.compile("E20061017");
Pattern pEnumerator= Pattern.compile("e20061017");
char[] sEnumeration= pEnumeration.pattern().toCharArray();
char[] sEnumerator= pEnumerator.pattern().toCharArray();
IIndexBinding[] bindings;
// enumerators are found in global scope
@ -189,6 +218,9 @@ public class IndexSearchTest extends IndexTestBase {
bindings= fIndex.findBindings(new Pattern[]{pEnumeration, pEnumerator}, true, INDEX_FILTER, NPM);
assertEquals(0, bindings.length);
bindings= fIndex.findBindings(new char[][]{sEnumeration, sEnumerator}, INDEX_FILTER, NPM);
assertEquals(0, bindings.length);
bindings= fIndex.findBindings(new Pattern[]{pEnumeration, pEnumerator}, false, INDEX_FILTER, NPM);
assertEquals(0, bindings.length);
@ -196,6 +228,10 @@ public class IndexSearchTest extends IndexTestBase {
assertEquals(1, bindings.length);
checkIsEnumeration(bindings[0]);
bindings= fIndex.findBindings(sEnumeration, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsEnumeration(bindings[0]);
bindings= fIndex.findBindings(pEnumeration, false, INDEX_FILTER, NPM);
assertEquals(1, bindings.length);
checkIsEnumeration(bindings[0]);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* Copyright (c) 2006, 2007 IBM Corporation.
* 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
@ -21,6 +21,7 @@ import org.eclipse.cdt.core.dom.ast.IFunctionType;
import org.eclipse.cdt.core.dom.ast.IParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.core.CCoreInternals;
import org.eclipse.cdt.internal.core.pdom.PDOM;
@ -150,7 +151,7 @@ public class CPPFunctionTests extends PDOMTestBase {
for (int i = 0; i < 2; i++) {
ICPPFunction function = (ICPPFunction) bindings[i];
assertEquals(1, pdom.getDeclarations(function).length);
assertEquals(1, pdom.findNames(function, IIndex.FIND_DECLARATIONS_DEFINITIONS).length);
assertEquals(1, pdom.getDefinitions(function).length);
IParameter[] parameters = function.getParameters();
switch (parameters.length) {

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 Symbian Software and others.
* Copyright (c) 2006, 2007 Symbian Software 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
@ -52,7 +52,7 @@ public class OverloadsWithinCommonHeaderTests extends PDOMTestBase {
public void testOverloadedInCommonHeader_ClassScope() throws CoreException {
Pattern[] ManyOverloadedQuxPath = makePatternArray(new String[] {"ManyOverloaded","qux"});
IBinding[] ManyOverloadedQux = pdom.findBindings(ManyOverloadedQuxPath, new NullProgressMonitor());
IBinding[] ManyOverloadedQux = pdom.findBindings(ManyOverloadedQuxPath, true, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(5,ManyOverloadedQux.length);
// ManyOverloaded.qux()

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 Symbian Software and others.
* Copyright (c) 2006, 2007 Symbian Software 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
@ -17,6 +17,7 @@ import java.util.regex.Pattern;
import org.eclipse.cdt.core.dom.ast.IBasicType;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.core.CCoreInternals;
import org.eclipse.cdt.internal.core.pdom.PDOM;
@ -45,26 +46,26 @@ public class OverloadsWithinSingleTUTests extends PDOMTestBase {
}
public void testDistinctBindingsPresent() throws Exception {
IBinding[] fooBs = pdom.findBindings(Pattern.compile("foo"), new NullProgressMonitor());
IBinding[] fooBs = pdom.findBindings(Pattern.compile("foo"), false, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(3, fooBs.length);
IBinding[] barBs = pdom.findBindings(Pattern.compile("bar"), new NullProgressMonitor());
IBinding[] barBs = pdom.findBindings(Pattern.compile("bar"), false, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(8, barBs.length);
IBinding[] FooBs = pdom.findBindings(Pattern.compile("Foo"), new NullProgressMonitor());
IBinding[] FooBs = pdom.findBindings(Pattern.compile("Foo"), false, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(4, FooBs.length);
Pattern[] XBarAbsPath = makePatternArray(new String[] {"X","bar"});
IBinding[] XBarBs = pdom.findBindings(XBarAbsPath, new NullProgressMonitor());
IBinding[] XBarBs = pdom.findBindings(XBarAbsPath, true, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(4, XBarBs.length);
Pattern[] XFooPath = makePatternArray(new String[] {"X","Foo"});
IBinding[] XFooPathBs = pdom.findBindings(XFooPath, new NullProgressMonitor());
IBinding[] XFooPathBs = pdom.findBindings(XFooPath, true, IndexFilter.ALL, new NullProgressMonitor());
assertEquals(1, XFooPathBs.length);
}
public void testReferencesToGlobalBindings() throws Exception {
IBinding[] BarBs = pdom.findBindings(Pattern.compile("bar"), new NullProgressMonitor());
IBinding[] BarBs = pdom.findBindings(Pattern.compile("bar"), false, IndexFilter.ALL, new NullProgressMonitor());
IBinding[] globalBs = getGlobalBindings(BarBs);
assertEquals(4, globalBs.length);
@ -94,7 +95,7 @@ public class OverloadsWithinSingleTUTests extends PDOMTestBase {
public void testReferencesToNamespacedBindings() throws Exception {
Pattern[] XBarAbsPath = makePatternArray(new String[] {"X","bar"});
IBinding[] XBarBs = pdom.findBindings(XBarAbsPath, new NullProgressMonitor());
IBinding[] XBarBs = pdom.findBindings(XBarAbsPath, false, IndexFilter.ALL, new NullProgressMonitor());
// X::bar()
assertFunctionRefCount(new Class[] {}, XBarBs, 2);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 QNX Software Systems and others.
* Copyright (c) 2006, 2007 QNX Software Systems 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
@ -15,6 +15,7 @@ package org.eclipse.cdt.internal.pdom.tests;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.core.CCoreInternals;
import org.eclipse.cdt.internal.core.pdom.PDOM;
@ -33,7 +34,7 @@ public class RaceCondition157992Test extends PDOMTestBase {
PDOM pdom = (PDOM)CCoreInternals.getPDOMManager().getPDOM(project);
pdom.acquireReadLock();
IBinding[] Bs = pdom.findBindings(Pattern.compile("B"), new NullProgressMonitor());
IBinding[] Bs = pdom.findBindings(Pattern.compile("B"), true, IndexFilter.ALL, new NullProgressMonitor());
if(Bs.length==1)
successes++;

View file

@ -15,7 +15,6 @@ package org.eclipse.cdt.core.index;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.core.runtime.CoreException;
@ -225,13 +224,32 @@ public interface IIndex {
public IIndexBinding[] findBindings(Pattern[] patterns, boolean isFullyQualified, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
/**
* Searches the global scope for all bindings of a given name and linkage.
* In case a binding exists in multiple projects, no duplicate bindings are returned.
* @param linkage the linkage to be searched
* @param name a simple (unqualified) name.
* @return an array of bindings
* Searches for all bindings in global scope with a given name. In case a binding exists in multiple projects, no duplicate bindings are returned.
* This method makes use of the BTree and is faster than the methods using patterns.
* @param names an array of names, which has to be matched by the qualified name of the bindings.
* @param filter a filter that allows for skipping parts of the index
* @param monitor a monitor to report progress
* @return an array of bindings matching the pattern
* @throws CoreException
*/
public IBinding[] findInGlobalScope(ILinkage linkage, char[] name);
public IIndexBinding[] findBindings(char[][] names, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
/**
* Searches the global scope for all bindings with a given name.
* In case a binding exists in multiple projects, no duplicate bindings are returned.
* This method makes use of the BTree and is faster than the methods using patterns.
*
* This is fully equivalent to
* <pre>
* findBindings(new Pattern[]{pattern}, isFullyQualified, filter, monitor);
* </pre>
* @param names an array of names, which has to be matched by the qualified name of the bindings.
* @param filter a filter that allows for skipping parts of the index
* @param monitor a monitor to report progress
* @return an array of bindings matching the pattern
* @throws CoreException
*/
public IIndexBinding[] findBindings(char[] names, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
/**
* Searches the given namespace for all bindings of a given name.
@ -249,7 +267,7 @@ public interface IIndex {
* @return an array of bindings with the prefix
* @throws CoreException
*/
public IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException;
public IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) throws CoreException;
/**
* Searches for all names that resolve to the given binding. You can limit the result to references, declarations

View file

@ -44,20 +44,6 @@ public class IndexFilter {
};
}
/**
* Get an IndexFilter that filters out bindings from linkages other than that
* specified
* @param target the linkage whose bindings should be retained
* @return an IndexFilter instance
*/
public static IndexFilter getFilter(final ILinkage target) {
return new IndexFilter() {
public boolean acceptLinkage(ILinkage linkage) {
return linkage.getID() == target.getID();
}
};
}
/**
* Returns whether or not to include objects of the given linkage in the query.
* @see IIndex#findBindings(java.util.regex.Pattern, boolean, IndexFilter, org.eclipse.core.runtime.IProgressMonitor)

View file

@ -12,6 +12,7 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.c;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
@ -22,7 +23,6 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.IASTCompletionContext;
import org.eclipse.core.runtime.CoreException;
@ -88,8 +88,8 @@ public class CASTIdExpression extends CASTNode implements IASTIdExpression, IAST
if (index != null) {
try {
b2 = index.findBindingsForPrefix(
n.toString(),
IndexFilter.getFilter(Linkage.C_LINKAGE));
n.toCharArray(),
IndexFilter.getFilter(ILinkage.C_LINKAGE_ID));
} catch (CoreException e) {
}
}

View file

@ -111,7 +111,7 @@ public class CASTTypedefNameSpecifier extends CASTBaseDeclSpecifier implements
if (index != null) {
try {
IBinding[] bindings = index.findBindingsForPrefix(n.toString(), filter);
IBinding[] bindings = index.findBindingsForPrefix(n.toCharArray(), filter);
for (int i = 0; i < bindings.length; i++) {
filtered.add(bindings[i]);
}

View file

@ -150,7 +150,7 @@ public class CPPASTBaseSpecifier extends CPPASTNode implements
if (index != null) {
try {
IBinding[] bindings = index.findBindingsForPrefix(n.toString(), filter);
IBinding[] bindings = index.findBindingsForPrefix(n.toCharArray(), filter);
for (int i = 0; i < bindings.length; i++) {
filtered.add(bindings[i]);
}

View file

@ -11,6 +11,7 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTIdExpression;
@ -21,7 +22,6 @@ import org.eclipse.cdt.core.dom.ast.IType;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.IASTCompletionContext;
import org.eclipse.core.runtime.CoreException;
@ -86,8 +86,8 @@ public class CPPASTIdExpression extends CPPASTNode implements IASTIdExpression,
if (index != null) {
try {
b2 = index.findBindingsForPrefix(
n.toString(),
IndexFilter.getFilter(Linkage.CPP_LINKAGE));
n.toCharArray(),
IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID));
} catch (CoreException e) {
}
}

View file

@ -140,7 +140,7 @@ public class CPPASTNamedTypeSpecifier extends CPPASTBaseDeclSpecifier implements
if (index != null) {
try {
IBinding[] bindings = index.findBindingsForPrefix(n.toString(), filter);
IBinding[] bindings = index.findBindingsForPrefix(n.toCharArray(), filter);
for (int i = 0; i < bindings.length; i++) {
filtered.add(bindings[i]);
}

View file

@ -125,7 +125,7 @@ public class CPPASTUsingDeclaration extends CPPASTNode implements
if (index != null) {
try {
IBinding[] bindings = index.findBindingsForPrefix(n.toString(), filter);
IBinding[] bindings = index.findBindingsForPrefix(n.toCharArray(), filter);
for (int i = 0; i < bindings.length; i++) {
filtered.add(bindings[i]);
}

View file

@ -110,7 +110,7 @@ public class CPPASTUsingDirective extends CPPASTNode implements
if (index != null) {
try {
IBinding[] bindings = index.findBindingsForPrefix(n.toString(), filter);
IBinding[] bindings = index.findBindingsForPrefix(n.toCharArray(), filter);
for (int i = 0; i < bindings.length; i++) {
filtered.add(bindings[i]);
}

View file

@ -15,6 +15,8 @@
*/
package org.eclipse.cdt.internal.core.dom.parser.cpp;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.DOMException;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
@ -26,18 +28,23 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
import org.eclipse.cdt.core.parser.util.ObjectSet;
import org.eclipse.cdt.internal.core.dom.Linkage;
import org.eclipse.cdt.internal.core.dom.parser.IASTInternalScope;
import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
/**
* @author aniefer
*/
abstract public class CPPScope implements ICPPScope, IASTInternalScope {
public static class CPPScopeProblem extends ProblemBinding implements ICPPScope {
private static final IProgressMonitor NPM = new NullProgressMonitor();
public static class CPPScopeProblem extends ProblemBinding implements ICPPScope {
public CPPScopeProblem( IASTNode node, int id, char[] arg ) {
super( node, id, arg );
}
@ -91,8 +98,12 @@ abstract public class CPPScope implements ICPPScope, IASTInternalScope {
if (index != null) {
// Try looking this up in the PDOM
if (physicalNode instanceof IASTTranslationUnit) {
IBinding[] bindings= index.findInGlobalScope(Linkage.CPP_LINKAGE, name.toCharArray());
binding= CPPSemantics.resolveAmbiguities(name, bindings);
try {
IBinding[] bindings= index.findBindings(name.toCharArray(), IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID), NPM);
binding= CPPSemantics.resolveAmbiguities(name, bindings);
} catch (CoreException e) {
CCorePlugin.log(e);
}
}
else if (physicalNode instanceof ICPPASTNamespaceDefinition) {
ICPPASTNamespaceDefinition nsdef = (ICPPASTNamespaceDefinition)physicalNode;

View file

@ -22,7 +22,6 @@ import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
@ -155,7 +154,21 @@ public class CIndex implements IIndex {
monitor.done();
return (IIndexBinding[]) result.toArray(new IIndexBinding[result.size()]);
}
public IIndexBinding[] findBindings(char[] name, IndexFilter filter, IProgressMonitor monitor) throws CoreException {
return findBindings(new char[][]{name}, filter, monitor);
}
public IIndexBinding[] findBindings(char[][] names, IndexFilter filter, IProgressMonitor monitor) throws CoreException {
ArrayList result= new ArrayList();
monitor.beginTask(Messages.CIndex_FindBindingsTask_label, fFragments.length);
for (int i = 0; !monitor.isCanceled() && i < fFragments.length; i++) {
result.addAll(Arrays.asList(fFragments[i].findBindings(names, filter, new SubProgressMonitor(monitor, 1))));
}
monitor.done();
return (IIndexBinding[]) result.toArray(new IIndexBinding[result.size()]);
}
public IIndexName[] findNames(IBinding binding, int flags) throws CoreException {
ArrayList result= new ArrayList();
for (int i = 0; i < fPrimaryFragmentCount; i++) {
@ -327,27 +340,6 @@ public class CIndex implements IIndex {
return result;
}
public IBinding[] findInGlobalScope(ILinkage linkage, char[] name) {
ArrayList result= new ArrayList();
for (int i = 0; i < fFragments.length; i++) {
try {
IBinding[] part = fFragments[i].findInGlobalScope(linkage, name);
for (int j = 0; j < part.length; j++) {
IBinding binding = part[j];
if (binding instanceof IIndexBinding) {
result.add(binding);
}
}
} catch (CoreException e) {
CCorePlugin.log(e);
}
}
if (!result.isEmpty()) {
return (IIndexBinding[]) result.toArray(new IIndexBinding[result.size()]);
}
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findInNamespace(IBinding nsbinding, char[] name) {
ArrayList result= new ArrayList();
for (int i = 0; i < fFragments.length; i++) {
@ -369,7 +361,7 @@ public class CIndex implements IIndex {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException {
public IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) throws CoreException {
ArrayList result= new ArrayList();
for (int i = 0; i < fFragments.length; i++) {
try {

View file

@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.core.index;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.IName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.index.IIndex;
@ -95,19 +94,21 @@ final public class EmptyCIndex implements IIndex {
return IIndexFragmentBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IIndexBinding adaptBinding(IBinding binding) throws CoreException {
return null;
}
public IBinding[] findInGlobalScope(ILinkage linkage, char[] name) {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findInNamespace(IBinding nsbinding, char[] name) {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException {
public IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IIndexBinding[] findBindings(char[][] names, IndexFilter filter,
IProgressMonitor monitor) {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IIndexBinding[] findBindings(char[] names, IndexFilter filter,
IProgressMonitor monitor) {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
}

View file

@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.core.index;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.index.IIndex;
@ -107,7 +106,18 @@ public interface IIndexFragment {
* @return an array of bindings matching the pattern
* @throws CoreException
*/
IIndexFragmentBinding[] findBindings(Pattern[] pattern, boolean isFullyQualified, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
IIndexFragmentBinding[] findBindings(Pattern[] patterns, boolean isFullyQualified, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
/**
* Searches for all bindings with qualified names that seen as an array of simple names equals
* the given array of names.
* @param names an array of names the qualified name of the bindings have to match.
* @param filter a filter that allows for skipping parts of the index
* @param monitor a monitor to report progress
* @return an array of bindings matching the pattern
* @throws CoreException
*/
IIndexFragmentBinding[] findBindings(char[][] names, IndexFilter filter, IProgressMonitor monitor) throws CoreException;
/**
* Searches for all names that resolve to the given binding. You can limit the result to references, declarations
@ -135,11 +145,6 @@ public interface IIndexFragment {
*/
long getLastWriteAccess();
/**
* Returns all bindings with the given name in the given linkage
*/
IBinding[] findInGlobalScope(ILinkage linkage, char[] name) throws CoreException;
/**
* Returns all bindings with the given name in the given namespace
*/
@ -148,5 +153,5 @@ public interface IIndexFragment {
/**
* Returns all bindings with the given prefix, accepted by the given filter
*/
IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException;
IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) throws CoreException;
}

View file

@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.core.pdom;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collection;
import java.util.HashMap;
@ -35,7 +36,6 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespaceScope;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexBinding;
import org.eclipse.cdt.core.index.IIndexFileLocation;
import org.eclipse.cdt.core.index.IIndexName;
@ -49,6 +49,7 @@ import org.eclipse.cdt.internal.core.index.IIndexFragmentName;
import org.eclipse.cdt.internal.core.index.IIndexProxyBinding;
import org.eclipse.cdt.internal.core.pdom.db.BTree;
import org.eclipse.cdt.internal.core.pdom.db.Database;
import org.eclipse.cdt.internal.core.pdom.dom.BindingCollector;
import org.eclipse.cdt.internal.core.pdom.dom.IIndexLocationConverter;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
@ -204,13 +205,6 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
return getFirstLinkageRecord() == 0;
}
/**
* @deprecated use findDeclarations() instead.
*/
public IName[] getDeclarations(IBinding binding) throws CoreException {
return findNames(binding, IIndex.FIND_DECLARATIONS_DEFINITIONS);
}
/**
* @deprecated use findDefinitions() instead
*/
@ -328,20 +322,6 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
}
}
/**
* @deprecated
*/
public IBinding[] findBindings(Pattern pattern, IProgressMonitor monitor) throws CoreException {
return findBindings(new Pattern[] { pattern }, false, new IndexFilter(), monitor);
}
/**
* @deprecated
*/
public IBinding[] findBindings(Pattern[] pattern, IProgressMonitor monitor) throws CoreException {
return findBindings(pattern, true, new IndexFilter(), monitor);
}
public IIndexBinding[] findBindings(Pattern pattern, boolean isFullyQualified, IndexFilter filter, IProgressMonitor monitor) throws CoreException {
return findBindings(new Pattern[] { pattern }, isFullyQualified, filter, monitor);
}
@ -364,6 +344,29 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
return finder.getBindings();
}
public IIndexFragmentBinding[] findBindings(char[][] names, IndexFilter filter, IProgressMonitor monitor) throws CoreException {
ArrayList result= new ArrayList();
for (Iterator iter = fLinkageIDCache.values().iterator(); iter.hasNext();) {
PDOMLinkage linkage = (PDOMLinkage) iter.next();
if (filter.acceptLinkage(linkage)) {
ArrayList bindings= new ArrayList();
bindings.add(linkage);
for (int i=0; i < names.length; i++) {
char[] name= names[i];
BindingCollector collector= new BindingCollector(linkage, name, filter, false);
for (Iterator in = bindings.iterator(); in.hasNext();) {
PDOMNode node= (PDOMNode) in.next();
node.accept(collector);
}
bindings.clear();
bindings.addAll(Arrays.asList(collector.getBindings()));
}
result.addAll(bindings);
}
}
return (IIndexFragmentBinding[]) result.toArray(new IIndexFragmentBinding[result.size()]);
}
private void readLinkages() throws CoreException {
// populate the linkage cache
int record= getFirstLinkageRecord();
@ -597,14 +600,6 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
return fPath;
}
public IBinding[] findInGlobalScope(ILinkage linkage, char[] name) throws CoreException {
PDOMLinkage pdomLinkage= adaptLinkage(linkage);
if (pdomLinkage != null) {
return pdomLinkage.findInGlobalScope(name);
}
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findInNamespace(IBinding nsbinding, char[] name) throws CoreException {
IIndexProxyBinding ns= adaptBinding(nsbinding);
if (ns instanceof ICPPNamespace) {
@ -618,7 +613,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
return IIndexBinding.EMPTY_INDEX_BINDING_ARRAY;
}
public IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException {
public IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) throws CoreException {
ArrayList result = new ArrayList();
for (Iterator iter = fLinkageIDCache.values().iterator(); iter.hasNext();) {
PDOMLinkage linkage = (PDOMLinkage) iter.next();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 QNX Software Systems and others.
* Copyright (c) 2006, 2007 QNX Software Systems 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
@ -7,18 +7,25 @@
*
* Contributors:
* QNX - Initial API and implementation
* Markus Schorn (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.internal.core.pdom.dom;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.dom.IPDOMNode;
import org.eclipse.cdt.core.dom.IPDOMVisitor;
import org.eclipse.cdt.core.dom.ast.IBinding;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor;
import org.eclipse.core.runtime.CoreException;
public final class FindBindingsInBTree implements IBTreeVisitor {
/**
* Visitor to find bindings in a BTree or below a PDOMNode. Nested bindings are not visited.
* @since 4.0
*/
public final class BindingCollector implements IBTreeVisitor, IPDOMVisitor {
private final PDOMLinkage linkage;
private final char[] name;
private final boolean prefixLookup;
@ -29,7 +36,7 @@ public final class FindBindingsInBTree implements IBTreeVisitor {
/**
* Collects all bindings with given name.
*/
public FindBindingsInBTree(PDOMLinkage linkage, char[] name) {
public BindingCollector(PDOMLinkage linkage, char[] name) {
this(linkage, name, null, false);
}
@ -37,7 +44,7 @@ public final class FindBindingsInBTree implements IBTreeVisitor {
* Collects all bindings with given name, passing the filter. If prefixLookup is set to
* <code>true</code> a binding is considered if its name starts with the given prefix.
*/
public FindBindingsInBTree(PDOMLinkage linkage, char[] name, IndexFilter filter, boolean prefixLookup) {
public BindingCollector(PDOMLinkage linkage, char[] name, IndexFilter filter, boolean prefixLookup) {
this.name = name;
this.linkage= linkage;
this.filter= filter;
@ -46,6 +53,10 @@ public final class FindBindingsInBTree implements IBTreeVisitor {
public int compare(int record) throws CoreException {
PDOMNamedNode node = ((PDOMNamedNode)linkage.getNode(record));
return compare(node);
}
private int compare(PDOMNamedNode node) throws CoreException {
if (prefixLookup) {
return node.getDBName().comparePrefix(name);
}
@ -57,13 +68,32 @@ public final class FindBindingsInBTree implements IBTreeVisitor {
return true;
PDOMBinding tBinding = linkage.getPDOM().getBinding(record);
if (tBinding != null) {
visit(tBinding);
}
return true; // look for more
}
private void visit(PDOMBinding tBinding) {
if (filter == null || filter.acceptBinding(tBinding)) {
bindings.add(tBinding);
}
return true; // look for more
}
}
public IBinding[] getBindings() {
return (IBinding[])bindings.toArray(new IBinding[bindings.size()]);
}
public boolean visit(IPDOMNode node) throws CoreException {
if (node instanceof PDOMBinding) {
PDOMBinding pb= (PDOMBinding) node;
if (compare(pb) == 0) {
visit(pb);
}
}
return false; // don't visit children
}
public void leave(IPDOMNode node) throws CoreException {
}
}

View file

@ -107,21 +107,25 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage
}
public void accept(final IPDOMVisitor visitor) throws CoreException {
super.accept(visitor);
getIndex().accept(new IBTreeVisitor() {
public int compare(int record) throws CoreException {
return 0;
}
public boolean visit(int record) throws CoreException {
PDOMBinding binding = pdom.getBinding(record);
if (binding != null) {
if (visitor.visit(binding))
binding.accept(visitor);
visitor.leave(binding);
if (visitor instanceof IBTreeVisitor) {
getIndex().accept((IBTreeVisitor) visitor);
}
else {
getIndex().accept(new IBTreeVisitor() {
public int compare(int record) throws CoreException {
return 0;
}
return true;
}
});
public boolean visit(int record) throws CoreException {
PDOMBinding binding = pdom.getBinding(record);
if (binding != null) {
if (visitor.visit(binding))
binding.accept(visitor);
visitor.leave(binding);
}
return true;
}
});
}
}
public ILinkage getLinkage() throws CoreException {
@ -221,16 +225,9 @@ public abstract class PDOMLinkage extends PDOMNamedNode implements IIndexLinkage
}
public abstract int getBindingType(IBinding binding);
public IBinding[] findInGlobalScope(char[] name) throws CoreException {
FindBindingsInBTree visitor= new FindBindingsInBTree(this, name);
getIndex().accept(visitor);
return visitor.getBindings();
}
public IBinding[] findBindingsForPrefix(String prefix, IndexFilter filter) throws CoreException {
FindBindingsInBTree visitor = new FindBindingsInBTree(this, prefix.toCharArray(), filter, true);
public IBinding[] findBindingsForPrefix(char[] prefix, IndexFilter filter) throws CoreException {
BindingCollector visitor = new BindingCollector(this, prefix, filter, true);
getIndex().accept(visitor);
return visitor.getBindings();

View file

@ -17,11 +17,7 @@ package org.eclipse.cdt.internal.core.pdom.dom.cpp;
import java.util.ArrayList;
import java.util.List;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
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;
@ -34,9 +30,8 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.db.BTree;
import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor;
import org.eclipse.cdt.internal.core.pdom.dom.FindBindingsInBTree;
import org.eclipse.cdt.internal.core.pdom.dom.BindingCollector;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNamedNode;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
import org.eclipse.core.runtime.CoreException;
@ -71,21 +66,25 @@ class PDOMCPPNamespace extends PDOMCPPBinding implements ICPPNamespace, ICPPName
}
public void accept(final IPDOMVisitor visitor) throws CoreException {
super.accept(visitor);
getIndex().accept(new IBTreeVisitor() {
public int compare(int record) throws CoreException {
return 0;
}
public boolean visit(int record) throws CoreException {
PDOMBinding binding = pdom.getBinding(record);
if (binding != null) {
if (visitor.visit(binding))
binding.accept(visitor);
visitor.leave(binding);
if (visitor instanceof IBTreeVisitor) {
getIndex().accept((IBTreeVisitor) visitor);
}
else {
getIndex().accept(new IBTreeVisitor() {
public int compare(int record) throws CoreException {
return 0;
}
return true;
}
});
public boolean visit(int record) throws CoreException {
PDOMBinding binding = pdom.getBinding(record);
if (binding != null) {
if (visitor.visit(binding))
binding.accept(visitor);
visitor.leave(binding);
}
return true;
}
});
}
}
public void addChild(PDOMNode child) throws CoreException {
@ -107,7 +106,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding implements ICPPNamespace, ICPPName
public IBinding[] find(String name, boolean prefixLookup) {
try {
FindBindingsInBTree visitor = new FindBindingsInBTree(getLinkageImpl(), name.toCharArray(), null, prefixLookup);
BindingCollector visitor = new BindingCollector(getLinkageImpl(), name.toCharArray(), null, prefixLookup);
getIndex().accept(visitor);
return visitor.getBindings();
} catch (CoreException e) {
@ -118,7 +117,7 @@ class PDOMCPPNamespace extends PDOMCPPBinding implements ICPPNamespace, ICPPName
public IBinding getBinding(IASTName name, boolean resolve) throws DOMException {
try {
FindBindingsInBTree visitor= new FindBindingsInBTree(getLinkageImpl(), name.toCharArray());
BindingCollector visitor= new BindingCollector(getLinkageImpl(), name.toCharArray());
getIndex().accept(visitor);
IBinding[] bindings= visitor.getBindings();

View file

@ -366,10 +366,6 @@ public class CTypeHierarchyTest extends TypeHierarchyBaseTest {
// int a1;
// int b1;
// };
// typedef struct S2 {
// int a2;
// int b2;
// } S2;
// typedef struct S3 {
// int a3;
// int b3;
@ -388,14 +384,6 @@ public class CTypeHierarchyTest extends TypeHierarchyBaseTest {
assertEquals(0, item.getItemCount());
checkMethodTable(new String[] {"a1", "b1"});
editor.selectAndReveal(content.indexOf("b2"), 1);
openTypeHierarchy(editor);
tree = getHierarchyViewer().getTree();
item= checkTreeNode(tree, 0, "S2");
item= checkTreeNode(item, 0, "S2");
assertEquals(0, item.getItemCount());
checkMethodTable(new String[] {"a2", "b2"});
editor.selectAndReveal(content.indexOf("a3"), 1);
openTypeHierarchy(editor);
tree = getHierarchyViewer().getTree();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2006 QNX Software Systems and others.
* Copyright (c) 2005, 2007 QNX Software Systems 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
@ -14,7 +14,6 @@ package org.eclipse.cdt.internal.ui.wizards.classwizard;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
@ -401,13 +400,13 @@ public class NewClassWizardUtil {
try {
String fullyQualifiedTypeName = typeName.getFullyQualifiedName();
try {
IndexFilter filter= new IndexFilter() {
public boolean acceptLinkage(ILinkage linkage) {
return linkage.getID() == ILinkage.CPP_LINKAGE_ID;
}
};
// mstodo revisit, the pattern must be split
IBinding[] bindings = index.findBindings(Pattern.compile(typeName.getName()), true, filter, new NullProgressMonitor());
IndexFilter filter= IndexFilter.getFilter(ILinkage.CPP_LINKAGE_ID);
String[] nameStrs= fullyQualifiedTypeName.split("::"); //$NON-NLS-1$
char[][] names= new char[nameStrs.length][];
for (int i = 0; i < names.length; i++) {
names[i]= nameStrs[i].toCharArray();
}
IBinding[] bindings = index.findBindings(names, filter, new NullProgressMonitor());
boolean sameTypeNameExists = false;
boolean sameNameDifferentTypeExists = false;