Search in sources :

Example 81 with ClassFileTransformer

use of java.lang.instrument.ClassFileTransformer in project reactor-core by reactor.

the class ReactorDebugAgent method instrument.

private static void instrument(Instrumentation instrumentation) {
    ClassFileTransformer transformer = new ClassFileTransformer() {

        @Override
        public byte[] transform(ClassLoader loader, String className, Class<?> clazz, ProtectionDomain protectionDomain, byte[] bytes) {
            if (loader == null) {
                return null;
            }
            if (className == null || className.startsWith("java/") || className.startsWith("jdk/") || className.startsWith("sun/") || className.startsWith("com/sun/") || className.startsWith("reactor/core/")) {
                return null;
            }
            if (clazz != null && (clazz.isPrimitive() || clazz.isArray() || clazz.isAnnotation() || clazz.isSynthetic())) {
                return null;
            }
            ClassReader cr = new ClassReader(bytes);
            ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);
            AtomicBoolean changed = new AtomicBoolean();
            ClassVisitor classVisitor = new ReactorDebugClassVisitor(cw, changed);
            try {
                cr.accept(classVisitor, 0);
            } catch (Throwable e) {
                e.printStackTrace();
                throw e;
            }
            if (!changed.get()) {
                return null;
            }
            return cw.toByteArray();
        }
    };
    instrumentation.addTransformer(transformer, true);
}
Also used : ProtectionDomain(java.security.ProtectionDomain) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ClassFileTransformer(java.lang.instrument.ClassFileTransformer) ClassReader(net.bytebuddy.jar.asm.ClassReader) ClassVisitor(net.bytebuddy.jar.asm.ClassVisitor) ClassWriter(net.bytebuddy.jar.asm.ClassWriter)

Aggregations

ClassFileTransformer (java.lang.instrument.ClassFileTransformer)81 Test (org.junit.Test)40 Instrumentation (java.lang.instrument.Instrumentation)37 IllegalClassFormatException (java.lang.instrument.IllegalClassFormatException)17 ProtectionDomain (java.security.ProtectionDomain)12 ByteArrayClassLoader (net.bytebuddy.dynamic.loading.ByteArrayClassLoader)9 Callable (java.util.concurrent.Callable)7 MatchableClassFileTransformer (com.navercorp.pinpoint.profiler.plugin.MatchableClassFileTransformer)6 SimpleType (net.bytebuddy.test.packaging.SimpleType)6 ArrayList (java.util.ArrayList)5 ByteBuddy (net.bytebuddy.ByteBuddy)5 IOException (java.io.IOException)4 URLClassLoader (java.net.URLClassLoader)4 ByteArrayInputStream (java.io.ByteArrayInputStream)3 ByteArrayOutputStream (java.io.ByteArrayOutputStream)3 InputStream (java.io.InputStream)3 URL (java.net.URL)3 CodeSource (java.security.CodeSource)3 UnmodifiableClassException (java.lang.instrument.UnmodifiableClassException)2 Certificate (java.security.cert.Certificate)2