Example usage for org.objectweb.asm Opcodes ASM6

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

Introduction

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

Prototype

int ASM6

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

Click Source Link

Usage

From source file:org.diorite.inject.controller.Transformer.java

License:Open Source License

Transformer(byte[] bytecode, ControllerClassData classData) {
    this.classData = classData;
    this.classNode = new ClassNode(Opcodes.ASM6);
    ClassReader cr = new ClassReader(bytecode);
    cr.accept(this.classNode, 0);
}

From source file:org.glassfish.rmic.asm.AsmClassFactory.java

License:Open Source License

/**
 * Returns the latest API supported by the active version of ASM.
 * @return an integer value//  www.  j a  v a  2  s .c o  m
 */
static int getLatestVersion() {
    try {
        int latest = 0;
        for (Field field : Opcodes.class.getDeclaredFields()) {
            if (field.getName().startsWith("ASM") && field.getType().equals(int.class)) {
                latest = Math.max(latest, field.getInt(Opcodes.class));
            }
        }
        return latest;
    } catch (IllegalAccessException e) {
        return Opcodes.ASM6;
    }
}

From source file:org.glassfish.rmic.asm.AsmClassFactoryTest.java

License:Open Source License

@Test
public void canRetrieveLatestAsmVersion() {
    assertThat(AsmClassFactory.getLatestVersion(), equalTo(Opcodes.ASM6));
}

From source file:org.h2.test.unit.TestKeywords.java

License:Mozilla Public License

@Override
public void test() throws Exception {
    final HashSet<String> set = new HashSet<>();
    ClassReader r = new ClassReader(Parser.class.getResourceAsStream("Parser.class"));
    r.accept(new ClassVisitor(Opcodes.ASM6) {
        @Override//from  ww w.j  a v  a 2  s  .co  m
        public FieldVisitor visitField(int access, String name, String descriptor, String signature,
                Object value) {
            add(set, value);
            return null;
        }

        @Override
        public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
                String[] exceptions) {
            return new MethodVisitor(Opcodes.ASM6) {
                @Override
                public void visitLdcInsn(Object value) {
                    add(set, value);
                }
            };
        }

        void add(HashSet<String> set, Object value) {
            if (!(value instanceof String)) {
                return;
            }
            String s = (String) value;
            int l = s.length();
            if (l == 0 || ParserUtil.getSaveTokenType(s, false, 0, l, true) != ParserUtil.IDENTIFIER) {
                return;
            }
            for (int i = 0; i < l; i++) {
                char ch = s.charAt(i);
                if ((ch < 'A' || ch > 'Z') && ch != '_') {
                    return;
                }
            }
            set.add(s);
        }
    }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
    try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:keywords")) {
        Statement stat = conn.createStatement();
        for (String s : set) {
            // _ROWID_ is a special virtual column
            String column = s.equals("_ROWID_") ? "C" : s;
            try {
                stat.execute("CREATE TABLE " + s + '(' + column + " INT)");
                stat.execute("INSERT INTO " + s + '(' + column + ") VALUES (10)");
                try (ResultSet rs = stat.executeQuery("SELECT " + column + " FROM " + s)) {
                    assertTrue(rs.next());
                    assertEquals(10, rs.getInt(1));
                    assertFalse(rs.next());
                }
            } catch (Throwable t) {
                throw new AssertionError(s + " cannot be used as identifier.", t);
            }
        }
    }
}

From source file:org.jboss.as.hibernate.Hibernate51CompatibilityTransformer.java

License:Open Source License

