SIRONA-59 avoid to fail cause we try to load the class we are enhancing
git-svn-id: https://svn.apache.org/repos/asf/incubator/sirona/trunk@1735890 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java b/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
index e1c0cf0..5784c95 100644
--- a/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
+++ b/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
@@ -82,7 +82,8 @@
protected byte[] doTransform(final String className, final byte[] classfileBuffer) {
try {
final ClassReader reader = new ClassReader(classfileBuffer);
- final ClassWriter writer = new SironaClassWriter(skipTempLoader ? null : tempClassLoaders, reader, ClassWriter.COMPUTE_FRAMES);
+ final ClassWriter writer = new SironaClassWriter(className == null ? null : className.replace('/', '.'),
+ skipTempLoader ? null : tempClassLoaders, reader, ClassWriter.COMPUTE_FRAMES);
final SironaClassVisitor advisor = new SironaClassVisitor(writer, className, classfileBuffer);
reader.accept(advisor, ClassReader.SKIP_FRAMES);
@@ -119,10 +120,13 @@
public static class SironaClassWriter extends ClassWriter {
private final ConcurrentMap<ClassLoader, ClassLoader> tempClassLoaders;
+ private final String currentClass;
- public SironaClassWriter(final ConcurrentMap<ClassLoader, ClassLoader> tempClassLoaders,
+ public SironaClassWriter(final String currentClass,
+ final ConcurrentMap<ClassLoader, ClassLoader> tempClassLoaders,
final ClassReader classReader, final int flags) {
super(classReader, flags);
+ this.currentClass = currentClass;
this.tempClassLoaders = tempClassLoaders;
}
@@ -180,7 +184,7 @@
protected Class<?> findClass(final ClassLoader tccl, final String className)
throws ClassNotFoundException {
try {
- return Class.forName(className, false, tccl);
+ return currentClass.equals(className) ? Object.class : Class.forName(className, false, tccl);
} catch (ClassNotFoundException e) {
return Class.forName(className, false, getClass().getClassLoader());
}