forked from SteamWar/SteamWar
Fix Agent and WideningTransformer and ClassPatcher
This commit is contained in:
@@ -19,7 +19,11 @@
|
||||
|
||||
package de.steamwar;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.instrument.Instrumentation;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
@@ -38,14 +42,11 @@ import java.util.logging.Logger;
|
||||
*/
|
||||
public class Agent {
|
||||
private Agent() {
|
||||
/* This utility class should not be instantiated */
|
||||
throw new IllegalStateException("Utility class");
|
||||
}
|
||||
|
||||
private static final Logger LOG = Logger.getLogger("AccessWidenerAgent");
|
||||
|
||||
// Exposed so tests or other code can inspect the live transformer
|
||||
static volatile WideningTransformer transformer;
|
||||
|
||||
// -javaagent: startup
|
||||
public static void premain(String args, Instrumentation inst) {
|
||||
init(inst);
|
||||
@@ -54,13 +55,22 @@ public class Agent {
|
||||
private static void init(Instrumentation inst) {
|
||||
LOG.info("[AccessWidener] Agent initialising.");
|
||||
|
||||
WideningTransformer t = new WideningTransformer(inst);
|
||||
transformer = t;
|
||||
|
||||
// --- Phase 2: register transformer for future class loads ---
|
||||
// canRetransform=true so we can call retransformClasses() later
|
||||
inst.addTransformer(t, true);
|
||||
List<AccessWidenerEntry> entries = new ArrayList<>();
|
||||
File file = new File(new File(".").getAbsoluteFile(), "plugins/");
|
||||
File[] files = file.listFiles();
|
||||
if (files == null) files = new File[0];
|
||||
for (File jarFile : files) {
|
||||
if (!jarFile.isFile()) continue;
|
||||
if (!jarFile.getName().endsWith(".jar")) continue;
|
||||
try {
|
||||
entries.addAll(Utils.findAndParseAccessWideners(jarFile.toPath()));
|
||||
} catch (IOException e) {
|
||||
LOG.warning("Failed to parse access wideners from " + jarFile.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
LOG.info("[AccessWidener] Loaded " + entries.size() + " access wideners.");
|
||||
|
||||
inst.addTransformer(new WideningTransformer(entries), false);
|
||||
LOG.info("[AccessWidener] Agent ready.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user