Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2005-11-25 02:02:01 +0000
committerAndrew Niefer2005-11-25 02:02:01 +0000
commit4fa15e42ed6103a0001d2289f3bf4591bfb8a0cf (patch)
tree5cb2a697a8d6093e969913132026c2a455228cfc
parentbdd3de47b72d83b7e01c4f5968ebc0497fdba872 (diff)
downloadorg.eclipse.cdt-4fa15e42ed6103a0001d2289f3bf4591bfb8a0cf.tar.gz
org.eclipse.cdt-4fa15e42ed6103a0001d2289f3bf4591bfb8a0cf.tar.xz
org.eclipse.cdt-4fa15e42ed6103a0001d2289f3bf4591bfb8a0cf.zip
fix bug 105769
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java18
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java3
3 files changed, 23 insertions, 1 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 966ab3f9599..6114abc7f99 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
@@ -1924,4 +1924,22 @@ public class AST2TemplateTests extends AST2BaseTest {
assertTrue( A instanceof ICPPTemplateInstance );
assertSame( ((ICPPTemplateInstance)A).getTemplateDefinition(), Aspec);
}
+
+ public void testBug105769() throws Exception {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("template< class T > class A : public T {}; \n"); //$NON-NLS-1$
+ buffer.append("class C { public: int c; }; \n"); //$NON-NLS-1$
+ buffer.append("class B : public A<C> { }; \n"); //$NON-NLS-1$
+ buffer.append("void main(){ \n"); //$NON-NLS-1$
+ buffer.append(" B k; \n"); //$NON-NLS-1$
+ buffer.append(" k.c; \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 );
+
+ ICPPVariable c = (ICPPVariable) col.getName(13).resolveBinding();
+ assertSame( c, col.getName(4).resolveBinding() );
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java
index 5cd9fcb37ff..6e6b1c52079 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPDeferredClassInstance.java
@@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateInstance;
import org.eclipse.cdt.core.parser.util.ObjectMap;
/**
@@ -173,6 +174,8 @@ public class CPPDeferredClassInstance extends CPPInstance implements ICPPClassTy
return (typeClass == classTemplate );
} else if( type instanceof ICPPClassTemplate && classTemplate == type ){
return true;
+ } else if( type instanceof ICPPTemplateInstance && ((ICPPTemplateInstance)type).getTemplateDefinition() == classTemplate ){
+ return true;
}
return false;
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
index ef1ddf750d6..3870f225d41 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTemplates.java
@@ -74,6 +74,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateScope;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTemplateParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateTypeParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
import org.eclipse.cdt.core.parser.util.ArrayUtil;
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
import org.eclipse.cdt.core.parser.util.ObjectMap;
@@ -228,7 +229,7 @@ public class CPPTemplates {
//a reference: class or function template?
IBinding template = null;
- if( parent instanceof ICPPASTNamedTypeSpecifier || segment == 0 ){
+ if( parent instanceof ICPPASTNamedTypeSpecifier || parent instanceof ICPPASTBaseSpecifier || segment == 0 ){
//class template
IASTName templateName = id.getTemplateName();
template = templateName.resolveBinding();

Back to the top