dump(name + "_before", classBytes.get(name)); ClassReader cr = new ClassReader(classBytes.get(name)); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
dump(name + "_before", classBytes.get(name)); ClassReader cr = new ClassReader(classBytes.get(name)); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = new ClassVisitor(Opcodes.ASM4, cw) {
@Override public byte[] transform(ClassLoader loader, final String cname, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (!hasSubclassChecks || classBeingRedefined != null || isBTraceClass(cname) || isSensitiveClass(cname)) { return null; } if (!skipRetransforms) { BTraceLogger.debugPrint("injecting <clinit> for " + cname); // NOI18N ClassReader cr = new ClassReader(classfileBuffer); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES); ClinitInjector injector = new ClinitInjector(cw, className, cname); InstrumentUtils.accept(cr, injector); if (injector.isTransformed()) { byte[] instrumentedCode = cw.toByteArray(); BTraceLogger.dumpClass(cname + "_clinit", instrumentedCode); // NOI18N return instrumentedCode; } } else { BTraceLogger.debugPrint("client " + className + ": skipping transform for " + cname); // NOI18N } return null; } };
@Override public byte[] transform(ClassLoader loader, final String cname, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { if (!hasSubclassChecks || classBeingRedefined != null || isBTraceClass(cname) || isSensitiveClass(cname)) { return null; } if (!skipRetransforms) { BTraceLogger.debugPrint("injecting <clinit> for " + cname); // NOI18N ClassReader cr = new ClassReader(classfileBuffer); ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_FRAMES); ClinitInjector injector = new ClinitInjector(cw, className, cname); InstrumentUtils.accept(cr, injector); if (injector.isTransformed()) { byte[] instrumentedCode = cw.toByteArray(); BTraceLogger.dumpClass(cname + "_clinit", instrumentedCode); // NOI18N return instrumentedCode; } } else { BTraceLogger.debugPrint("client " + className + ": skipping transform for " + cname); // NOI18N } return null; } };