// Test various reflection methods. import java.lang.annotation.Inherited; import java.lang.reflect.Method; import java.lang.reflect.Field; public class PR29495 { public class container { // This class has a synthetic field... public T get(T v) { return v; } } public class concrete extends container { // This makes us have a synthetic bridge method. public String get(String v) { return "hi" + v; } } // varargs method public static void va(Object... args) { } public static void check(boolean x, String m) { if (! x) System.out.println("fail: " + m); } public static void main(String[] args) throws Throwable { check (Inherited.class.isAnnotation(), "Inherited isAnnotation"); Method m = PR29495.class.getDeclaredMethod("va", new Class[] { Object[].class }); check (m.isVarArgs(), "va isVarArgs"); m = concrete.class.getDeclaredMethod("get", new Class[] { Object.class }); check (m.isSynthetic(), "get isSynthetic"); check (m.isBridge(), "get isBridge"); Field[] fs = container.class.getDeclaredFields(); boolean ok = false; for (int i = 0; i < fs.length; ++i) { if (fs[i].isSynthetic()) { ok = true; break; } } check (ok, "container has synthetic field"); } }