test/java/lang/invoke/ProtectedMemberDifferentPackage/p1/T2.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File jdk Cdiff test/java/lang/invoke/ProtectedMemberDifferentPackage/p1/T2.java

test/java/lang/invoke/ProtectedMemberDifferentPackage/p1/T2.java

Print this page
rev 9083 : [mq]: 8033278.checkMemberAccess

*** 21,30 **** * questions. * */ package p1; class T1 { ! protected void m() { System.out.println("T1.m");} } ! public class T2 extends T1 {} --- 21,79 ---- * questions. * */ package p1; + import p2.T3; + + import java.lang.invoke.MethodHandle; + import java.lang.invoke.MethodHandles; + import java.lang.invoke.MethodHandles.Lookup; + import java.lang.invoke.MethodType; + import java.util.concurrent.Callable; + class T1 { ! protected void m1() {} ! protected static void m2() {} } ! public class T2 extends T1 { ! public static void main(String[] args) throws Throwable { ! Lookup LOOKUP = T3.lookup(); ! Class<IllegalAccessException> IAE = IllegalAccessException.class; ! ! assertFailure(IAE, () -> LOOKUP.findVirtual(T1.class, "m1", MethodType.methodType(void.class))); ! assertFailure(IAE, () -> LOOKUP.findStatic(T1.class, "m2", MethodType.methodType(void.class))); ! ! assertSuccess(() -> LOOKUP.findVirtual(T2.class, "m1", MethodType.methodType(void.class))); ! assertSuccess(() -> LOOKUP.findVirtual(T3.class, "m1", MethodType.methodType(void.class))); ! ! assertSuccess(() -> LOOKUP.findStatic(T2.class, "m2", MethodType.methodType(void.class))); ! assertSuccess(() -> LOOKUP.findStatic(T3.class, "m2", MethodType.methodType(void.class))); ! ! assertFailure(IAE, () -> LOOKUP.unreflect(T1.class.getDeclaredMethod("m1"))); ! assertFailure(IAE, () -> LOOKUP.unreflect(T1.class.getDeclaredMethod("m2"))); ! ! System.out.println("TEST PASSED"); ! } ! ! public static void assertFailure(Class<? extends Throwable> expectedError, Callable r) { ! try { ! r.call(); ! } catch(Throwable e) { ! if (expectedError.isAssignableFrom(e.getClass())) { ! return; // expected error ! } else { ! throw new Error("Unexpected error type: "+e.getClass()+"; expected type: "+expectedError, e); ! } ! } ! throw new Error("No error"); ! } ! ! public static void assertSuccess(Callable r) { ! try { ! r.call(); ! } catch(Throwable e) { ! throw new Error("Unexpected error", e); ! } ! } ! }
test/java/lang/invoke/ProtectedMemberDifferentPackage/p1/T2.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File