Merge "Revert "reflection: Add new 1.8 AnnotatedElement methods and tests""
diff --git a/runtime/mirror/class.h b/runtime/mirror/class.h
index ea614fd..be5c668 100644
--- a/runtime/mirror/class.h
+++ b/runtime/mirror/class.h
@@ -561,7 +561,7 @@
// The size of java.lang.Class.class.
static uint32_t ClassClassSize(size_t pointer_size) {
// The number of vtable entries in java.lang.Class.
- uint32_t vtable_entries = Object::kVTableLength + 72;
+ uint32_t vtable_entries = Object::kVTableLength + 69;
return ComputeClassSize(true, vtable_entries, 0, 0, 4, 1, 0, pointer_size);
}
diff --git a/runtime/native/java_lang_Class.cc b/runtime/native/java_lang_Class.cc
index a80585a..0ddd4a2 100644
--- a/runtime/native/java_lang_Class.cc
+++ b/runtime/native/java_lang_Class.cc
@@ -469,21 +469,14 @@
return soa.AddLocalReference<jobjectArray>(ret.Get());
}
-static jobject Class_getDeclaredAnnotation(JNIEnv* env, jobject javaThis, jclass annotationClass) {
+static jobject Class_getDeclaredAnnotation(JNIEnv* env, jobject javaThis, jclass annotationType) {
ScopedFastNativeObjectAccess soa(env);
StackHandleScope<2> hs(soa.Self());
Handle<mirror::Class> klass(hs.NewHandle(DecodeClass(soa, javaThis)));
-
- // Handle public contract to throw NPE if the "annotationClass" argument was null.
- if (UNLIKELY(annotationClass == nullptr)) {
- ThrowNullPointerException("annotationClass");
- return nullptr;
- }
-
if (klass->IsProxyClass() || klass->GetDexCache() == nullptr) {
return nullptr;
}
- Handle<mirror::Class> annotation_class(hs.NewHandle(soa.Decode<mirror::Class*>(annotationClass)));
+ Handle<mirror::Class> annotation_class(hs.NewHandle(soa.Decode<mirror::Class*>(annotationType)));
return soa.AddLocalReference<jobject>(
klass->GetDexFile().GetAnnotationForClass(klass, annotation_class));
}
diff --git a/test/048-reflect-v8/expected.txt b/test/048-reflect-v8/expected.txt
index 3109ecc..2d0b4cc 100644
--- a/test/048-reflect-v8/expected.txt
+++ b/test/048-reflect-v8/expected.txt
@@ -1,95 +1,4 @@
-==============================
-Are These Methods Default:
-==============================
-IsDefaultTest$DefaultInterface is default = yes
-IsDefaultTest$RegularInterface is default = no
-IsDefaultTest$ImplementsWithDefault is default = yes
-IsDefaultTest$ImplementsWithRegular is default = no
-==============================
-Class annotations by type:
-==============================
-Annotations by type, defined by class SingleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Annotations by type, defined by class SingleUser with annotation Calendars: <empty>
-Annotations by type, defined by class User with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)
-Annotations by type, defined by class User with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Annotations by type, defined by class User2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)
-Annotations by type, defined by class User2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)])
-Annotations by type, defined by class UserComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)
-Annotations by type, defined by class UserComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
-Annotations by type, defined by class UserSub with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)
-Annotations by type, defined by class UserSub with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Annotations by type, defined by class UserSub2 with annotation Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6)
-Annotations by type, defined by class UserSub2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
------------------------------
------------------------------
-==============================
-Class declared annotation:
-==============================
-Declared annotations by class class SingleUser, annotation interface Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Declared annotations by class class SingleUser, annotation interface Calendars: <null>
-Declared annotations by class class User, annotation interface Calendar: <null>
-Declared annotations by class class User, annotation interface Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Declared annotations by class class UserComplex, annotation interface Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6)
-Declared annotations by class class UserComplex, annotation interface Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
-Declared annotations by class class UserSub, annotation interface Calendar: <null>
-Declared annotations by class class UserSub, annotation interface Calendars: <null>
-Declared annotations by class class UserSub2, annotation interface Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6)
-Declared annotations by class class UserSub2, annotation interface Calendars: <null>
------------------------------
------------------------------
-==============================
-Declared class annotations by type:
-==============================
-Declared annnotations by type, defined by class SingleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Declared annnotations by type, defined by class SingleUser with annotation Calendars: <empty>
-Declared annnotations by type, defined by class User with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)
-Declared annnotations by type, defined by class User with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Declared annnotations by type, defined by class User2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)
-Declared annnotations by type, defined by class User2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)])
-Declared annnotations by type, defined by class UserComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)
-Declared annnotations by type, defined by class UserComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
-Declared annnotations by type, defined by class UserSub with annotation Calendar: <empty>
-Declared annnotations by type, defined by class UserSub with annotation Calendars: <empty>
-Declared annnotations by type, defined by class UserSub2 with annotation Calendar: @Calendar(dayOfMonth=sub2, dayOfWeek=unspecified_week, hour=6)
-Declared annnotations by type, defined by class UserSub2 with annotation Calendars: <empty>
------------------------------
------------------------------
-==============================
-Method annotations by type:
-==============================
-Annotations by type, defined by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Annotations by type, defined by method singleUser with annotation Calendars: <empty>
-Annotations by type, defined by method user with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)
-Annotations by type, defined by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Annotations by type, defined by method user2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)
-Annotations by type, defined by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)])
-Annotations by type, defined by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)
-Annotations by type, defined by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
------------------------------
------------------------------
-==============================
-Declared method annotations:
-==============================
-Annotations declared by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Annotations declared by method singleUser with annotation Calendars: <null>
-Annotations declared by method user with annotation Calendar: <null>
-Annotations declared by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Annotations declared by method user2 with annotation Calendar: <null>
-Annotations declared by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)])
-Annotations declared by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6)
-Annotations declared by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
------------------------------
------------------------------
-==============================
-Declared method annotations by type:
-==============================
-Annotations by type, defined by method singleUser with annotation Calendar: @Calendar(dayOfMonth=unspecified_month, dayOfWeek=single, hour=23)
-Annotations by type, defined by method singleUser with annotation Calendars: <empty>
-Annotations by type, defined by method user with annotation Calendar: @Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)
-Annotations by type, defined by method user with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=last, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=unspecified_month, dayOfWeek=Fri, hour=23)])
-Annotations by type, defined by method user2 with annotation Calendar: @Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)
-Annotations by type, defined by method user2 with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=z, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=x, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=y, dayOfWeek=unspecified_week, hour=6)])
-Annotations by type, defined by method userComplex with annotation Calendar: @Calendar(dayOfMonth=afirst, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)
-Annotations by type, defined by method userComplex with annotation Calendars: @Calendars(value=[@Calendar(dayOfMonth=zsecond, dayOfWeek=unspecified_week, hour=6), @Calendar(dayOfMonth=athird, dayOfWeek=unspecified_week, hour=23)])
------------------------------
------------------------------
+Main$DefaultInterface is default = yes
+Main$RegularInterface is default = no
+Main$ImplementsWithDefault is default = yes
+Main$ImplementsWithRegular is default = no
diff --git a/test/048-reflect-v8/src/AnnotationTest.java b/test/048-reflect-v8/src/AnnotationTest.java
deleted file mode 100644
index 75e6845..0000000
--- a/test/048-reflect-v8/src/AnnotationTest.java
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-
-public class AnnotationTest extends AnnotationTestHelpers {
- public static void testAnnotationsByType() {
- System.out.println("==============================");
- System.out.println("Class annotations by type:");
- System.out.println("==============================");
-
- // Print associated annotations:
- // * A is directly present or repeatably present on an element E;
- // * No annotation of A is directly/repeatably present on an element
- // AND E is a class AND A's type is inheritable, AND A is associated with its superclass.
- // (Looks through subtypes recursively only if there's 0 result at each level,
- // and the annotation is @Inheritable).
- printAnnotationsByType(Calendar.class, SingleUser.class);
- printAnnotationsByType(Calendars.class, SingleUser.class);
-
- printAnnotationsByType(Calendar.class, User.class);
- printAnnotationsByType(Calendars.class, User.class);
-
- printAnnotationsByType(Calendar.class, User2.class); // Enforce ordering 'z,x,y'
- printAnnotationsByType(Calendars.class, User2.class);
-
- // NOTE:
- // Order of outer-most annotations Calendars[C,C],S vs C,Calendars[C,C] is unspecified.
- // In particular it's the order of #getDeclaredAnnotations which is completely unmentioned.
- // The only requirement for #getAnnotationsByType is to have same ordering as
- // #getDeclaredAnnotations.
- // (Calendars[] itself has to maintain value() order).
- printAnnotationsByType(Calendar.class, UserComplex.class); // Cs(C,C),C collapses into C,C,C.
- printAnnotationsByType(Calendars.class, UserComplex.class);
-
- printAnnotationsByType(Calendar.class, UserSub.class);
- printAnnotationsByType(Calendars.class, UserSub.class);
-
- printAnnotationsByType(Calendar.class, UserSub2.class);
- // The directly present "Calendar" annotation masks all the repeatably present
- // "Calendar" annotations coming from User.
- printAnnotationsByType(Calendars.class, UserSub2.class);
- // Edge case: UserSub2 doesn't directly have a Calendars annotation,
- // so it doesn't mask the "User" Calendars annotation.
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
-
- }
-
- public static void testDeclaredAnnotation() {
- System.out.println("==============================");
- System.out.println("Class declared annotation:");
- System.out.println("==============================");
-
- // Print directly present annotations:
- //
- // The element E has an annotation_item for it (accessible through an
- // annotations_directory_item) corresponding to an annotation A,
- // and A's type_idx must match that on the encoded_annotation (from the annotation_item).
- // (Does not look through the subtypes recursively)
- printDeclaredAnnotation(SingleUser.class, Calendar.class);
- printDeclaredAnnotation(SingleUser.class, Calendars.class);
-
- printDeclaredAnnotation(User.class, Calendar.class);
- printDeclaredAnnotation(User.class, Calendars.class);
-
- printDeclaredAnnotation(UserComplex.class, Calendar.class);
- printDeclaredAnnotation(UserComplex.class, Calendars.class);
-
- printDeclaredAnnotation(UserSub.class, Calendar.class);
- printDeclaredAnnotation(UserSub.class, Calendars.class);
-
- printDeclaredAnnotation(UserSub2.class, Calendar.class);
- printDeclaredAnnotation(UserSub2.class, Calendars.class);
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
- }
-
- public static void testDeclaredAnnotationsByType() {
- System.out.println("==============================");
- System.out.println("Declared class annotations by type:");
- System.out.println("==============================");
-
- // A is directly present or repeatably present on an element E;
- // -- (does not do any recursion for classes regardless of @Inherited)
- printDeclaredAnnotationsByType(Calendar.class, SingleUser.class);
- printDeclaredAnnotationsByType(Calendars.class, SingleUser.class);
-
- printDeclaredAnnotationsByType(Calendar.class, User.class);
- printDeclaredAnnotationsByType(Calendars.class, User.class);
-
- printDeclaredAnnotationsByType(Calendar.class, User2.class); // Enforce ordering 'z,x,y'
- printDeclaredAnnotationsByType(Calendars.class, User2.class);
-
- printDeclaredAnnotationsByType(Calendar.class, UserComplex.class);
- printDeclaredAnnotationsByType(Calendars.class, UserComplex.class);
-
- printDeclaredAnnotationsByType(Calendar.class, UserSub.class);
- printDeclaredAnnotationsByType(Calendars.class, UserSub.class);
-
- printDeclaredAnnotationsByType(Calendar.class, UserSub2.class);
- // The directly present "Calendar" annotation masks all the repeatably present "Calendar"
- // annotations coming from User.
- printDeclaredAnnotationsByType(Calendars.class, UserSub2.class);
- // Edge case: UserSub2 doesn't directly have a Calendars annotation,
- // so it doesn't mask the "User" Calendars annotation.
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
- }
-
- // Print the annotation "annotationClass" that is associated with an element denoted by
- // "annotationUseClass."
- private static <A extends Annotation> void printAnnotationsByType(Class<A> annotationClass,
- Class<?> annotationUseClass) {
- A[] annotationsByType = annotationUseClass.getAnnotationsByType(annotationClass);
-
- String msg = "Annotations by type, defined by class "
- + annotationUseClass.getName() + " with annotation " + annotationClass.getName() + ": "
- + asString(annotationsByType);
-
-
- System.out.println(msg);
- }
-
- private static <A extends Annotation> void printDeclaredAnnotation(Class<?> annotationUseClass,
- Class<A> annotationDefClass) {
- A anno = annotationUseClass.getDeclaredAnnotation(annotationDefClass);
-
- String msg = asString(anno);
-
- System.out.println("Declared annotations by class " + annotationUseClass
- + ", annotation " + annotationDefClass + ": " + msg);
- }
-
- // Print the annotation "annotationClass" that is directly/indirectly present with an element
- // denoted by "annotationUseClass."
- private static <A extends Annotation> void printDeclaredAnnotationsByType(
- Class<A> annotationClass, Class<?> annotationUseClass) {
- A[] annotationsByType = annotationUseClass.getDeclaredAnnotationsByType(annotationClass);
-
- String msg = "Declared annnotations by type, defined by class " + annotationUseClass.getName()
- + " with annotation " + annotationClass.getName() + ": "
- + asString(annotationsByType);
-
- System.out.println(msg);
- }
-
- public static void testMethodAnnotationsByType() {
- System.out.println("==============================");
- System.out.println("Method annotations by type:");
- System.out.println("==============================");
-
- // Print associated annotations:
- // * A is directly present or repeatably present on an element E;
- // * No annotation of A is directly/repeatably present on an element AND E is a class
- // AND A's type is inheritable, AND A is associated with its superclass.
- // (Looks through subtypes recursively only if there's 0 result at each level,
- // and the annotation is @Inheritable).
- printMethodAnnotationsByType(Calendar.class, "singleUser", AnnotationTestFixture.class);
- printMethodAnnotationsByType(Calendars.class, "singleUser", AnnotationTestFixture.class);
-
- printMethodAnnotationsByType(Calendar.class, "user", AnnotationTestFixture.class);
- printMethodAnnotationsByType(Calendars.class, "user", AnnotationTestFixture.class);
-
- printMethodAnnotationsByType(Calendar.class, "user2", AnnotationTestFixture.class);
- printMethodAnnotationsByType(Calendars.class, "user2", AnnotationTestFixture.class);
-
- printMethodAnnotationsByType(Calendar.class, "userComplex", AnnotationTestFixture.class);
- printMethodAnnotationsByType(Calendars.class, "userComplex", AnnotationTestFixture.class);
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
- }
-
- // Print the annotation "annotationClass" that is associated with an element denoted by
- // "annotationUseClass" method methodName.
- private static <A extends Annotation> void printMethodAnnotationsByType(Class<A> annotationClass,
- String methodName, Class<?> annotationUseClass) {
- Method m = null;
- try {
- m = annotationUseClass.getDeclaredMethod(methodName);
- } catch (Throwable t) {
- throw new AssertionError(t);
- }
- A[] annotationsByType = m.getAnnotationsByType(annotationClass);
-
- String msg = "Annotations by type, defined by method " + m.getName() + " with annotation " +
- annotationClass.getName() + ": " +
- asString(annotationsByType);
-
- System.out.println(msg);
- }
-
- public static void testMethodDeclaredAnnotations() {
- System.out.println("==============================");
- System.out.println("Declared method annotations:");
- System.out.println("==============================");
-
- printMethodDeclaredAnnotation(Calendar.class, "singleUser", AnnotationTestFixture.class);
- printMethodDeclaredAnnotation(Calendars.class, "singleUser", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotation(Calendar.class, "user", AnnotationTestFixture.class);
- printMethodDeclaredAnnotation(Calendars.class, "user", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotation(Calendar.class, "user2", AnnotationTestFixture.class);
- printMethodDeclaredAnnotation(Calendars.class, "user2", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotation(Calendar.class, "userComplex", AnnotationTestFixture.class);
- printMethodDeclaredAnnotation(Calendars.class, "userComplex", AnnotationTestFixture.class);
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
- }
-
- // Print the annotation "annotationClass" that is associated with an element denoted by
- // methodName in annotationUseClass.
- private static <A extends Annotation> void printMethodDeclaredAnnotation(Class<A> annotationClass,
- String methodName, Class<?> annotationUseClass) {
- Method m = null;
- try {
- m = annotationUseClass.getDeclaredMethod(methodName);
- } catch (Throwable t) {
- throw new AssertionError(t);
- }
- Annotation annotationsByType = m.getDeclaredAnnotation(annotationClass);
-
- String msg = "Annotations declared by method " + m.getName() + " with annotation "
- + annotationClass.getName() + ": "
- + asString(annotationsByType);
-
- System.out.println(msg);
- }
-
- public static void testMethodDeclaredAnnotationsByType() {
- System.out.println("==============================");
- System.out.println("Declared method annotations by type:");
- System.out.println("==============================");
-
- printMethodDeclaredAnnotationByType(Calendar.class, "singleUser", AnnotationTestFixture.class);
- printMethodDeclaredAnnotationByType(Calendars.class, "singleUser", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotationByType(Calendar.class, "user", AnnotationTestFixture.class);
- printMethodDeclaredAnnotationByType(Calendars.class, "user", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotationByType(Calendar.class, "user2", AnnotationTestFixture.class);
- printMethodDeclaredAnnotationByType(Calendars.class, "user2", AnnotationTestFixture.class);
-
- printMethodDeclaredAnnotationByType(Calendar.class, "userComplex", AnnotationTestFixture.class);
- printMethodDeclaredAnnotationByType(Calendars.class, "userComplex",
- AnnotationTestFixture.class);
-
- System.out.println("-----------------------------");
- System.out.println("-----------------------------");
- }
-
- // Print the annotation "annotationClass" that is associated with an element denoted by
- // methodName in annotationUseClass.
- private static <A extends Annotation> void printMethodDeclaredAnnotationByType(
- Class<A> annotationClass, String methodName, Class<?> annotationUseClass) {
- Method m = null;
- try {
- m = annotationUseClass.getDeclaredMethod(methodName);
- } catch (Throwable t) {
- throw new AssertionError(t);
- }
- A[] annotationsByType = m.getDeclaredAnnotationsByType(annotationClass);
-
- String msg = "Annotations by type, defined by method " + m.getName() + " with annotation "
- + annotationClass.getName() + ": "
- + asString(annotationsByType);
-
- System.out.println(msg);
- }
-}
diff --git a/test/048-reflect-v8/src/AnnotationTestFixture.java b/test/048-reflect-v8/src/AnnotationTestFixture.java
deleted file mode 100644
index 248dfac..0000000
--- a/test/048-reflect-v8/src/AnnotationTestFixture.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class AnnotationTestFixture {
-
- @Calendar(dayOfWeek="single", hour=23)
- public static void singleUser() {
-
- }
- @Calendars ({
- @Calendar(dayOfMonth="last"),
- @Calendar(dayOfWeek="Fri", hour=23)
- })
- public static void user() {
-
- }
-
- @Calendars ({
- @Calendar(dayOfMonth="z"),
- @Calendar(dayOfMonth="x"),
- @Calendar(dayOfMonth="y")
- })
- public static void user2() {
-
- }
-
- @Calendar(dayOfMonth="afirst")
- @Calendars ({
- @Calendar(dayOfMonth="zsecond"),
- @Calendar(dayOfMonth="athird", hour=23)
- })
- public static void userComplex() {
-
- }
-}
diff --git a/test/048-reflect-v8/src/AnnotationTestHelpers.java b/test/048-reflect-v8/src/AnnotationTestHelpers.java
deleted file mode 100644
index 6b5bea2..0000000
--- a/test/048-reflect-v8/src/AnnotationTestHelpers.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.annotation.Annotation;
-
-public class AnnotationTestHelpers {
- // Provide custom print function that print a deterministic output.
- // Note that Annotation#toString has unspecified order: it prints out the
- // fields, which is why we can't rely on it.
-
- public static String asString(Annotation anno) {
- if (anno instanceof Calendar) {
- return asString((Calendar)anno);
- } else if (anno instanceof Calendars) {
- return asString((Calendars)anno);
- } else {
- if (anno == null) {
- return "<null>";
- }
- // Fall-back, usually would only go here in a test failure.
- return anno.toString();
- }
- }
-
- public static String asString(Annotation[] annos) {
- String msg = "";
-
- if (annos == null) {
- msg += "<null>";
- } else if (annos.length == 0) {
- msg += "<empty>";
- } else {
- for (int i = 0; i < annos.length; ++i) {
- msg += asString(annos[i]);
-
- if (i != annos.length - 1) {
- msg += ", ";
- }
- }
- }
-
- return msg;
- }
-
- public static String asString(Calendar calendar) {
- if (calendar == null) {
- return "<null>";
- }
-
- return "@Calendar(dayOfMonth=" + calendar.dayOfMonth() + ", dayOfWeek=" +
- calendar.dayOfWeek() + ", hour=" + calendar.hour() + ")";
- }
-
- public static String asString(Calendars calendars) {
- if (calendars == null) {
- return "<null>";
- }
-
- String s = "@Calendars(value=[";
-
- Calendar[] allValues = calendars.value();
- for (int i = 0; i < allValues.length; ++i) {
- s += asString(allValues[i]);
- if (i != allValues.length - 1) {
- s += ", ";
- }
- }
-
- s += "])";
-
- return s;
- }
-}
diff --git a/test/048-reflect-v8/src/Calendar.java b/test/048-reflect-v8/src/Calendar.java
deleted file mode 100644
index 4a16573..0000000
--- a/test/048-reflect-v8/src/Calendar.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Repeatable;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-// This is a plain old non-1.8 annotation. At runtime we can see that it has a
-// "Repeatable" annotation if we query with getDeclaredAnnotation(Repeatable.class)
-@Retention(RetentionPolicy.RUNTIME)
-@Repeatable(Calendars.class)
-@Inherited // note: container must also be @Inherited by JLS.
-public @interface Calendar {
- String dayOfMonth() default "unspecified_month";
- String dayOfWeek() default "unspecified_week";
- int hour() default 6;
-}
-
diff --git a/test/048-reflect-v8/src/Calendars.java b/test/048-reflect-v8/src/Calendars.java
deleted file mode 100644
index caeda52..0000000
--- a/test/048-reflect-v8/src/Calendars.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-// Plain old annotation, there's nothing 1.8 specific about it.
-@Retention(RetentionPolicy.RUNTIME)
-@Inherited // note: elements must also be @Inherited by JLS.
-public @interface Calendars {
- Calendar[] value();
-}
diff --git a/test/048-reflect-v8/src/IFaceA.java b/test/048-reflect-v8/src/IFaceA.java
deleted file mode 100644
index 9b1f610..0000000
--- a/test/048-reflect-v8/src/IFaceA.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Stored as a complex annotation Calendars(Calendar,Calendar)
-// in the binary.
-@Calendars ({
- @Calendar(dayOfMonth="if_a_first"),
- @Calendar(dayOfMonth="if_b_last")
-})
-public interface IFaceA {
-}
diff --git a/test/048-reflect-v8/src/IFaceSimple.java b/test/048-reflect-v8/src/IFaceSimple.java
deleted file mode 100644
index 93cf610..0000000
--- a/test/048-reflect-v8/src/IFaceSimple.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Simple annotation, no container.
-@Calendar(dayOfMonth="if_simple_first")
-public interface IFaceSimple {
-
-}
diff --git a/test/048-reflect-v8/src/IsDefaultTest.java b/test/048-reflect-v8/src/IsDefaultTest.java
deleted file mode 100644
index 177dcf1..0000000
--- a/test/048-reflect-v8/src/IsDefaultTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.lang.reflect.Method;
-
-public class IsDefaultTest {
- interface DefaultInterface {
- default void sayHi() {
- System.out.println("hi default");
- }
- }
-
- interface RegularInterface {
- void sayHi();
- }
-
- class ImplementsWithDefault implements DefaultInterface {}
- class ImplementsWithRegular implements RegularInterface {
- public void sayHi() {
- System.out.println("hello specific");
- }
- }
-
- private static void printIsDefault(Class<?> klass) {
- Method m;
- try {
- m = klass.getMethod("sayHi");
- } catch (Throwable t) {
- System.out.println(t);
- return;
- }
-
- boolean isDefault = m.isDefault();
- System.out.println(klass.getName() + " is default = " + (isDefault ? "yes" : "no"));
- }
-
- public static void test() {
- System.out.println("==============================");
- System.out.println("Are These Methods Default:");
- System.out.println("==============================");
-
- printIsDefault(DefaultInterface.class);
- printIsDefault(RegularInterface.class);
- printIsDefault(ImplementsWithDefault.class);
- printIsDefault(ImplementsWithRegular.class);
- }
-}
diff --git a/test/048-reflect-v8/src/Main.java b/test/048-reflect-v8/src/Main.java
index f2b8287..7fa2a92 100644
--- a/test/048-reflect-v8/src/Main.java
+++ b/test/048-reflect-v8/src/Main.java
@@ -14,14 +14,43 @@
* limitations under the License.
*/
+import java.lang.reflect.Method;
+
public class Main {
+ interface DefaultInterface {
+ default void sayHi() {
+ System.out.println("hi default");
+ }
+ }
+
+ interface RegularInterface {
+ void sayHi();
+ }
+
+ class ImplementsWithDefault implements DefaultInterface {}
+ class ImplementsWithRegular implements RegularInterface {
+ public void sayHi() {
+ System.out.println("hello specific");
+ }
+ }
+
+ private static void printIsDefault(Class<?> klass) {
+ Method m;
+ try {
+ m = klass.getMethod("sayHi");
+ } catch (Throwable t) {
+ System.out.println(t);
+ return;
+ }
+
+ boolean isDefault = m.isDefault();
+ System.out.println(klass.getName() + " is default = " + (isDefault ? "yes" : "no"));
+ }
+
public static void main(String[] args) {
- IsDefaultTest.test();
- AnnotationTest.testAnnotationsByType();
- AnnotationTest.testDeclaredAnnotation();
- AnnotationTest.testDeclaredAnnotationsByType();
- AnnotationTest.testMethodAnnotationsByType();
- AnnotationTest.testMethodDeclaredAnnotations();
- AnnotationTest.testMethodDeclaredAnnotationsByType();
+ printIsDefault(DefaultInterface.class);
+ printIsDefault(RegularInterface.class);
+ printIsDefault(ImplementsWithDefault.class);
+ printIsDefault(ImplementsWithRegular.class);
}
}
diff --git a/test/048-reflect-v8/src/SingleUser.java b/test/048-reflect-v8/src/SingleUser.java
deleted file mode 100644
index 0f9c430..0000000
--- a/test/048-reflect-v8/src/SingleUser.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Stored as a single "Calendar" annotation in the binary.
-@Calendar(dayOfWeek="single", hour=23)
-public class SingleUser {
-
-}
diff --git a/test/048-reflect-v8/src/User.java b/test/048-reflect-v8/src/User.java
deleted file mode 100644
index 003ceeb..0000000
--- a/test/048-reflect-v8/src/User.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Stored as a complex annotation Calendars(Calendar,Calendar)
-// in the binary.
-//
-/* FIXME: Use this code instead, when Jack supports repeatable annotations properly.
- *
- * @Calendar(dayOfMonth="last")
- * @Calendar(dayOfWeek="Fri", hour=23)
- */
-@Calendars ({
- @Calendar(dayOfMonth="last"),
- @Calendar(dayOfWeek="Fri", hour=23)
-})
-public class User {
-
-}
diff --git a/test/048-reflect-v8/src/User2.java b/test/048-reflect-v8/src/User2.java
deleted file mode 100644
index 1a6049f..0000000
--- a/test/048-reflect-v8/src/User2.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Stored as a complex annotation Calendars(Calendar,Calendar,Calendar)
-// in the binary.
-// (Check for order, should be z,x,y)
-@Calendars ({
- @Calendar(dayOfMonth="z"),
- @Calendar(dayOfMonth="x"),
- @Calendar(dayOfMonth="y")
-})
-public class User2 {
-
-}
diff --git a/test/048-reflect-v8/src/UserComplex.java b/test/048-reflect-v8/src/UserComplex.java
deleted file mode 100644
index e262349..0000000
--- a/test/048-reflect-v8/src/UserComplex.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// Stored as a complex annotation Calendars(Calendar,Calendar)
-// followed by a Calendar in the binary.
-// In other words { Calendars([C,C]), C }
-//
-// Note that trying to do {C,Calendars,C} or similar
-// is illegal by the JLS.
-@Calendar(dayOfMonth="afirst")
-@Calendars ({
- @Calendar(dayOfMonth="zsecond"),
- @Calendar(dayOfMonth="athird", hour=23)
-})
-// @Calendar(dayOfMonth="zlast") // Leave for future ordering test
-public class UserComplex {
-
-}
diff --git a/test/048-reflect-v8/src/UserSub.java b/test/048-reflect-v8/src/UserSub.java
deleted file mode 100644
index d60aa6a..0000000
--- a/test/048-reflect-v8/src/UserSub.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class UserSub
- extends User
- implements IFaceA, IFaceSimple {
-
-}
diff --git a/test/048-reflect-v8/src/UserSub2.java b/test/048-reflect-v8/src/UserSub2.java
deleted file mode 100644
index 13e2eb0..0000000
--- a/test/048-reflect-v8/src/UserSub2.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// This calendar subsumes anything else we would've normally gotten from the subclass.
-@Calendar(dayOfMonth="sub2")
-public class UserSub2
- extends User
- implements IFaceA, IFaceSimple {
-
-}