73 74 protected static class TestClassProtectedStaticInner { 75 } 76 } 77 78 public static class TestClassPublicStatic { 79 public static class TestClassPublicStaticInner { 80 } 81 } 82 83 } 84 85 class TestClass { 86 static { 87 // force creation of hidden class (for the lambda form) 88 Runnable r = () -> System.out.println("Hello"); 89 r.run(); 90 } 91 92 public static void createNonFindableClasses(byte[] klassbuf) throws Throwable { 93 // Create a weak hidden class and an array of weak hidden classes. 94 Lookup lookup = MethodHandles.lookup(); 95 Class<?> clh = lookup.defineHiddenClass(klassbuf, false, NESTMATE, WEAK).lookupClass(); 96 Class<?> arrayOfHidden = Array.newInstance(clh, 10).getClass(); // HAS ISSUES? 97 98 // Create an Unsafe anonymous class and an array of unsafe anonymous classes. 99 Unsafe unsafe = Unsafe.getUnsafe(); 100 Class<?> clu = unsafe.defineAnonymousClass(TestClass.class, klassbuf, new Object[0]); 101 final Class<?> arrayOfUAC = Array.newInstance(clu, 15).getClass(); 102 } 103 } | 73 74 protected static class TestClassProtectedStaticInner { 75 } 76 } 77 78 public static class TestClassPublicStatic { 79 public static class TestClassPublicStaticInner { 80 } 81 } 82 83 } 84 85 class TestClass { 86 static { 87 // force creation of hidden class (for the lambda form) 88 Runnable r = () -> System.out.println("Hello"); 89 r.run(); 90 } 91 92 public static void createNonFindableClasses(byte[] klassbuf) throws Throwable { 93 // Create a hidden class and an array of hidden classes. 94 Lookup lookup = MethodHandles.lookup(); 95 Class<?> clh = lookup.defineHiddenClass(klassbuf, false, NESTMATE).lookupClass(); 96 Class<?> arrayOfHidden = Array.newInstance(clh, 10).getClass(); // HAS ISSUES? 97 98 // Create an Unsafe anonymous class and an array of unsafe anonymous classes. 99 Unsafe unsafe = Unsafe.getUnsafe(); 100 Class<?> clu = unsafe.defineAnonymousClass(TestClass.class, klassbuf, new Object[0]); 101 final Class<?> arrayOfUAC = Array.newInstance(clu, 15).getClass(); 102 } 103 } |