Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Keller2013-10-17 17:10:26 +0000
committerMarkus Keller2013-10-17 17:15:36 +0000
commit6c3b6971f88c7f6d5be3c70fdaf936700dc7f94b (patch)
tree5669910d5a525918c341f4e4e1b1efdd1ca1b86f
parenta2380c5dc7487191ba2f073fdb6868b729cb0c57 (diff)
downloadeclipse.jdt.core-6c3b6971f88c7f6d5be3c70fdaf936700dc7f94b.tar.gz
eclipse.jdt.core-6c3b6971f88c7f6d5be3c70fdaf936700dc7f94b.tar.xz
eclipse.jdt.core-6c3b6971f88c7f6d5be3c70fdaf936700dc7f94b.zip
Bug 419748: [1.8][dom ast] MethodDeclaration's receiverType cannot be AnnotatableType
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java62
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java4
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java2
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java6
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java2
5 files changed, 61 insertions, 15 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java
index 7af45d87c4..5d45f927e7 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverter18Test.java
@@ -1039,8 +1039,8 @@ public class ASTConverter18Test extends ConverterTestSetup {
node = getASTNode(unit, 0, 0);
assertEquals("Not a method Declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
MethodDeclaration method = (MethodDeclaration) node;
- AnnotatableType receiver = method.getReceiverType();
- assertEquals("Not an annotatable type", ASTNode.SIMPLE_TYPE, receiver.getNodeType());
+ Type receiver = method.getReceiverType();
+ assertEquals("Not a simple type", ASTNode.SIMPLE_TYPE, receiver.getNodeType());
assertEquals("Incorrect receiver signature", "@Marker @Marker2 X", ((SimpleType) receiver).toString());
assertEquals("Incorrect annotations on receiver", 2, ((SimpleType) receiver).annotations().size());
assertNull("Incorrect receiver qualfier", method.getReceiverQualifier());
@@ -1067,8 +1067,8 @@ public class ASTConverter18Test extends ConverterTestSetup {
TypeDeclaration innerType = (TypeDeclaration) node;
assertEquals("Incorrect no of methods", 1, innerType.getMethods().length);
MethodDeclaration method = innerType.getMethods()[0];
- AnnotatableType receiver = method.getReceiverType();
- assertEquals("Not an annotatable type", ASTNode.SIMPLE_TYPE, receiver.getNodeType());
+ Type receiver = method.getReceiverType();
+ assertEquals("Not a simple type", ASTNode.SIMPLE_TYPE, receiver.getNodeType());
assertEquals("Incorrect receiver signature", "@Marker @Marker2 X", ((SimpleType) receiver).toString());
assertEquals("Incorrect annotations on receiver", 2, ((SimpleType) receiver).annotations().size());
assertNotNull("Incorrect receiver qualfier", method.getReceiverQualifier());
@@ -1365,7 +1365,7 @@ public class ASTConverter18Test extends ConverterTestSetup {
+ "@Target (java.lang.annotation.ElementType.TYPE_USE)\n"
+ "@interface Marker2 {}\n";
CompilationUnit cu = (CompilationUnit) buildAST(contents, this.workingCopy);
- // simple tye for generic type arguments in a generic method or constructor invocation
+ // simple type for generic type arguments in a generic method or constructor invocation
MethodDeclaration methodDeclaration = (MethodDeclaration) getASTNode(cu, 0, 0);
List statements = methodDeclaration.getBody().statements();
Statement statement = (Statement)statements.get(0);
@@ -2053,8 +2053,8 @@ public class ASTConverter18Test extends ConverterTestSetup {
node = (ASTNode) type.bodyDeclarations().get(0);
assertEquals("Not a method Declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
MethodDeclaration method = (MethodDeclaration) node;
- AnnotatableType receiver = method.getReceiverType();
- assertEquals("Not an annotatable type", ASTNode.QUALIFIED_TYPE, receiver.getNodeType());
+ Type receiver = method.getReceiverType();
+ assertEquals("Not a qualified type", ASTNode.QUALIFIED_TYPE, receiver.getNodeType());
assertEquals("Incorrect receiver", "@A X.@B Y", ((QualifiedType) receiver).toString());
assertEquals("Incorrect method signature", "public Z(@A X.@B Y Y.this,String str){\n}\n", method.toString());
@@ -2063,6 +2063,52 @@ public class ASTConverter18Test extends ConverterTestSetup {
assertEquals("Incorrect receiver", "@A X.@B Y.@C Z", ((QualifiedType) receiver).toString());
assertEquals("Incorrect method signature", "public void foo(@A X.@B Y.@C Z this,String str){\n}\n", method.toString());
}
+ public void testParameterizedReceiverType() throws JavaModelException {
+ String contents =
+ "import java.lang.annotation.*;\n" +
+ "public class X<T extends Exception> {\n" +
+ " class Y<K, V> {\n" +
+ " class Z {\n" +
+//TODO: bad AST node structure:
+// " public Z(@A X<T>.@B Y<K, V> Y.this){\n}" +
+// " public void foo(@B Y<K, V>.@C Z this){\n}\n" +
+ " public Z(X<T>.@B Y<K, V> Y.this){\n}" +
+ " public void foo(Y<K, V>.@C Z this){\n}\n" +
+ " }\n" +
+ " }\n" +
+ "}\n" +
+ "@Target(ElementType.TYPE_USE)\n" +
+ "@interface A {}\n" +
+ "@Target(ElementType.TYPE_USE)\n" +
+ "@interface B {}\n" +
+ "@Target(ElementType.TYPE_USE)\n" +
+ "@interface C {}\n";
+ this.workingCopy = getWorkingCopy("/Converter18/src/X.java", true);
+ ASTNode node = buildAST(contents, this.workingCopy);
+ assertEquals("Not a compilation unit", ASTNode.COMPILATION_UNIT, node.getNodeType());
+ CompilationUnit unit = (CompilationUnit) node;
+ node = getASTNode(unit, 0, 0);
+ TypeDeclaration type = (TypeDeclaration)node;
+ node = (ASTNode) type.bodyDeclarations().get(0);
+ type = (TypeDeclaration) node;
+ node = (ASTNode) type.bodyDeclarations().get(0);
+ assertEquals("Not a method Declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
+ MethodDeclaration method = (MethodDeclaration) node;
+ Type receiver = method.getReceiverType();
+//TODO: bad AST node structure:
+// assertEquals("Incorrect receiver", "@A X<T>.@B Y<K,V>", ((QualifiedType) receiver).toString());
+// assertEquals("Incorrect method signature", "public Z(@A X<T>.@B Y<K,V> Y.this){\n}\n", method.toString());
+ assertEquals("Incorrect receiver", "X<T>.@B Y<K,V>", ((ParameterizedType) receiver).toString());
+ assertEquals("Incorrect method signature", "public Z(X<T>.@B Y<K,V> Y.this){\n}\n", method.toString());
+
+ method = (MethodDeclaration) type.bodyDeclarations().get(1);
+ receiver = method.getReceiverType();
+//TODO: bad AST node structure:
+// assertEquals("Incorrect receiver", "@B Y<K,V>.@C Z", ((QualifiedType) receiver).toString());
+// assertEquals("Incorrect method signature", "public void foo(@B Y<K,V>.@C Z this){\n}\n", method.toString());
+ assertEquals("Incorrect receiver", "Y<K,V>.@C Z", ((QualifiedType) receiver).toString());
+ assertEquals("Incorrect method signature", "public void foo(Y<K,V>.@C Z this){\n}\n", method.toString());
+ }
// https://bugs.eclipse.org/bugs/show_bug.cgi?id=403410
public void testBug403410() throws JavaModelException {
String contents =
@@ -2229,7 +2275,7 @@ public class ASTConverter18Test extends ConverterTestSetup {
assertEquals("Not a method Declaration", ASTNode.METHOD_DECLARATION, node.getNodeType());
MethodDeclaration method = (MethodDeclaration) node;
assertEquals("Method should not be malformed", 0, (method.getFlags() & ASTNode.MALFORMED));
- AnnotatableType annotatableType = method.getReceiverType();
+ Type annotatableType = method.getReceiverType();
assertTrue(annotatableType.isQualifiedType());
QualifiedType qualifiedType = (QualifiedType) annotatableType;
assertEquals("wrong qualified type", "@A X.@B Y", qualifiedType.toString());
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java
index 89ed05d5f0..c92313a7d9 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingMethodDeclTest.java
@@ -3275,7 +3275,7 @@ public class ASTRewritingMethodDeclTest extends ASTRewritingTest {
ASTRewrite rewrite = ASTRewrite.create(astRoot.getAST());
AST ast = astRoot.getAST();
MethodDeclaration method = (MethodDeclaration) findTypeDeclaration(astRoot, "X").bodyDeclarations().get(0);
- AnnotatableType receiverType = method.getReceiverType();
+ Type receiverType = method.getReceiverType();
assertEquals("Invalid receiver type", ASTNode.SIMPLE_TYPE, receiverType.getNodeType());
MarkerAnnotation annot = ast.newMarkerAnnotation();
annot.setTypeName(ast.newSimpleName("Marker"));
@@ -3461,7 +3461,7 @@ public class ASTRewritingMethodDeclTest extends ASTRewritingTest {
rewrite.set(method4, MethodDeclaration.RECEIVER_QUALIFIER_PROPERTY, null, null);
ListRewrite listRewrite = rewrite.getListRewrite(method4.getReceiverType(), SimpleType.ANNOTATIONS_PROPERTY);
- listRewrite.remove((ASTNode) method4.getReceiverType().annotations().get(0), null);
+ listRewrite.remove((ASTNode) ((AnnotatableType) method4.getReceiverType()).annotations().get(0), null);
rewrite.set(method5, MethodDeclaration.RECEIVER_TYPE_PROPERTY, null, null);
List params = method5.parameters();
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
index 9d268f3a08..c7261912a7 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
@@ -885,7 +885,7 @@ class ASTConverter {
recordNodes(name, receiver);
}
}
- AnnotatableType type = (AnnotatableType) convertType(receiver.type);
+ Type type = convertType(receiver.type);
methodDecl.setReceiverType(type);
if (receiver.modifiers != 0) {
methodDecl.setFlags(methodDecl.getFlags() | ASTNode.MALFORMED);
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
index c03425b6d1..25063f3614 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/MethodDeclaration.java
@@ -281,7 +281,7 @@ public class MethodDeclaration extends BodyDeclaration {
* Defaults to none.
* @since 3.9 BETA_JAVA8
*/
- private AnnotatableType optionalReceiverType = null;
+ private Type optionalReceiverType = null;
/**
* Qualifying name of the explicit </code>this</code> parameter, or <code>null</code> if none.
@@ -734,7 +734,7 @@ public class MethodDeclaration extends BodyDeclaration {
* @exception UnsupportedOperationException if this operation is used below JLS8
* @since 3.9 BETA_JAVA8
*/
- public AnnotatableType getReceiverType() {
+ public Type getReceiverType() {
unsupportedIn2_3_4();
return this.optionalReceiverType;
}
@@ -749,7 +749,7 @@ public class MethodDeclaration extends BodyDeclaration {
* @exception UnsupportedOperationException if this operation is used below JLS8
* @since 3.9 BETA_JAVA8
*/
- public void setReceiverType(AnnotatableType receiverType) {
+ public void setReceiverType(Type receiverType) {
unsupportedIn2_3_4();
ASTNode oldChild = this.optionalReceiverType;
preReplaceChild(oldChild, receiverType, RECEIVER_TYPE_PROPERTY);
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
index f3093d3daf..6305d7f757 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/NaiveASTFlattener.java
@@ -1049,7 +1049,7 @@ public class NaiveASTFlattener extends ASTVisitor {
node.getName().accept(this);
this.buffer.append("(");//$NON-NLS-1$
if (node.getAST().apiLevel() >= AST.JLS8) {
- AnnotatableType receiverType = node.getReceiverType();
+ Type receiverType = node.getReceiverType();
if (receiverType != null) {
receiverType.accept(this);
this.buffer.append(' ');

Back to the top