mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for 202271, ClassCaseException in name resolution.
This commit is contained in:
parent
e069b7e8b4
commit
7396f52e19
2 changed files with 19 additions and 1 deletions
|
@ -86,7 +86,9 @@ import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.c.ICArrayType;
|
import org.eclipse.cdt.core.dom.ast.c.ICArrayType;
|
||||||
import org.eclipse.cdt.core.dom.ast.c.ICExternalBinding;
|
import org.eclipse.cdt.core.dom.ast.c.ICExternalBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.c.ICFunctionScope;
|
import org.eclipse.cdt.core.dom.ast.c.ICFunctionScope;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.c.CFunction;
|
import org.eclipse.cdt.internal.core.dom.parser.c.CFunction;
|
||||||
|
@ -3933,4 +3935,19 @@ public class AST2Tests extends AST2BaseTest {
|
||||||
parse( buffer.toString(), ParserLanguage.CPP, true, true );
|
parse( buffer.toString(), ParserLanguage.CPP, true, true );
|
||||||
parse( buffer.toString(), ParserLanguage.C, true, true );
|
parse( buffer.toString(), ParserLanguage.C, true, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// class NameClash {};
|
||||||
|
// namespace NameClash {};
|
||||||
|
// namespace NameClash2 {};
|
||||||
|
// class NameClash2 {};
|
||||||
|
public void testBug202271_nameClash() throws Exception {
|
||||||
|
StringBuffer buffer = getContents(1)[0];
|
||||||
|
IASTTranslationUnit tu= parseAndCheckBindings( buffer.toString(), ParserLanguage.CPP, true );
|
||||||
|
CNameCollector col = new CNameCollector();
|
||||||
|
tu.accept(col);
|
||||||
|
assertInstance(col.getName(0).resolveBinding(), ICPPClassType.class);
|
||||||
|
assertInstance(col.getName(1).resolveBinding(), ICPPNamespace.class);
|
||||||
|
assertInstance(col.getName(2).resolveBinding(), ICPPNamespace.class);
|
||||||
|
assertInstance(col.getName(3).resolveBinding(), ICPPClassType.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -418,7 +418,8 @@ public class CPPVisitor {
|
||||||
IBinding binding;
|
IBinding binding;
|
||||||
try {
|
try {
|
||||||
binding = scope.getBinding( namespaceDef.getName(), false );
|
binding = scope.getBinding( namespaceDef.getName(), false );
|
||||||
if( !(binding instanceof ICPPInternalBinding) || binding instanceof IProblemBinding ){
|
if( !(binding instanceof ICPPInternalBinding) || binding instanceof IProblemBinding
|
||||||
|
|| !(binding instanceof ICPPNamespace)){
|
||||||
binding = new CPPNamespace( namespaceDef );
|
binding = new CPPNamespace( namespaceDef );
|
||||||
ASTInternal.addName( scope, namespaceDef.getName() );
|
ASTInternal.addName( scope, namespaceDef.getName() );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue