List of usage examples for org.objectweb.asm.util CheckClassAdapter CheckClassAdapter
public CheckClassAdapter(final ClassVisitor classVisitor)
From source file:Test1.java
License:Apache License
private static void implementInterface(ClassNode cn) throws Exception { // MethodNode fromMethod = new MethodNode(ACC_PUBLIC, "fromData", // "(Ljava/io/DataInput;)V", null, new String[] { // "java/io/IOException", // "java/lang/ClassNotFoundException" }); // mv = cw.visitMethod(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V", // null, new String[] { "java/io/IOException" }); MethodNode toMethod = new MethodNode(ACC_PUBLIC, "toData", "(Ljava/io/DataOutput;)V", null, new String[] { "java/io/IOException" }); InsnList instToMethod = toMethod.instructions; for (int i = 0; i < cn.fields.size(); i++) { FieldNode fn = (FieldNode) cn.fields.get(i); toMethod(cn.name, fn, instToMethod); }/*w w w .ja v a 2 s . c o m*/ instToMethod.add(new InsnNode(RETURN)); cn.methods.add(toMethod); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cn.accept(cw); byte[] bt = cw.toByteArray(); ClassReader cr = new ClassReader(bt); CheckClassAdapter ca = new CheckClassAdapter(cw); FileOutputStream fo = new FileOutputStream("d:/x1.log"); PrintWriter pw = new PrintWriter(fo); ca.verify(cr, true, pw); ByteArrayClassLoader bacl = new ByteArrayClassLoader(bt); Class cls = bacl.loadClass("ynd.test.Ac01"); DataSerializable di = (DataSerializable) cls.newInstance(); di.toData(null); }
From source file:boilerplate.processor.BinaryProcessor.java
License:Open Source License
public void processBinary(Binary binary) throws IOException { String type = binary.getClassName(); type = type.replace('.', '/'); byte[] data = binary.loadBytes(); ClassReader reader = new ClassReader(data); ClassWriter writer = new ClassWriter(reader, ClassWriter.COMPUTE_FRAMES); ClassVisitor visitor = writer;//ww w.j a va 2s . c om visitor = new CheckClassAdapter(visitor); // visitor = new TraceClassVisitor(visitor, new // PrintWriter(System.out)); visitor = new ToStringAdapter(logger, type, visitor); visitor = new EqualsAdapter(logger, type, visitor); reader.accept(visitor, 0); data = writer.toByteArray(); binary.saveBytes(data); }
From source file:co.cask.cdap.internal.asm.Debugs.java
License:Apache License
public static void debugByteCode(ClassDefinition classDefinition, PrintWriter writer) { ClassReader reader = new ClassReader(classDefinition.getBytecode()); reader.accept(new CheckClassAdapter(new TraceClassVisitor(writer)), 0); File file = new File("/tmp/" + classDefinition.getInternalName() + ".class"); file.getParentFile().mkdirs();//from w w w .j a v a2 s. c o m writer.println(file); writer.flush(); try { ByteStreams.write(classDefinition.getBytecode(), Files.newOutputStreamSupplier(file)); } catch (IOException e) { e.printStackTrace(); } }
From source file:co.paralleluniverse.fibers.instrument.QuasarInstrumentor.java
License:Open Source License
private byte[] instrumentClass(String className, ClassReader r) { log(LogLevel.INFO, "TRANSFORM: %s %s", className, (db.getClassEntry(className) != null && db.getClassEntry(className).requiresInstrumentation()) ? "request" : ""); final ClassWriter cw = new DBClassWriter(db, r); ClassVisitor cv = (check && EXAMINED_CLASS == null) ? new CheckClassAdapter(cw) : cw; if (EXAMINED_CLASS != null && className.startsWith(EXAMINED_CLASS)) cv = new TraceClassVisitor(cv, new PrintWriter(System.out)); final InstrumentClass ic = new InstrumentClass(cv, db, false); byte[] transformed = null; try {// w w w.j a va 2 s . c o m r.accept(ic, ClassReader.SKIP_FRAMES); transformed = cw.toByteArray(); } catch (Exception e) { if (ic.hasSuspendableMethods()) { error("Unable to instrument class " + className, e); throw e; } else { if (!MethodDatabase.isProblematicClass(className)) log(LogLevel.DEBUG, "Unable to instrument class " + className); return null; } } if (EXAMINED_CLASS != null) { if (className.startsWith(EXAMINED_CLASS)) { try (OutputStream os = new FileOutputStream(className.replace('/', '.') + ".class")) { os.write(transformed); } catch (IOException e) { throw new RuntimeException(e); } } if (check) { ClassReader r2 = new ClassReader(transformed); ClassVisitor cv2 = new CheckClassAdapter(new TraceClassVisitor(null), true); r2.accept(cv2, 0); } } return transformed; }
From source file:com.chiralbehaviors.janus.TestCompositeClassGenerator.java
License:Open Source License
public void testGeneratedBits() { CompositeClassGenerator generator = new CompositeClassGenerator(Composite1.class); byte[] generatedBits = generator.generateClassBits(); assertNotNull(generatedBits);/*w w w . ja va2 s.c om*/ TraceClassVisitor tcv = new TraceClassVisitor(new PrintWriter(System.out)); CheckClassAdapter cv = new CheckClassAdapter(tcv); ClassReader reader = new ClassReader(generatedBits); reader.accept(cv, 0); }
From source file:com.cinnober.msgcodec.blink.BaseByteCodeGenerator.java
License:Open Source License
public byte[] generateClass(Schema schema, int suffix) { if (!schema.isBound()) { throw new IllegalArgumentException("Schema is not bound"); }// w w w .j a v a2 s. co m ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); ClassVisitor cv = classWriter; StringWriter traceString = null; if (log.isLoggable(Level.FINER)) { traceString = new StringWriter(); cv = new TraceClassVisitor(cv, new PrintWriter(traceString)); } cv = new CheckClassAdapter(cv); if (schema.getBinding().getGroupTypeAccessor() == JavaClassGroupTypeAccessor.INSTANCE) { generateCodecJ(cv, schema, suffix); } else { generateCodecG(cv, schema, suffix); } byte[] bytes = classWriter.toByteArray(); if (log.isLoggable(Level.FINE)) { log.log(Level.FINE, "Generated codec class " + GENERATED_CLASS_INAME + suffix + " for schema UID: " + schema.getUID()); if (log.isLoggable(Level.FINER)) { log.finer("Generated code (#" + suffix + "):\n" + traceString.toString()); } if (log.isLoggable(Level.FINEST)) { log.finest("Generated bytecode (#" + suffix + "):\n" + ByteArrays.toHex(bytes, 0, bytes.length, 1, 8, 32)); } } return bytes; }
From source file:com.dragome.callbackevictor.serverside.bytecode.transformation.asm.AsmClassTransformer.java
License:Apache License
private ClassVisitor decorateClassVisitor(ClassVisitor visitor, final boolean check, final PrintStream dumpStream) { if (check) {/*from w w w.j a v a 2s.c o m*/ visitor = new CheckClassAdapter(visitor); if (null != CHECK_DATA_FLOW) { try { // Currently CheckMethodAdapter throws error, so suppress flow checks CHECK_DATA_FLOW.set(visitor, Boolean.FALSE); } catch (final IllegalAccessException ex) { throw new RuntimeException(ex); } } } if (null != dumpStream) { visitor = new TraceClassVisitor(visitor, new PrintWriter(dumpStream)); } return visitor; }
From source file:com.enea.jcarder.agent.instrument.ClassTransformer.java
License:GNU General Public License
private byte[] instrument(final ClassLoader classLoader, final byte[] originalClassBuffer, final String className) { if (className.startsWith("com.enea.jcarder") && !className.startsWith("com.enea.jcarder.testclasses")) { return null; // Don't instrument ourself. }/*from w ww .j a v a 2 s. c om*/ final String reason = isInstrumentable(className); if (reason != null) { mLogger.finest("Won't instrument class " + className + ": " + reason); return null; } if (!isCompatibleClassLoader(classLoader)) { mLogger.finest( "Can't instrument class " + className + " loaded with " + getClassLoaderName(classLoader)); return null; } final ClassReader reader = new ClassReader(originalClassBuffer); final ClassWriter writer = new ClassWriter(true); ClassVisitor visitor = writer; if (mInstrumentConfig.getValidateTransfomedClasses()) { visitor = new CheckClassAdapter(visitor); } visitor = new ClassAdapter(mLogger, visitor, className); reader.accept(visitor, false); byte[] instrumentedClassfileBuffer = writer.toByteArray(); if (mInstrumentConfig.getDumpClassFiles()) { dumpClassToFile(originalClassBuffer, mOriginalClassesDir, className); dumpClassToFile(instrumentedClassfileBuffer, mInstrumentedClassesDir, className); } return instrumentedClassfileBuffer; }
From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassInstrumentor.java
License:Open Source License
/** * External entry point for ScriptClassInfoCollector if run from the command line * * @param args arguments - one argument is needed, the name of the class to collect info from * * @throws IOException if there are problems reading class *///from w w w .j a v a 2s . c o m public static void main(final String[] args) throws IOException { if (args.length != 1) { System.err.println("Usage: " + ScriptClassInstrumentor.class.getName() + " <class>"); System.exit(1); } final String fileName = args[0].replace('.', '/') + ".class"; final ScriptClassInfo sci = ClassGenerator.getScriptClassInfo(fileName); if (sci == null) { System.err.println("No @ScriptClass in " + fileName); System.exit(2); throw new AssertionError(); //guard against warning that sci is null below } try { sci.verify(); } catch (final Exception e) { System.err.println(e.getMessage()); System.exit(3); } final ClassWriter writer = ClassGenerator.makeClassWriter(); try (final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName))) { final ClassReader reader = new ClassReader(bis); final CheckClassAdapter checker = new CheckClassAdapter(writer); final ScriptClassInstrumentor instr = new ScriptClassInstrumentor(checker, sci); reader.accept(instr, 0); } try (FileOutputStream fos = new FileOutputStream(fileName)) { fos.write(writer.toByteArray()); } }
From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassJavaInstrumentor.java
License:Open Source License
public static String getString(final String fileName) throws IOException { final ScriptClassInfo sci = ClassJavaGenerator.getScriptClassInfo(fileName); if (sci == null) { System.err.println("No @ScriptClass in " + fileName); System.exit(2);//from w w w.ja v a2 s . co m throw new AssertionError(); //guard against warning that sci is null below } try { sci.verify(); } catch (final Exception e) { System.err.println(e.getMessage()); System.exit(3); } final ClassWriter writer = ClassJavaGenerator.makeClassWriter(); try (final BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName))) { final ClassReader reader = new ClassReader(bis); final CheckClassAdapter checker = new CheckClassAdapter(writer); final ScriptClassJavaInstrumentor instr = new ScriptClassJavaInstrumentor(checker, sci); reader.accept(instr, 0); } String name = sci.getJavaName(); name = name.substring(name.lastIndexOf('/') + 1); return ClassJavaGenerator.getCode(name); }