List of usage examples for org.objectweb.asm ClassVisitor ClassVisitor
public ClassVisitor(final int api, final ClassVisitor classVisitor)
From source file:lombok.patcher.scripts.AddFieldScript.java
License:Open Source License
@Override protected ClassVisitor createClassVisitor(ClassWriter writer, String classSpec, TransplantMapper transplantMapper) { return new ClassVisitor(Opcodes.ASM4, writer) { private boolean alreadyAdded = false; @Override/*from ww w . j a va 2 s. c o m*/ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { if (name != null && name.equals(fieldName)) alreadyAdded = true; return super.visitField(access, name, desc, signature, value); } @Override public void visitEnd() { if (!alreadyAdded) { FieldVisitor fv = cv.visitField(accessFlags, fieldName, fieldType, null, value); fv.visitEnd(); } super.visitEnd(); } }; }
From source file:net.sf.cglib.core.ClassNameReader.java
License:Apache License
public static String[] getClassInfo(ClassReader r) { final List array = new ArrayList(); try {/*from w w w . j a v a2 s.co m*/ r.accept(new ClassVisitor(Opcodes.ASM5, null) { public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { array.add(name.replace('/', '.')); if (superName != null) { array.add(superName.replace('/', '.')); } for (int i = 0; i < interfaces.length; i++) { array.add(interfaces[i].replace('/', '.')); } throw EARLY_EXIT; } }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES); } catch (EarlyExitException e) { } return (String[]) array.toArray(new String[] {}); }
From source file:org.apache.commons.weaver.privilizer.Privilizer.java
License:Apache License
void verify(final String className, final byte[] bytecode) { final ClassReader reader = new ClassReader(bytecode); env.debug("Verifying bytecode for class %s", className); final StringWriter w = new StringWriter(); //NOPMD CheckClassAdapter.verify(reader, env.classLoader, false, new PrintWriter(w)); final String error = w.toString(); if (!error.isEmpty()) { env.error(error);//from ww w . ja v a 2 s . c om final StringWriter trace = new StringWriter(); reader.accept(new TraceClassVisitor(new PrintWriter(trace)), ClassReader.SKIP_DEBUG); env.debug(trace.toString()); throw new IllegalStateException(); } Validate.validState(StringUtils.isBlank(error), error); final ClassVisitor checkInnerClasses = new ClassVisitor(ASM_VERSION, null) { final Set<String> innerNames = new HashSet<>(); @Override public void visitInnerClass(final String name, final String outerName, final String innerName, final int access) { super.visitInnerClass(name, outerName, innerName, access); Validate.validState(innerNames.add(innerName), "%s already defined", innerName); } }; reader.accept(checkInnerClasses, ClassReader.SKIP_CODE); }
From source file:org.codehaus.groovy.runtime.callsite.GroovySunClassLoader.java
License:Apache License
private void loadAbstract() throws IOException { try (final InputStream asStream = GroovySunClassLoader.class.getClassLoader() .getResourceAsStream(resName("org.codehaus.groovy.runtime.callsite.AbstractCallSite"))) { ClassReader reader = new ClassReader(asStream); final ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); final ClassVisitor cv = new ClassVisitor(CompilerConfiguration.ASM_API_VERSION, cw) { public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(version, access, name, signature, "sun/reflect/GroovyMagic", interfaces); }//from ww w. j ava 2s . co m }; reader.accept(cv, ClassWriter.COMPUTE_MAXS); define(cw.toByteArray(), "org.codehaus.groovy.runtime.callsite.AbstractCallSite"); } }
From source file:org.eclipse.andmore.internal.resources.manager.ProjectClassLoader.java
License:Open Source License
/** * Rewrites the given class to the given target class file version. *//*from w w w .j a va 2 s. co m*/ public static byte[] rewriteClass(byte[] classData, final int maxVersion, final int minVersion) { assert maxVersion >= minVersion; ClassWriter classWriter = new ClassWriter(0); ClassVisitor classVisitor = new ClassVisitor(Opcodes.ASM4, classWriter) { @Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { if (version > maxVersion) { version = maxVersion; } if (version < minVersion) { version = minVersion; } super.visit(version, access, name, signature, superName, interfaces); } }; ClassReader reader = new ClassReader(classData); reader.accept(classVisitor, 0); return classWriter.toByteArray(); }
From source file:org.fluidity.deployment.maven.ClassReaders.java
License:Apache License
public static ClassWriter makePublic(final String className, final ClassReader reader) throws MojoExecutionException { assert reader != null : className; final ClassWriter writer = new ClassWriter(0); final AtomicBoolean constructorFound = new AtomicBoolean(false); // make class and its default constructor public reader.accept(new ClassVisitor(ASM5, writer) { @Override//from w w w . j a v a2 s .c om public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) { super.visit(version, access & ~ACC_PRIVATE & ~ACC_PROTECTED | ACC_PUBLIC, name, signature, superName, interfaces); } @Override public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) { final boolean defaultConstructor = name.equals(CONSTRUCTOR_METHOD_NAME) && Type.getArgumentTypes(desc).length == 0; if (defaultConstructor) { constructorFound.set(true); } return super.visitMethod( defaultConstructor ? access & ~ACC_PRIVATE & ~ACC_PROTECTED | ACC_PUBLIC : access, name, desc, signature, exceptions); } }, 0); if (!constructorFound.get()) { throw new MojoExecutionException( String.format("Class %s does not have a default constructor", className)); } return writer; }
From source file:org.jacoco.core.instr.ResizeInstructionsTest.java
License:Open Source License
/** * Test of ASM bug/*from ww w . j av a 2s . c o m*/ * <a href="https://gitlab.ow2.org/asm/asm/issues/317792">#317792</a>. */ @Test public void should_not_loose_InnerClasses_attribute() throws Exception { byte[] source = TargetLoader.getClassDataAsBytes(Inner.class); final ClassReader cr = InstrSupport.classReaderFor(source); final ClassWriter cw = new ClassWriter(0); cr.accept(new ClassVisitor(InstrSupport.ASM_API_VERSION, cw) { @Override public void visitEnd() { final MethodVisitor mv = cv.visitMethod(0, "m", "()V", null, null); mv.visitCode(); addCauseOfResizeInstructions(mv); mv.visitInsn(Opcodes.NOP); mv.visitMaxs(2, 1); mv.visitEnd(); super.visitEnd(); } }, 0); source = cw.toByteArray(); final byte[] bytes = instrumenter.instrument(source, ""); final TargetLoader targetLoader = new TargetLoader(); final Class<?> outer = targetLoader.add(ResizeInstructionsTest.class, TargetLoader.getClassDataAsBytes(ResizeInstructionsTest.class)); final Class<?> inner = targetLoader.add(Inner.class, bytes); assertSame(outer, inner.getEnclosingClass()); assertNotNull(inner.getEnclosingClass()); assertSame(outer, inner.getDeclaringClass()); assertNotNull(inner.getDeclaringClass()); }
From source file:org.jacoco.core.runtime.ModifiedSystemClassRuntime.java
License:Open Source License
/** * Adds the static access method and data field to the given class * definition.// w w w. j a va 2 s . c o m * * @param source * class definition source * @param accessFieldName * name of the runtime access field * @return instrumented version with added members */ public static byte[] instrument(final byte[] source, final String accessFieldName) { final ClassReader reader = new ClassReader(source); final ClassWriter writer = new ClassWriter(reader, 0); reader.accept(new ClassVisitor(Opcodes.ASM4, writer) { @Override public void visitEnd() { createDataField(cv, accessFieldName); super.visitEnd(); } }, ClassReader.EXPAND_FRAMES); return writer.toByteArray(); }
From source file:org.jacoco.core.test.validation.FramesTest.java
License:Open Source License
private byte[] calculateFrames(byte[] source) { ClassReader rc = new ClassReader(source); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); // Adjust Version to 1.6 to enable frames: rc.accept(new ClassVisitor(Opcodes.ASM4, cw) { @Override/*from w w w. ja v a 2s . c om*/ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(Opcodes.V1_6, access, name, signature, superName, interfaces); } }, 0); return cw.toByteArray(); }
From source file:org.jacoco.core.test.validation.java5.FramesTest.java
License:Open Source License
private byte[] calculateFrames(byte[] source) { ClassReader rc = InstrSupport.classReaderFor(source); ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); // Adjust Version to 1.6 to enable frames: rc.accept(new ClassVisitor(InstrSupport.ASM_API_VERSION, cw) { @Override/*from w w w. j a va2s . co m*/ public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { super.visit(Opcodes.V1_6, access, name, signature, superName, interfaces); } }, 0); return cw.toByteArray(); }