From 55fd582a63f581dbcac5a8f0006c09fb1f3034ca Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 25 Aug 2010 12:36:42 +0000 Subject: [PATCH] Bug 323596: Type representation for references of typedefs. --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 16 ++++++++++++++++ .../eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 10 +++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 475c8aa5b3e..e3e677b1312 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -8860,4 +8860,20 @@ public class AST2CPPTests extends AST2BaseTest { String code= getAboveComment(); parseAndCheckBindings(code); } + + // typedef int MyType; + // + // void f(const MyType& val); + // void g(MyType& val); + public void testTypeString_323596() throws Exception { + String code= getAboveComment(); + BindingAssertionHelper bh= new BindingAssertionHelper(code, true); + IFunction f= bh.assertNonProblem("f(", 1); + assertEquals("const MyType &", ASTTypeUtil.getType(f.getType().getParameterTypes()[0], false)); + assertEquals("const int &", ASTTypeUtil.getType(f.getType().getParameterTypes()[0], true)); + + IFunction g= bh.assertNonProblem("g(", 1); + assertEquals("MyType &", ASTTypeUtil.getType(g.getType().getParameterTypes()[0], false)); + assertEquals("int &", ASTTypeUtil.getType(g.getType().getParameterTypes()[0], true)); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java index 90e771c6bdf..4ae35d28f55 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java @@ -473,7 +473,15 @@ public class ASTTypeUtil { if (normalize || type instanceof ICPPSpecialization) { // Skip the typedef and proceed with its target type. } else { - // Use the typedef and stop + // Output reference, qualifier and typedef, then stop. + if (ref != null) { + types = (IType[]) ArrayUtil.append(IType.class, types, ref); + ref= null; + } + if (cvq != null) { + types = (IType[]) ArrayUtil.append(IType.class, types, cvq); + cvq= null; + } types = (IType[]) ArrayUtil.append(IType.class, types, type); type= null; }