Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2005-07-13 18:03:30 +0000
committerAndrew Niefer2005-07-13 18:03:30 +0000
commitbbbb57bd5332fcd77cf0cb98bcfc1df375446e63 (patch)
tree394ef43697a7500c3ba4d0a5663122e949b6f4c0
parent8081caaf0e3238c40da364a87b422cd77127a946 (diff)
downloadorg.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.tar.gz
org.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.tar.xz
org.eclipse.cdt-bbbb57bd5332fcd77cf0cb98bcfc1df375446e63.zip
fix bug 103578
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java22
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPVisitor.java7
-rw-r--r--core/org.eclipse.cdt.ui/plugin.xml7
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">

Back to the top