package org.hotswap.agent.plugin.proxy;
import java.lang.instrument.ClassDefinition;
import java.lang.instrument.Instrumentation;
import org.hotswap.agent.annotation.Init;
/**
* Schedules a new redefiniton event for MultistepProxyTransformer
*
* @author Erki Ehtla
*/
public final class RedefinitionScheduler implements Runnable {
private MultistepProxyTransformer transformer;
@Init
private static Instrumentation instrumentation;
public RedefinitionScheduler(MultistepProxyTransformer transformer) {
this.transformer = transformer;
}
@Override
public void run() {
try {
instrumentation.redefineClasses(new ClassDefinition(transformer.getClassBeingRedefined(), transformer
.getClassfileBuffer()));
} catch (Throwable t) {
transformer.removeClassState();
throw new RuntimeException(t);
}
}
public static void schedule(MultistepProxyTransformer multistepProxyTransformer) {
new Thread(new RedefinitionScheduler(multistepProxyTransformer)).start();
}
}