@OnClassLoadEvent(classNameRegexp = "com.sun.proxy.\\$Proxy.*", events = LoadEvent.REDEFINE, skipSynthetic = false)
public static void transformJavaProxy(final Class<?> classBeingRedefined, final ClassLoader classLoader) {
Object proxyCache = ReflectionHelper.getNoException(null, java.lang.reflect.Proxy.class, "proxyCache");
if (proxyCache != null) {
try {
ReflectionHelper.invoke(proxyCache, proxyCache.getClass().getSuperclass(), "removeAll",
new Class[] { ClassLoader.class }, classLoader);
} catch (IllegalArgumentException e) {
LOGGER.error("Reflection proxy cache flush failed. {}", e.getMessage());
}
}
if (!ClassLoaderHelper.isClassLoderStarted(classLoader)) {
return;
}
final String className = classBeingRedefined.getName();
if (proxyRedefiningMap.contains(className)) {
proxyRedefiningMap.remove(className);
return;
}
proxyRedefiningMap.add(className);
final Map<String, String> signatureMapOrig = ProxyClassSignatureHelper.getNonSyntheticSignatureMap(classBeingRedefined);
reloadFlag = true;
PluginManager.getInstance().getScheduler().scheduleCommand(new ReloadJavaProxyCommand(classLoader, className, signatureMapOrig), 50);
}