|
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