Example usage for org.objectweb.asm ClassVisitor visitOuterClass

List of usage examples for org.objectweb.asm ClassVisitor visitOuterClass

Introduction

In this page you can find the example usage for org.objectweb.asm ClassVisitor visitOuterClass.

Prototype

public void visitOuterClass(final String owner, final String name, final String descriptor) 

Source Link

Document

Visits the enclosing class of the class.

Usage

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*/
}