From 416f05ffe1e797d61d4238551802dc97ec6a8863 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Thu, 10 Nov 2005 23:47:33 +0000 Subject: [PATCH] fix bug 105852 --- .../parser/tests/ast2/AST2TemplateTests.java | 25 +++++++++++++++++++ .../core/dom/parser/cpp/CPPScope.java | 4 --- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index 740c588f1c8..966ab3f9599 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -1899,4 +1899,29 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPMethod f = (ICPPMethod) col.getName(8).resolveBinding(); assertSame( f, col.getName(10).resolveBinding() ); } + + public void testBug105852() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("template< class T1, int q > class C {}; \n"); //$NON-NLS-1$ + buffer.append("template< class T1, class T2> class A {}; \n"); //$NON-NLS-1$ + buffer.append("template< class T1, class T2, int q1, int q2>\n"); //$NON-NLS-1$ + buffer.append("class A< C, C > {}; \n"); //$NON-NLS-1$ + buffer.append("class N {}; \n"); //$NON-NLS-1$ + buffer.append("typedef A, C > myType; \n"); //$NON-NLS-1$ + buffer.append("void m(){ \n"); //$NON-NLS-1$ + buffer.append(" myType t; \n"); //$NON-NLS-1$ + buffer.append("} \n"); //$NON-NLS-1$ + + IASTTranslationUnit tu = parse(buffer.toString(), ParserLanguage.CPP, true, true ); + CPPNameCollector col = new CPPNameCollector(); + tu.accept( col ); + + ITypedef myType = (ITypedef) col.getName(31).resolveBinding(); + ICPPClassType A = (ICPPClassType) myType.getType(); + + ICPPSpecialization Aspec = (ICPPSpecialization) col.getName(10).resolveBinding(); + + assertTrue( A instanceof ICPPTemplateInstance ); + assertSame( ((ICPPTemplateInstance)A).getTemplateDefinition(), Aspec); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java index 56384638046..49455b26a77 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPScope.java @@ -19,7 +19,6 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; import org.eclipse.cdt.core.dom.ast.cpp.ICPPScope; import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration; import org.eclipse.cdt.core.parser.util.ArrayUtil; @@ -62,9 +61,6 @@ abstract public class CPPScope implements ICPPScope{ //name belongs to a different scope, don't add it here return; } - if( name instanceof ICPPASTTemplateId ) - name = ((ICPPASTTemplateId)name).getTemplateName(); - char [] c = name.toCharArray(); Object o = bindings.get( c ); if( o != null ){