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());
             }