diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/048-reflect-v8/expected.txt | 99 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/AnnotationTest.java | 291 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/AnnotationTestFixture.java | 48 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/AnnotationTestHelpers.java | 86 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/Calendar.java | 32 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/Calendars.java | 26 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/IFaceA.java | 24 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/IFaceSimple.java | 21 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/IsDefaultTest.java | 60 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/Main.java | 43 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/SingleUser.java | 21 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/User.java | 31 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/User2.java | 27 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/UserComplex.java | 31 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/UserSub.java | 21 | ||||
| -rw-r--r-- | test/048-reflect-v8/src/UserSub2.java | 23 | ||||
| -rw-r--r-- | test/566-polymorphic-inlining/polymorphic_inline.cc | 20 | ||||
| -rw-r--r-- | test/Android.run-test.mk | 7 |
18 files changed, 58 insertions, 853 deletions
diff --git a/test/048-reflect-v8/expected.txt b/test/048-reflect-v8/expected.txt index 3109eccda6..2d0b4ccb6b 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 75e684557c..0000000000 --- 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 248dfacf3b..0000000000 --- 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 6b5bea266e..0000000000 --- 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 4a16573bca..0000000000 --- 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 caeda52ea6..0000000000 --- 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 9b1f610f84..0000000000 --- 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 93cf61057e..0000000000 --- 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 177dcf1ab9..0000000000 --- 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 f2b8287d18..7fa2a923d7 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 0f9c430109..0000000000 --- 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 003ceeb093..0000000000 --- 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 1a6049f508..0000000000 --- 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 e26234960b..0000000000 --- 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 d60aa6a3f1..0000000000 --- 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 13e2eb07c8..0000000000 --- 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 { - -} diff --git a/test/566-polymorphic-inlining/polymorphic_inline.cc b/test/566-polymorphic-inlining/polymorphic_inline.cc index 55eac5c30a..b2934ed163 100644 --- a/test/566-polymorphic-inlining/polymorphic_inline.cc +++ b/test/566-polymorphic-inlining/polymorphic_inline.cc @@ -29,11 +29,18 @@ static void do_checks(jclass cls, const char* method_name) { jit::Jit* jit = Runtime::Current()->GetJit(); jit::JitCodeCache* code_cache = jit->GetCodeCache(); ArtMethod* method = klass->FindDeclaredDirectMethodByName(method_name, sizeof(void*)); - jit->CompileMethod(method, soa.Self()); - OatQuickMethodHeader* header = OatQuickMethodHeader::FromEntryPoint( - method->GetEntryPointFromQuickCompiledCode()); - CHECK(code_cache->ContainsPc(header->GetCode())); + OatQuickMethodHeader* header = nullptr; + // Infinite loop... Test harness will have its own timeout. + while (true) { + header = OatQuickMethodHeader::FromEntryPoint(method->GetEntryPointFromQuickCompiledCode()); + if (code_cache->ContainsPc(header->GetCode())) { + break; + } else { + // sleep one second to give time to the JIT compiler. + sleep(1); + } + } CodeInfo info = header->GetOptimizedCodeInfo(); CHECK(info.HasInlineInfo()); @@ -45,6 +52,11 @@ extern "C" JNIEXPORT void JNICALL Java_Main_ensureJittedAndPolymorphicInline(JNI return; } + if (kIsDebugBuild) { + // A debug build might often compile the methods without profiling informations filled. + return; + } + do_checks(cls, "testInvokeVirtual"); do_checks(cls, "testInvokeInterface"); } diff --git a/test/Android.run-test.mk b/test/Android.run-test.mk index bc60c3f6b6..7400248952 100644 --- a/test/Android.run-test.mk +++ b/test/Android.run-test.mk @@ -445,7 +445,6 @@ TEST_ART_BROKEN_INTERPRETER_RUN_TESTS := # CFI unwinding expects managed frames, and the test does not iterate enough to even compile. JIT # also uses Generic JNI instead of the JNI compiler. TEST_ART_BROKEN_JIT_RUN_TESTS := \ - 566-polymorphic-inlining \ 137-cfi ifneq (,$(filter jit,$(COMPILER_TYPES))) @@ -548,10 +547,8 @@ TEST_ART_BROKEN_OPTIMIZING_READ_BARRIER_RUN_TESTS := \ 527-checker-array-access-split \ 537-checker-arraycopy -# Tests that should fail in the read barrier configuration with JIT. -# 496: Occasional timeout: "Fault message: timeout: the monitored command dumped core" (b/26786304). -TEST_ART_BROKEN_JIT_READ_BARRIER_RUN_TESTS := \ - 496-checker-inlining-and-class-loader +# Tests that should fail in the read barrier configuration with JIT (Optimizing compiler). +TEST_ART_BROKEN_JIT_READ_BARRIER_RUN_TESTS := ifeq ($(ART_USE_READ_BARRIER),true) ifneq (,$(filter interpreter,$(COMPILER_TYPES))) |