You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2016/03/20 19:24:03 UTC
svn commit: r1735890 -
/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
Author: rmannibucau
Date: Sun Mar 20 18:24:03 2016
New Revision: 1735890
URL: http://svn.apache.org/viewvc?rev=1735890&view=rev
Log:
SIRONA-59 avoid to fail cause we try to load the class we are enhancing
Modified:
incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
Modified: incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java?rev=1735890&r1=1735889&r2=1735890&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java (original)
+++ incubator/sirona/trunk/agent/javaagent/src/main/java/org/apache/sirona/javaagent/SironaTransformer.java Sun Mar 20 18:24:03 2016
@@ -82,7 +82,8 @@ public class SironaTransformer implement
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 class SironaTransformer implement
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 @@ public class SironaTransformer implement
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());
}