@Override
public byte[] transform(final ClassLoader loader, final String className, final Class<?> classBeingRedefined,
        final ProtectionDomain protectionDomain, final byte[] classfileBuffer) {
    logger.debugf("Hibernate51CompatibilityTransformer transforming deployment class '%s' from '%s'", className,
            getModuleName(loader));/*  w  w  w.  j  a v  a2s.co  m*/

    final Set<String> parentClassesAndInterfaces = new HashSet<>();
    collectClassesAndInterfaces(parentClassesAndInterfaces, loader, className);
    logger.tracef("Class %s extends or implements %s", className, parentClassesAndInterfaces);

    final TransformedState transformedState = new TransformedState();
    final ClassReader classReader = new ClassReader(classfileBuffer);
    final ClassWriter classWriter = new ClassWriter(classReader, 0);
    ClassVisitor traceClassVisitor = classWriter;
    PrintWriter tracePrintWriter = null;
    try {
        if (showTransformedClassFolder != null) {
            tracePrintWriter = new PrintWriter(
                    new File(showTransformedClassFolder, className.replace('/', '_') + ".asm"));
            traceClassVisitor = new TraceClassVisitor(classWriter, tracePrintWriter);
        }
    } catch (IOException ignored) {

    }
    try {
        classReader.accept(new ClassVisitor(useASMExperimental ? Opcodes.ASM7_EXPERIMENTAL : Opcodes.ASM6,
                traceClassVisitor) {

            // clear transformed state at start of each class visit
            @Override
            public void visit(int version, int access, String name, String signature, String superName,
                    String[] interfaces) {
                // clear per class state
                transformedState.clear();
                super.visit(version, access, name, signature, superName, interfaces);
            }

            // check if class has already been transformed
            @Override
            public FieldVisitor visitField(int access, String name, String desc, String signature,
                    Object value) {
                // check if class has already been modified
                if (markerAlreadyTransformed.equals(name) && desc.equals("Z")) {
                    transformedState.setAlreadyTransformed(true);
                }
                return super.visitField(access, name, desc, signature, value);
            }

            // mark class as transformed (only if class transformations were made)
            @Override
            public void visitEnd() {
                if (transformedState.transformationsMade()) {
                    cv.visitField(ACC_PUBLIC + ACC_STATIC, markerAlreadyTransformed, "Z", null, null)
                            .visitEnd();
                }
                super.visitEnd();
            }

            @Override
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {

                // Handle changing SessionImplementor parameter to SharedSessionContractImplementor
                boolean rewriteSessionImplementor = false;
                final String descOrig = desc;

                logger.tracef("method %s, description %s, signature %s", name, desc, signature);
                if (parentClassesAndInterfaces.contains("org/hibernate/usertype/UserType")) {
                    if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeSet")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/usertype/CompositeUserType")) {
                    if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeSet")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("assemble")
                            && "(Ljava/io/Serializable;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("disassemble")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/io/Serializable;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("replace")
                            && "(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }
                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/usertype/UserCollectionType")) {
                    if (name.equals("instantiate")
                            && "(Lorg/hibernate/engine/spi/SessionImplementor;Lorg/hibernate/persister/collection/CollectionPersister;)Lorg/hibernate/collection/spi/PersistentCollection;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("replaceElements")
                            && "(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/persister/collection/CollectionPersister;Ljava/lang/Object;Ljava/util/Map;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("wrap")
                            && "(Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Lorg/hibernate/collection/spi/PersistentCollection;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/usertype/UserVersionType")) {
                    if (name.equals("seed")
                            && "(Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("next")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/type/Type")) {
                    if (name.equals("assemble")
                            && "(Ljava/io/Serializable;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("disassemble")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/io/Serializable;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("beforeAssemble")
                            && "(Ljava/io/Serializable;Lorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("hydrate")
                            && "(Ljava/sql/ResultSet;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("isDirty")
                            && "(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;)Z"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("isDirty")
                            && "(Ljava/lang/Object;Ljava/lang/Object;[ZLorg/hibernate/engine/spi/SessionImplementor;)Z"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("isModified")
                            && "(Ljava/lang/Object;Ljava/lang/Object;[ZLorg/hibernate/engine/spi/SessionImplementor;)Z"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeSet")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;I[ZLorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeSet")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("replace")
                            && "(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("replace")
                            && "(Ljava/lang/Object;Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;Ljava/util/Map;Lorg/hibernate/type/ForeignKeyDirection;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("resolve")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("resolve")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;Ljava/lang/Boolean;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("semiResolve")
                            && "(Ljava/lang/Object;Lorg/hibernate/engine/spi/SessionImplementor;Ljava/lang/Object;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/type/SingleColumnType")) {
                    if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("get")
                            && "(Ljava/sql/ResultSet;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("set")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/type/AbstractStandardBasicType")) {
                    if (name.equals("get")
                            && "(Ljava/sql/ResultSet;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("nullSafeGet")
                            && "(Ljava/sql/ResultSet;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)Ljava/lang/Object;"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("set")
                            && "(Ljava/sql/PreparedStatement;Ljava/lang/Object;ILorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces
                        .contains("org/hibernate/type/ProcedureParameterExtractionAware")) {
                    if (name.equals("extract") && (desc.startsWith(
                            "(Ljava/sql/CallableStatement;ILorg/hibernate/engine/spi/SessionImplementor;)")
                            || desc.startsWith(
                                    "(Ljava/sql/CallableStatement;[Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)"))) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/type/ProcedureParameterNamedBinder")) {
                    if (name.equals("nullSafeSet")
                            && "(Ljava/sql/CallableStatement;Ljava/lang/Object;Ljava/lang/String;Lorg/hibernate/engine/spi/SessionImplementor;)V"
                                    .equals(desc)) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/type/VersionType")) {
                    if (name.equals("seed")
                            && desc.startsWith("(Lorg/hibernate/engine/spi/SessionImplementor;)")) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("next")
                            && desc.contains("Lorg/hibernate/engine/spi/SessionImplementor;")) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (parentClassesAndInterfaces.contains("org/hibernate/collection/spi/PersistentCollection")) {
                    if (name.equals("unsetSession")
                            && desc.equals("(Lorg/hibernate/engine/spi/SessionImplementor;)Z")) {
                        desc = replaceSessionImplementor(desc);
                    } else if (name.equals("setCurrentSession")
                            && desc.equals("(Lorg/hibernate/engine/spi/SessionImplementor;)Z")) {
                        desc = replaceSessionImplementor(desc);
                    }

                    rewriteSessionImplementor = true;
                }

                if (rewriteSessionImplementor && name.equals("<init>")) {
                    // update constructor methods to use SharedSessionContractImplementor instead of SessionImplementor
                    desc = replaceSessionImplementor(desc);
                }

                if (descOrig != desc) { // if we are changing from type SessionImplementor to SharedSessionContractImplementor
                    // mark the class as transformed
                    transformedState.setClassTransformed(true);
                }
                return new MethodAdapter(rewriteSessionImplementor, Opcodes.ASM6,
                        super.visitMethod(access, name, desc, signature, exceptions), getModuleName(loader),
                        className, transformedState);
            }
        }, 0);
        if (!transformedState.transformationsMade()) {
            // no change was actually made, indicate so by returning null
            return null;
        }
        return classWriter.toByteArray();
    } finally {
        if (tracePrintWriter != null) {
            tracePrintWriter.close();
        }
    }
}

