// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package multidex002;

import java.lang.annotation.Annotation;
import multidex002.fakelibrary.MultiDexApplication;

@AnnotationWithEnum(ReferencedByAnnotation.B)
public class TestApplication extends MultiDexApplication {

  public static Annotation annotation = getAnnotationWithEnum();
  public static Annotation annotation2 = getSoleAnnotation(Annotated.class);
  public static Annotation annotation3 = getSoleAnnotation(Annotated2.class);
  public static Class<?> interfaceClass = InterfaceWithEnum.class;

  public static Annotation getAnnotationWithEnum() {
    return getSoleAnnotation(TestApplication.class);
  }

  public static Annotation getSoleAnnotation(Class<?> annotated) {
    Annotation[] annot = annotated.getAnnotations();
    if (annot.length == 1) {
      return annot[0];
    }

    throw new AssertionError();
  }
}
