Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Schorn2010-08-25 12:36:58 +0000
committerMarkus Schorn2010-08-25 12:36:58 +0000
commit5527596825b162a5c588ba2ca737200ce5221cf4 (patch)
tree18d95c3cb1d7b55f77ca6db9f54ef48603c174d2
parent9f008fc27703d05f3d27ad39a2d69ba28eac746f (diff)
downloadorg.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.java39
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java10
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;
}

Back to the top