From source file:org.jboss.as.hibernate.Hibernate51CompatibilityTransformer.java

License:Open Source License

private void collectClassesAndInterfaces(Set<String> classesAndInterfaces, ClassLoader classLoader,
        String className) {/*w  w  w.  j ava 2  s .  c  o m*/
    if (className == null || "java/lang/Object".equals(className)) {
        return;
    }

    try (InputStream is = classLoader.getResourceAsStream(className.replace('.', '/') + ".class")) {
        ClassReader classReader = new ClassReader(is);
        classReader.accept(new ClassVisitor(useASMExperimental ? Opcodes.ASM7_EXPERIMENTAL : Opcodes.ASM6) {

            @Override
            public void visit(int version, int access, String name, String signature, String superName,
                    String[] interfaces) {
                if (interfaces != null) {
                    for (String interfaceName : interfaces) {
                        classesAndInterfaces.add(interfaceName);
                        collectClassesAndInterfaces(classesAndInterfaces, classLoader, interfaceName);
                    }
                }

                classesAndInterfaces.add(superName);
                collectClassesAndInterfaces(classesAndInterfaces, classLoader, superName);
            }

            @Override
            public void visitInnerClass(String name, String outerName, String innerName, int access) {
                if (innerName != null) {
                    classesAndInterfaces.add(innerName);
                }
            }

        }, 0);
    } catch (IOException e) {
        logger.warn("Unable to open class file %1$s", className, e);
    }
}

From source file:org.moditect.internal.analyzer.ServiceLoaderUseScanner.java

License:Apache License

private Set<String> getUsedServices(JarFile jarFile, JarEntry je) {
    Set<String> usedServices = new HashSet<>();

    try (InputStream classFile = jarFile.getInputStream(je)) {
        new ClassReader(classFile).accept(new ClassVisitor(Opcodes.ASM6) {

            @Override/*from w  w  w . ja  va  2 s .c  om*/
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {

                return new MethodVisitor(Opcodes.ASM6) {

                    private Type lastType;

                    @Override
                    public void visitMethodInsn(int opcode, String owner, String name, String desc,
                            boolean itf) {
                        if (owner.equals("java/util/ServiceLoader") && name.equals("load")) {
                            if (lastType == null) {
                                // TODO Log class/method
                                log.warn(
                                        "Cannot derive uses clause from service loader invocation with non constant class literal");
                            } else {
                                usedServices.add(lastType.getClassName());
                            }
                        }
                    }

                    @Override
                    public void visitLdcInsn(Object cst) {
                        if (cst instanceof Type) {
                            lastType = (Type) cst;
                        }
                    };
                };
            }
        }, 0);
    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    return usedServices;
}

From source file:org.pitest.mutationtest.build.intercept.javafeatures.TryWithResourcesMethodVisitor.java

License:Apache License

/**
 * @param context//from   www.  j  a  v a 2 s  .  c  o m
 *          to store detected line numbers
 */
TryWithResourcesMethodVisitor(final Set<Integer> lines) {
    super(Opcodes.ASM6);
    this.lines = lines;
}

From source file:org.quicktheories.coverage.CoverageClassVisitor.java

License:Apache License

public CoverageClassVisitor(final int classId, final ClassWriter writer) {
    super(Opcodes.ASM6, writer);
    this.classId = classId;
}