Example usage for org.objectweb.asm Opcodes ASM5

List of usage examples for org.objectweb.asm Opcodes ASM5

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes ASM5.

Prototype

int ASM5

To view the source code for org.objectweb.asm Opcodes ASM5.

Click Source Link

Usage

From source file:com.geeksaga.light.profiler.instrument.transformer.EntryPointTransformer.java

License:Apache License

private byte[] transform(final ClassLoader classLoader, final String className, byte[] classfileBuffer) {
    final MethodSelector methodSelector = getMethodSelectorOrNull(className);

    if (methodSelector != null) {
        ClassNodeWrapper classNodeWrapper = new ClassNodeWrapper();
        ClassReader reader = new ClassReaderWrapper(classfileBuffer);
        reader.accept(new ClassVisitor(Opcodes.ASM5, classNodeWrapper) {
            @Override// www .  j  ava2s . c om
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);

                if (!name.startsWith("<") && methodSelector.isSelected(name, desc)) {
                    logger.debug("Transform => {}.{}{}", className, name, desc);

                    return new EntryPointAdapter(access, name, desc, mv, ASMUtil.isStatic(access));
                }

                return mv;
            }
        }, ClassReader.EXPAND_FRAMES);

        return ASMUtil.toBytes(classNodeWrapper);
    }

    return null;
}

From source file:com.geeksaga.light.profiler.instrument.transformer.EntryPointTransformer.java

License:Apache License

private ClassNodeWrapper transform(final ClassLoader classLoader, byte[] classfileBuffer,
        final ClassNodeWrapper classNodeWrapper) {
    final MethodSelector methodSelector = getMethodSelectorOrNull(classNodeWrapper.getClassName());

    if (methodSelector != null) {
        ClassNodeWrapper newClassNodeWrapper = new ClassNodeWrapper();
        classNodeWrapper.accept(new ClassVisitor(Opcodes.ASM5, newClassNodeWrapper) {
            @Override/*from w  w  w .  j av a  2  s. co  m*/
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);

                if (!name.startsWith("<") && methodSelector.isSelected(name, desc)) {
                    logger.debug("Transform => {}.{}{}", classNodeWrapper.getClassName(), name, desc);

                    return new EntryPointAdapter(access, name, desc, mv, ASMUtil.isStatic(access));
                }

                return mv;
            }
        });

        byte[] hookedClassFileBuffer = ASMUtil.toBytes(newClassNodeWrapper);

        ClassFileDumper.dump(classNodeWrapper.getClassName(), classfileBuffer, hookedClassFileBuffer);

        return newClassNodeWrapper;
    }

    return classNodeWrapper;
}

From source file:com.geeksaga.light.profiler.instrument.transformer.MethodParameterTransformer.java

License:Apache License

@Override
public byte[] transform(ClassLoader classLoader, String className, Class<?> classBeingRedefined,
        ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
    if (filter.allow(classLoader, className)) {
        logger.info("Transform => " + className);

        ClassNodeWrapper classNodeWrapper = new ClassNodeWrapper();
        ClassReader reader = new ClassReaderWrapper(classfileBuffer);
        reader.accept(new ClassVisitor(Opcodes.ASM5, classNodeWrapper) {
            @Override//from   w ww  .ja  va 2s.c om
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                MethodVisitor methodVisitor = cv.visitMethod(access, name, desc, signature, exceptions);

                if (name.contains("<")) {
                    return methodVisitor;
                }

                return new MethodParameterVisitor(access, desc, methodVisitor, ASMUtil.isStatic(access));
            }
        }, ClassReader.EXPAND_FRAMES);

        if (classNodeWrapper.isInterface()) {
            return classfileBuffer;
        }

        byte[] bytes = ASMUtil.toBytes(classNodeWrapper);

        save(System.getProperty("user.dir") + File.separator + "Main.class", bytes);

        return bytes;
    }

    return classfileBuffer;
}

From source file:com.geeksaga.light.profiler.instrument.transformer.MethodReturnTransformer.java

License:Apache License

@Override
public byte[] transform(ClassLoader classLoader, String className, Class<?> classBeingRedefined,
        ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
    if (filter.allow(classLoader, className)) {
        logger.info("Transform => " + className);

        try {/*www. j a  v  a  2  s  . c  o  m*/
            ClassNodeWrapper classNodeWrapper = new ClassNodeWrapper();
            ClassReader reader = new ClassReaderWrapper(classfileBuffer);
            reader.accept(new ClassVisitor(Opcodes.ASM5, classNodeWrapper) {
                @Override
                public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                        String[] exceptions) {
                    MethodVisitor methodVisitor = cv.visitMethod(access, name, desc, signature, exceptions);

                    if (name.contains("<")) {
                        return methodVisitor;
                    }

                    return new MethodReturnVisitor(access, desc, methodVisitor, ASMUtil.isStatic(access));
                }
            }, ClassReader.EXPAND_FRAMES);

            if (classNodeWrapper.isInterface()) {
                return classfileBuffer;
            }

            return ASMUtil.toBytes(classNodeWrapper);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return classfileBuffer;
}

From source file:com.geeksaga.light.profiler.instrument.transformer.MethodTransformer.java

License:Apache License

@Override
public byte[] transform(ClassLoader classLoader, String className, Class<?> classBeingRedefined,
        ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
    if (filter.allow(classLoader, className)) {
        ClassNodeWrapper classNodeWrapper = new ClassNodeWrapper();
        ClassReader reader = new ClassReaderWrapper(classfileBuffer);
        reader.accept(new ClassVisitor(Opcodes.ASM5, classNodeWrapper) {
            @Override//  w  w  w . j  ava2  s . c  o m
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                MethodVisitor mv = cv.visitMethod(access, name, desc, signature, exceptions);
                return new MethodAdapter(access, name, desc, mv);
            }
        }, ClassReader.EXPAND_FRAMES);

        if (classNodeWrapper.isInterface()) {
            return classfileBuffer;
        }

        return ASMUtil.toBytes(classNodeWrapper);
    }

    return classfileBuffer;
}

From source file:com.geeksaga.light.profiler.util.ASMUtil.java

License:Apache License

private static ClassVisitor useJSRInlinerAdapter(ClassVisitor visitor) {
    return new ClassVisitor(Opcodes.ASM5, visitor) {
        @Override//from w  w w .  j  a v  a 2 s .  co  m
        public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                String[] exceptions) {
            return new JSRInlinerAdapter(super.visitMethod(access, name, desc, signature, exceptions), access,
                    name, desc, signature, exceptions);
        }
    };
}

From source file:com.github.anba.es6draft.compiler.assembler.SimpleTypeTextifier.java

License:Open Source License

public SimpleTypeTextifier() {
    super(Opcodes.ASM5);
}

From source file:com.github.antag99.retinazer.weaver.Weaver.java

License:Open Source License

/**
 * Returns a class visitor that creates the given class.
 *
 * @param internalName/*from ww w .  j a v  a2  s.c o m*/
 *            the internal name of the class.
 * @return
 *         the class visitor.
 */
ClassVisitor createClass(final String internalName) {
    return new ClassVisitor(Opcodes.ASM5, new ClassWriter(ClassWriter.COMPUTE_FRAMES)) {
        @Override
        public void visitEnd() {
            super.visitEnd();

            handler.saveClass(internalName, ((ClassWriter) cv).toByteArray());
        }
    };
}

From source file:com.github.fge.grappa.transform.AsmTestUtils.java

License:Apache License

public static String getClassDump(byte[] code) {
    StringWriter stringWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(stringWriter);
    TraceClassVisitor traceClassVisitor = new TraceClassVisitor(printWriter);
    ClassVisitor checkClassAdapter = new ClassVisitor(Opcodes.ASM5, traceClassVisitor) {
    };//from   w ww  . j a  v a 2 s  . com
    //ClassAdapter checkClassAdapter = new CheckClassAdapter(traceClassVisitor);
    ClassReader classReader;
    classReader = new ClassReader(code);
    classReader.accept(checkClassAdapter, 0);
    printWriter.flush();
    return stringWriter.toString();
}

From source file:com.github.fge.grappa.transform.base.ParserClassNode.java

License:Open Source License

public ParserClassNode(Class<?> parentClass) {
    super(Opcodes.ASM5);
    this.parentClass = Objects.requireNonNull(parentClass);
    parentType = Type.getType(parentClass);
}