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 {
-
-}