|
34 | 34 | import java.nio.file.Files; |
35 | 35 | import java.nio.file.Path; |
36 | 36 | import java.nio.file.StandardOpenOption; |
| 37 | +import java.util.ArrayList; |
37 | 38 | import java.util.Collection; |
38 | 39 | import java.util.HashMap; |
39 | 40 | import java.util.List; |
@@ -72,17 +73,17 @@ public static void initialize(Instrumentation inst) throws Exception { |
72 | 73 |
|
73 | 74 | Instrumenter instrumenter = INSTRUMENTER_FACTORY.newInstrumenter(EntitlementChecker.class, checkMethods); |
74 | 75 | inst.addTransformer(new Transformer(instrumenter, classesToTransform), true); |
75 | | - // TODO: should we limit this array somehow? |
76 | | - var classesToRetransform = classesToTransform.stream().map(EntitlementInitialization::internalNameToClass).toArray(Class[]::new); |
77 | | - inst.retransformClasses(classesToRetransform); |
| 76 | + inst.retransformClasses(findClassesToRetransform(inst.getAllLoadedClasses(), classesToTransform)); |
78 | 77 | } |
79 | 78 |
|
80 | | - private static Class<?> internalNameToClass(String internalName) { |
81 | | - try { |
82 | | - return Class.forName(internalName.replace('/', '.'), false, ClassLoader.getPlatformClassLoader()); |
83 | | - } catch (ClassNotFoundException e) { |
84 | | - throw new RuntimeException(e); |
| 79 | + private static Class<?>[] findClassesToRetransform(Class<?>[] loadedClasses, Set<String> classesToTransform) { |
| 80 | + List<Class<?>> retransform = new ArrayList<>(); |
| 81 | + for (Class<?> loadedClass : loadedClasses) { |
| 82 | + if (classesToTransform.contains(loadedClass.getName().replace(".", "/"))) { |
| 83 | + retransform.add(loadedClass); |
| 84 | + } |
85 | 85 | } |
| 86 | + return retransform.toArray(new Class<?>[0]); |
86 | 87 | } |
87 | 88 |
|
88 | 89 | private static PolicyManager createPolicyManager() throws IOException { |
|
0 commit comments