mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 10:16:03 +02:00
Bug 297686: Disambiguate class and namespace.
This commit is contained in:
parent
78e2f65d6d
commit
3849591e3a
2 changed files with 54 additions and 1 deletions
|
@ -2125,4 +2125,47 @@ public class IndexBugsTests extends BaseTestCase {
|
||||||
index.releaseReadLock();
|
index.releaseReadLock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // a.h
|
||||||
|
// class P {};
|
||||||
|
|
||||||
|
// // b.h
|
||||||
|
// namespace P {class C {};}
|
||||||
|
|
||||||
|
// // source1.cpp
|
||||||
|
// #include "a.h"
|
||||||
|
// P p;
|
||||||
|
|
||||||
|
// // source2.cpp
|
||||||
|
// #include "b.h"
|
||||||
|
// P::C c;
|
||||||
|
public void testDisambiguateClassVsNamespace_297686() throws Exception {
|
||||||
|
waitForIndexer();
|
||||||
|
String[] testData = getContentsForTest(4);
|
||||||
|
TestSourceReader.createFile(fCProject.getProject(), "a.h", testData[0]);
|
||||||
|
TestSourceReader.createFile(fCProject.getProject(), "b.h", testData[1]);
|
||||||
|
IFile s1= TestSourceReader.createFile(fCProject.getProject(), "s1.cpp", testData[2]);
|
||||||
|
IFile s2= TestSourceReader.createFile(fCProject.getProject(), "s2.cpp", testData[3]);
|
||||||
|
final IIndexManager indexManager = CCorePlugin.getIndexManager();
|
||||||
|
indexManager.reindex(fCProject);
|
||||||
|
waitForIndexer();
|
||||||
|
IIndex index= indexManager.getIndex(fCProject);
|
||||||
|
index.acquireReadLock();
|
||||||
|
try {
|
||||||
|
IASTTranslationUnit tu = TestSourceReader.createIndexBasedAST(index, fCProject, s1);
|
||||||
|
IASTSimpleDeclaration sdecl= (IASTSimpleDeclaration) tu.getDeclarations()[0];
|
||||||
|
IVariable var= (IVariable) sdecl.getDeclarators()[0].getName().resolveBinding();
|
||||||
|
assertFalse(var.getType() instanceof IProblemBinding);
|
||||||
|
assertTrue(var.getType() instanceof ICPPClassType);
|
||||||
|
|
||||||
|
tu = TestSourceReader.createIndexBasedAST(index, fCProject, s2);
|
||||||
|
sdecl= (IASTSimpleDeclaration) tu.getDeclarations()[0];
|
||||||
|
var= (IVariable) sdecl.getDeclarators()[0].getName().resolveBinding();
|
||||||
|
assertFalse(var.getType() instanceof IProblemBinding);
|
||||||
|
assertTrue(var.getType() instanceof ICPPClassType);
|
||||||
|
} finally {
|
||||||
|
index.releaseReadLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1758,10 +1758,15 @@ public class CPPSemantics {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.typesOnly) {
|
if (data.typesOnly) {
|
||||||
if (type != null)
|
if (type != null) {
|
||||||
|
if (obj instanceof ICPPNamespace && compareByRelevance(data, type, obj) < 0) {
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
return type;
|
return type;
|
||||||
|
}
|
||||||
if (obj instanceof ICPPNamespace)
|
if (obj instanceof ICPPNamespace)
|
||||||
return obj;
|
return obj;
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1780,6 +1785,11 @@ public class CPPSemantics {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (obj != null) {
|
if (obj != null) {
|
||||||
|
if (type != null && obj instanceof ICPPNamespace) {
|
||||||
|
if (compareByRelevance(data, type, obj) >= 0) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
}
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
|
|
Loading…
Add table
Reference in a new issue