package jadx.samples; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Method; import java.util.Arrays; public class TestAnnotations extends AbstractTest { @Deprecated public int a; public void error() throws Exception { throw new Exception("error"); } @Deprecated public static Object depr(String[] a) { return Arrays.asList(a); } public @interface SimpleAnnotation { boolean value(); } @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String name() default "a"; String str() default "str"; int num(); float value(); double[] doubles(); Class<?> cls(); SimpleAnnotation simple(); Thread.State state() default Thread.State.TERMINATED; } @MyAnnotation(name = "b", num = 7, cls = Exception.class, doubles = {0.0, 1.1}, value = 9.87f, simple = @SimpleAnnotation(false)) public static Object test(String[] a) { return Arrays.asList(a); } public static Object test2(@Deprecated String a, @SimpleAnnotation(value = false) Object b) { @Deprecated Object c = a; return c; } public @interface ClassesAnnotation { Class<?>[] value(); } @ClassesAnnotation({ int.class, int[].class, int[][][].class, String.class, String[].class, String[][].class }) public static Object test3(Object b) { return b.toString(); } @Override public boolean testRun() throws Exception { Class<?> cls = TestAnnotations.class; new Thread(); Method err = cls.getMethod("error"); assertTrue(err.getExceptionTypes().length > 0); assertTrue(err.getExceptionTypes()[0] == Exception.class); Method d = cls.getMethod("depr", String[].class); assertTrue(d.getAnnotations().length > 0); assertTrue(d.getAnnotations()[0].annotationType() == Deprecated.class); Method ma = cls.getMethod("test", String[].class); assertTrue(ma.getAnnotations().length > 0); MyAnnotation a = (MyAnnotation) ma.getAnnotations()[0]; assertTrue(a.num() == 7); assertTrue(a.state() == Thread.State.TERMINATED); return true; } public static void main(String[] args) throws Exception { new TestAnnotations().testRun(); } }