List of usage examples for org.objectweb.asm ClassVisitor visitOuterClass
public void visitOuterClass(final String owner, final String name, final String descriptor)
From source file:com.google.code.jconts.instrument.gen.StateClassGenerator.java
License:Apache License
public void accept(TransformationContext context) { ClassVisitor cv = context.writer(); final String name = info.stateClassName; cv.visit(Opcodes.V1_6, Opcodes.ACC_FINAL /*| Opcodes.ACC_SYNTHETIC*/, name, null, OBJECT_NAME, null); cv.visitSource(info.ownerSource, null); cv.visitOuterClass(info.owner, null, null); cv.visitField(0/*Opcodes.ACC_SYNTHETIC*/, CONTINUATION_FIELD, CONTINUATION_DESC, 'L' + CONTINUATION_NAME + '<' + info.valueSignature + ">;", null); // Local variables state List<String> names = info.tracker.getFieldNames(); List<Type> types = info.tracker.getFieldTypes(); for (int i = 0; i < names.size(); ++i) { cv.visitField(0/*Opcodes.ACC_SYNTHETIC*/, names.get(i), types.get(i).getDescriptor(), null, null); }/*from ww w . j ava2 s. c om*/ // Return value variable cv.visitField(0/*Opcodes.ACC_SYNTHETIC*/, "result", OBJECT_DESC, null, null); cv.visitField(0/*Opcodes.ACC_SYNTHETIC*/, "exception", THROWABLE_DESC, null, null); // Generate constructor MethodVisitor mv = cv.visitMethod(0, CTOR_NAME, DEFAULT_CTOR_DESC, null, null); mv.visitCode(); Label start = new Label(); Label end = new Label(); mv.visitLabel(start); mv.visitLineNumber(0, start); mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, OBJECT_NAME, CTOR_NAME, DEFAULT_CTOR_DESC); mv.visitInsn(Opcodes.RETURN); mv.visitLabel(end); mv.visitLocalVariable("this", 'L' + name + ';', null, start, end, 0); mv.visitMaxs(1, 1); mv.visitEnd(); cv.visitEnd(); }
From source file:com.google.gwt.dev.shell.rewrite.HostedModeClassRewriter.java
License:Apache License
public byte[] writeJsoIntf(final String className, byte classBytes[]) { String desc = toDescriptor(className); assert (jsoIntfDescs.contains(desc)); assert (jsoSuperDescs.containsKey(desc)); List<String> superDescs = jsoSuperDescs.get(desc); assert (superDescs != null); assert (superDescs.size() > 0); // The ASM model is to chain a bunch of visitors together. ClassWriter writer = new ClassWriter(0); final ClassVisitor v = writer; // v = new CheckClassAdapter(v); // v = new TraceClassVisitor(v, new PrintWriter(System.out)); String[] interfaces;/*from ww w .j av a 2 s. c o m*/ // TODO(bov): something better than linear? if (superDescs.contains("java/lang/Object")) { interfaces = null; } else { interfaces = superDescs.toArray(new String[superDescs.size()]); } v.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC | Opcodes.ACC_INTERFACE, desc, null, "java/lang/Object", interfaces); if (classBytes != null) { // Java7 enforces innerclass/outerclass consistency. In order to fix this, copy from original ClassVisitor cv = new EmptyVisitor() { @Override public void visitInnerClass(String name, String outerName, String innerName, int access) { // copy inner class table from original JSO to synthetic interface v.visitInnerClass(name, outerName, innerName, access); } @Override public void visitOuterClass(String owner, String name, String desc) { // copy outer class table from original JSO to synthetic interface v.visitOuterClass(owner, name, desc); } }; new ClassReader(classBytes).accept(cv, 0); } v.visitEnd(); return writer.toByteArray(); }
From source file:com.googlecode.ddom.weaver.asm.ClassVisitorTee.java
License:Apache License
public void visitOuterClass(String owner, String name, String desc) { for (ClassVisitor visitor : visitors) { visitor.visitOuterClass(owner, name, desc); }//from w w w. j a v a 2 s .c o m }
From source file:kilim.analysis.ClassWeaver.java
License:Open Source License
private void accept(final ClassVisitor cv) { ClassFlow cf = classFlow;//from w w w .j a v a 2s . co m // visits header String[] interfaces = toStringArray(cf.interfaces); cv.visit(cf.version, cf.access, cf.name, cf.signature, cf.superName, interfaces); // visits source if (cf.sourceFile != null || cf.sourceDebug != null) { cv.visitSource(cf.sourceFile, cf.sourceDebug); } // visits outer class if (cf.outerClass != null) { cv.visitOuterClass(cf.outerClass, cf.outerMethod, cf.outerMethodDesc); } // visits attributes and annotations int i, n; AnnotationNode an; n = cf.visibleAnnotations == null ? 0 : cf.visibleAnnotations.size(); for (i = 0; i < n; ++i) { an = (AnnotationNode) cf.visibleAnnotations.get(i); an.accept(cv.visitAnnotation(an.desc, true)); } n = cf.invisibleAnnotations == null ? 0 : cf.invisibleAnnotations.size(); for (i = 0; i < n; ++i) { an = (AnnotationNode) cf.invisibleAnnotations.get(i); an.accept(cv.visitAnnotation(an.desc, false)); } n = cf.attrs == null ? 0 : cf.attrs.size(); for (i = 0; i < n; ++i) { cv.visitAttribute((Attribute) cf.attrs.get(i)); } // visits inner classes for (i = 0; i < cf.innerClasses.size(); ++i) { ((InnerClassNode) cf.innerClasses.get(i)).accept(cv); } // visits fields for (i = 0; i < cf.fields.size(); ++i) { ((FieldNode) cf.fields.get(i)).accept(cv); } /* * Mark this class as "processed" by adding a dummy field, so that * we don't weave an already woven file */ cv.visitField(ACC_PUBLIC | ACC_STATIC | ACC_FINAL, WOVEN_FIELD, "Z", "Z", Boolean.TRUE); // visits methods for (i = 0; i < cf.methods.size(); ++i) { MethodFlow m = (MethodFlow) cf.methods.get(i); if (needsWeaving(m)) { MethodWeaver mw = new MethodWeaver(this, m); mw.accept(cv); mw.makeNotWovenMethod(cv, m); } else { m.accept(cv); } } // visits end cv.visitEnd(); }
From source file:org.adjective.stout.writer.ByteCodeWriter.java
License:Apache License
public byte[] write(ClassDescriptor cls) { begin(cls);/*from w ww . ja va 2 s.c o m*/ ClassWriter writer = createClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); ClassVisitor cv = writer; if (_trace) { cv = new TraceClassVisitor(cv, new PrintWriter(System.err)); } if (_check) { cv = new CheckClassAdapter(cv); } String signature = null; // @TODO cv.visit(Opcodes.V1_5, getModifierCode(cls.getModifiers(), cls.getSort()), cls.getInternalName(), signature, getInternalName(cls.getSuperClass()), getInterfaceNames(cls)); if (cls.getSourceFile() != null) { cv.visitSource(cls.getSourceFile(), ""); } UnresolvedType outer = cls.getOuterClass(); if (outer != null) { cv.visitOuterClass(outer.getInternalName(), null, null); } for (AnnotationDescriptor annotation : cls.getAnnotations()) { writeAnnotation(cv, annotation); } for (ClassDescriptor inner : cls.getInnerClasses()) { String name = inner.getInternalName(); String simpleName = name.substring(name.lastIndexOf('/') + 1); cv.visitInnerClass(name, cls.getInternalName(), simpleName, getModifierCode(inner.getModifiers(), inner.getSort())); } for (FieldDescriptor field : cls.getFields()) { writeField(cv, field); } for (MethodDescriptor method : cls.getMethods()) { writeMethod(cv, cls, method); } cv.visitEnd(); end(cls); return writer.toByteArray(); }
From source file:org.jephyr.common.agent.DelegationClassAdapter.java
License:Open Source License
@Override public void visitOuterClass(String owner, String name, String desc) { ClassVisitor cv1 = delegate(); if (cv1 != null) { cv1.visitOuterClass(owner, name, desc); }// www .j a va2 s .c om }
From source file:org.springframework.migrationanalyzer.contributions.bytecode.DelegatingClassVisitor.java
License:Apache License
@Override public void visitOuterClass(String owner, String name, String desc) { for (ClassVisitor delegate : this.delegates) { delegate.visitOuterClass(owner, name, desc); }/* w w w. j a v a 2s. com*/ }