List of usage examples for org.objectweb.asm Opcodes ASM6
int ASM6
To view the source code for org.objectweb.asm Opcodes ASM6.
Click Source Link
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; }