diff options
author | Andrew Niefer | 2005-07-13 18:03:30 +0000 |
---|---|---|
committer | Andrew Niefer | 2005-07-13 18:03:30 +0000 |
commit | bbbb57bd5332fcd77cf0cb98bcfc1df375446e63 (patch) | |
tree | 394ef43697a7500c3ba4d0a5663122e949b6f4c0 | |
parent | 8081caaf0e3238c40da364a87b422cd77127a946 (diff) | |
download | org.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.tar.gz org.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.tar.xz org.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.zip |
fix bug 103578
3 files changed, 33 insertions, 3 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 7a70c5a3079..b9c6f1415e3 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 @@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.ITypedef; +import org.eclipse.cdt.core.dom.ast.IVariable; 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.ICPPClassScope; @@ -1824,4 +1825,25 @@ public class AST2TemplateTests extends AST2BaseTest { f1 = (ICPPFunctionTemplate) col.getName(1).resolveBinding(); assertSame( f1, col.getName(10).resolveBinding() ); } + + public void testBug103578() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("template <class T, int someConst = 0 > class A {}; \n"); //$NON-NLS-1$ + buffer.append("int f() { \n"); //$NON-NLS-1$ + buffer.append(" const int local = 10; \n"); //$NON-NLS-1$ + buffer.append(" A<int, local> broken; \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 ); + + ICPPClassTemplate A = (ICPPClassTemplate) col.getName(2).resolveBinding(); + IVariable local = (IVariable) col.getName(4).resolveBinding(); + + ICPPClassType a = (ICPPClassType) col.getName(5).resolveBinding(); + assertTrue( a instanceof ICPPTemplateInstance ); + assertSame( ((ICPPTemplateInstance)a).getTemplateDefinition(), A ); + assertSame( local, col.getName(7).resolveBinding() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java index 86f37235a40..12485835daf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java @@ -1606,6 +1606,13 @@ public class CPPVisitor { } catch (DOMException e) { type = e.getProblem(); } + } else if( binding instanceof IVariable ){ + //this is to help with the ambiguity between typeid & idexpression in template arguments + try { + type = ((IVariable)binding).getType(); + } catch (DOMException e) { + type = e.getProblem(); + } } } return type; diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 1f9524fac7c..3966c002ef1 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -1339,13 +1339,13 @@ </extension> <extension point="org.eclipse.cdt.ui.IndexerPage"> - <!-- + <indexerUI class="org.eclipse.cdt.ui.dialogs.DOMSourceIndexerBlock" id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI" indexerID="org.eclipse.cdt.core.domsourceindexer" name="%CDTIndexer.domsourceindexer"/> - --> + <indexerUI class="org.eclipse.cdt.ui.dialogs.CTagsIndexerBlock" indexerID="org.eclipse.cdt.core.ctagsindexer" @@ -1356,12 +1356,13 @@ indexerID="org.eclipse.cdt.core.nullindexer" name="%CDTIndexer.nullindexer" id="org.eclipse.cdt.ui.nullindexerUI"/> + <!-- <indexerUI class="org.eclipse.cdt.ui.dialogs.NullIndexerBlock" id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI" indexerID="org.eclipse.cdt.core.domsourceindexer" name="%CDTIndexer.domsourceindexer"/> - + --> </extension> <extension point="org.eclipse.cdt.ui.completionContributors"> |