diff options
author | Markus Schorn | 2010-08-25 12:36:58 +0000 |
---|---|---|
committer | Markus Schorn | 2010-08-25 12:36:58 +0000 |
commit | 5527596825b162a5c588ba2ca737200ce5221cf4 (patch) | |
tree | 18d95c3cb1d7b55f77ca6db9f54ef48603c174d2 | |
parent | 9f008fc27703d05f3d27ad39a2d69ba28eac746f (diff) | |
download | org.eclipse.cdt-5527596825b162a5c588ba2ca737200ce5221cf4.tar.gz org.eclipse.cdt-5527596825b162a5c588ba2ca737200ce5221cf4.tar.xz org.eclipse.cdt-5527596825b162a5c588ba2ca737200ce5221cf4.zip |
Bug 323596: Type representation for references of typedefs.
-rw-r--r-- | core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java | 39 | ||||
-rw-r--r-- | core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 10 |
2 files changed, 35 insertions, 14 deletions
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 628ed6e72fb..96a333e5161 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 @@ -8563,19 +8563,16 @@ public class AST2CPPTests extends AST2BaseTest { parseAndCheckBindings(code); } - - - -// struct X {}; -// struct Y : X {}; -// struct A { -// virtual X* m();//0 -// virtual X* m(X*);//1 -// }; -// struct B : A { -// Y* m();//2 -// Y* m(Y*);//3 -// }; + // struct X {}; + // struct Y : X {}; + // struct A { + // virtual X* m();//0 + // virtual X* m(X*);//1 + // }; + // struct B : A { + // Y* m();//2 + // Y* m(Y*);//3 + // }; public void testOverrideSimpleCovariance_Bug321617() throws Exception { BindingAssertionHelper helper= new BindingAssertionHelper(getAboveComment(), true); ICPPMethod m0= helper.assertNonProblem("m();//0", 1, ICPPMethod.class); @@ -8610,4 +8607,20 @@ public class AST2CPPTests extends AST2BaseTest { ors= ClassTypeHelper.findOverridden(m3); assertEquals(0, ors.length); } + + // 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; } |