Fixes annotations that reference class literals; we were refencing the resolved type of the annotation value instead of its target type. The annotation unit test was updated to test this case and it was added to the TypeOracle test suite.
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1587 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/dev/core/src/com/google/gwt/dev/jdt/TypeOracleBuilder.java b/dev/core/src/com/google/gwt/dev/jdt/TypeOracleBuilder.java
index 0866153..8d1e42c 100644
--- a/dev/core/src/com/google/gwt/dev/jdt/TypeOracleBuilder.java
+++ b/dev/core/src/com/google/gwt/dev/jdt/TypeOracleBuilder.java
@@ -756,7 +756,7 @@
return stringLiteral.constant.stringValue();
} else if (expression instanceof ClassLiteralAccess) {
ClassLiteralAccess classLiteral = (ClassLiteralAccess) expression;
- Class<?> clazz = getClassLiteral(logger, classLiteral.resolvedType);
+ Class<?> clazz = getClassLiteral(logger, classLiteral.targetType);
if (clazz != null) {
return clazz;
}
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleAnnotationSupportTest.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleAnnotationSupportTest.java
index 9400983..3db837a 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleAnnotationSupportTest.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleAnnotationSupportTest.java
@@ -18,6 +18,7 @@
import com.google.gwt.core.ext.TreeLogger;
import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.test.AnnotatedClass;
+import com.google.gwt.core.ext.typeinfo.test.ClassLiteralReferenceAnnotation;
import com.google.gwt.core.ext.typeinfo.test.TestAnnotation;
import com.google.gwt.dev.cfg.ModuleDef;
import com.google.gwt.dev.cfg.ModuleDefLoader;
@@ -80,7 +81,10 @@
TestAnnotation realAnnotation = AnnotatedClass.class.getAnnotation(TestAnnotation.class);
validateAnnotation(annotatedClass, "Class", "Foo", realAnnotation);
- assertEquals(1, annotatedClass.getAnnotations().length);
+ ClassLiteralReferenceAnnotation classReferenceAnnotation = annotatedClass.getAnnotation(ClassLiteralReferenceAnnotation.class);
+ assertEquals(ClassLiteralReferenceAnnotation.Foo.class, classReferenceAnnotation.value());
+
+ assertEquals(2, annotatedClass.getAnnotations().length);
}
/**
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleSuite.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleSuite.java
index 307e7da..8d2db69 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleSuite.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/TypeOracleSuite.java
@@ -30,6 +30,7 @@
suite.addTestSuite(JRawTypeTest.class);
suite.addTestSuite(JTypeParameterTest.class);
suite.addTestSuite(JWildcardTypeTest.class);
+ suite.addTestSuite(TypeOracleAnnotationSupportTest.class);
return suite;
}
}
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/AnnotatedClass.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/AnnotatedClass.java
index e7f7022..bc69343 100644
--- a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/AnnotatedClass.java
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/AnnotatedClass.java
@@ -15,11 +15,14 @@
*/
package com.google.gwt.core.ext.typeinfo.test;
+import com.google.gwt.core.ext.typeinfo.test.ClassLiteralReferenceAnnotation.Foo;
+
/**
* Used to test that a
* {@link com.google.gwt.core.ext.typeinfo.TypeOracle TypeOracle} will correctly
* report the presence of annotations on the different annotatable elements.
*/
+@ClassLiteralReferenceAnnotation(Foo.class)
@TestAnnotation(value = "Class", nestedAnnotation = @NestedAnnotation("Foo"))
public class AnnotatedClass {
@TestAnnotation("Field")
diff --git a/dev/core/test/com/google/gwt/core/ext/typeinfo/test/ClassLiteralReferenceAnnotation.java b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/ClassLiteralReferenceAnnotation.java
new file mode 100644
index 0000000..1a4d9db
--- /dev/null
+++ b/dev/core/test/com/google/gwt/core/ext/typeinfo/test/ClassLiteralReferenceAnnotation.java
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package com.google.gwt.core.ext.typeinfo.test;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation which references class literals.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target( {
+ ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD,
+ ElementType.METHOD, ElementType.PACKAGE, ElementType.PARAMETER,
+ ElementType.TYPE})
+public @interface ClassLiteralReferenceAnnotation {
+ /**
+ * Class literals used with this annotation need to be a Foo or subtype
+ * thereof.
+ */
+ public class Foo {
+ }
+
+ Class<? extends Foo> value();
+}