Example usage for org.objectweb.asm Opcodes INVOKESTATIC

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

Introduction

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

Prototype

int INVOKESTATIC

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

Click Source Link

Usage

From source file:edu.umd.cs.findbugs.classfile.engine.SelfMethodCalls.java

License:Open Source License

public static <T> MultiMap<T, T> getSelfCalls(final ClassDescriptor classDescriptor,
        final Map<String, T> methods) {
    final MultiMap<T, T> map = new MultiMap<T, T>(HashSet.class);

    FBClassReader reader;/*w  ww .j av a2s  .c  o  m*/
    try {
        reader = Global.getAnalysisCache().getClassAnalysis(FBClassReader.class, classDescriptor);
    } catch (CheckedAnalysisException e) {
        AnalysisContext.logError("Error finding self method calls for " + classDescriptor, e);
        return map;
    }
    reader.accept(new ClassVisitor(FindBugsASM.ASM_VERSION) {

        @Override
        public MethodVisitor visitMethod(final int access, final String name, final String desc,
                String signature, String[] exceptions) {
            return new MethodVisitor(FindBugsASM.ASM_VERSION) {
                @Override
                public void visitMethodInsn(int opcode, String owner, String name2, String desc2, boolean itf) {
                    if (owner.equals(classDescriptor.getClassName()) && interestingSignature(desc2)) {
                        T from = methods.get(name + desc + ((access & Opcodes.ACC_STATIC) != 0));
                        T to = methods.get(name2 + desc2 + (opcode == Opcodes.INVOKESTATIC));
                        map.add(from, to);
                    }

                }

            };
        }

    }, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
    return map;
}

From source file:edu.umd.cs.guitar.testcase.plugin.edg.ClassDBVisitor.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc) {
    currentMethod.setEmpty(false);/*from www.  j av a 2s  .  c o  m*/
    switch (opcode) {
    case Opcodes.INVOKEVIRTUAL:
    case Opcodes.INVOKESTATIC:
    case Opcodes.INVOKESPECIAL:
        Class c = getClass(owner);
        MethodDescriptor m = getMethod(c, name, desc);
        currentMethod.addInvokes(m);
        break;
    }
}

From source file:erjang.EAtom.java

License:Apache License

@Override
public org.objectweb.asm.Type emit_const(MethodVisitor fa) {

    Type type = EATOM_TYPE;//from ww w .  j  a  v a 2 s.c o m

    fa.visitLdcInsn(value);
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, type.getInternalName(), "intern",
            "(" + STRING_TYPE.getDescriptor() + ")" + type.getDescriptor());

    return type;
}

From source file:erjang.EBig.java

License:Apache License

@Override
public org.objectweb.asm.Type emit_const(MethodVisitor fa) {

    Type type = EBIG_TYPE;// w w w  . j  a v a2 s . c  om

    fa.visitLdcInsn(value.toString());
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, type.getInternalName(), "fromString",
            "(" + STRING_TYPE.getDescriptor() + ")" + type.getDescriptor());

    return type;
}

From source file:erjang.EBigString.java

License:Apache License

@Override
public Type emit_const(MethodVisitor fa) {

    Type type = ESTRING_TYPE;//from w w  w. ja va  2s . c  o m

    fa.visitLdcInsn(this.stringValue());
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, type.getInternalName(), "fromString",
            "(" + STRING_TYPE.getDescriptor() + ")" + type.getDescriptor());

    return type;
}

From source file:erjang.EBinary.java

License:Apache License

@Override
public Type emit_const(MethodVisitor fa) {
    char[] chs = new char[byteSize()];
    for (int i = 0; i < byteSize(); i++) {
        chs[i] = (char) (0xff & octetAt(i));
    }/*ww  w. j  a  va 2 s. c o m*/
    String str = new String(chs);

    fa.visitLdcInsn(str);
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, EBINARY_NAME, "fromString",
            "(Ljava/lang/String;)L" + EBINARY_NAME + ";");

    return EBINARY_TYPE;
}

From source file:erjang.EBinList.java

License:Apache License

@Override
public Type emit_const(MethodVisitor fa) {

    Type type = EBINLIST_TYPE;/*from  ww  w  .  java2s .co  m*/

    char[] ch = new char[len];
    for (int i = 0; i < len; i++) {
        ch[i] = (char) (0xff & (int) data[off + i]);
    }

    fa.visitLdcInsn(new String(ch));
    tail.emit_const(fa);
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, type.getInternalName(), "fromString",
            "(" + STRING_TYPE.getDescriptor() + EOBJECT_DESC + ")" + type.getDescriptor());

    return type;
}

From source file:erjang.EBitString.java

License:Apache License

@Override
public Type emit_const(MethodVisitor fa) {
    char[] chs = new char[dataByteSize()];

    for (int byteIdx = 0; byteIdx < byteSize(); byteIdx += 1) {
        chs[byteIdx] = (char) (data[byteIdx] & 0xff);
    }/* w  w  w.j  a va2s .c  o  m*/

    if (extra_bits != 0) {
        int rest = intBitsAt(byteSize() * 8, extra_bits);
        rest <<= (8 - extra_bits);
        chs[byteSize()] = (char) rest;
    }

    String str = new String(chs);

    fa.visitLdcInsn(str);
    fa.visitLdcInsn(new Integer(extra_bits));
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, EBITSTRING_NAME, "make",
            "(Ljava/lang/String;I)L" + EBITSTRING_NAME + ";");

    return EBITSTRING_TYPE;
}

From source file:erjang.EFun.java

License:Apache License

static byte[] get_exported_fun_class_data(int arity) {
    /* Code template:// w ww.j  a  v a  2s .  c om
     * public abstract class EFun{arity}Exported extends EFun{arity} {
     *   protected final EAtom module_name, function_name;
     *   protected EFun{arity}Exported(String m, String f) {
     *     module_name   = EAtom.intern(m);
     *     function_name = EAtom.intern(f);
     *   }
     * }
     */

    ensure(arity); // Ensure presence of superclass.
    String super_type = EFUN_TYPE.getInternalName() + arity;
    String self_type = super_type + "Exported";

    ClassWriter cw = new ClassWriter(true);
    cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, self_type, null, super_type, null);

    cw.visitField(ACC_PROTECTED | ACC_FINAL, "module_name", EATOM_TYPE.getDescriptor(), null, null).visitEnd();

    cw.visitField(ACC_PROTECTED | ACC_FINAL, "function_name", EATOM_TYPE.getDescriptor(), null, null)
            .visitEnd();

    MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PROTECTED, "<init>",
            "(Ljava/lang/String;Ljava/lang/String;)V", null, null);

    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitMethodInsn(Opcodes.INVOKESPECIAL, super_type, "<init>", "()V");

    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 1);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, EATOM_TYPE.getInternalName(), "intern",
            "(Ljava/lang/String;)Lerjang/EAtom;");
    mv.visitFieldInsn(Opcodes.PUTFIELD, self_type, "module_name", EATOM_DESC);

    mv.visitVarInsn(Opcodes.ALOAD, 0);
    mv.visitVarInsn(Opcodes.ALOAD, 2);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, EATOM_TYPE.getInternalName(), "intern",
            "(Ljava/lang/String;)Lerjang/EAtom;");
    mv.visitFieldInsn(Opcodes.PUTFIELD, self_type, "function_name", EATOM_DESC);

    mv.visitInsn(Opcodes.RETURN);
    mv.visitMaxs(3, 3);
    mv.visitEnd();

    make_encode_method_for_exported(cw, self_type, arity);

    cw.visitEnd();

    byte[] data = cw.toByteArray();
    return data;
}

From source file:erjang.EStringList.java

License:Apache License

@Override
public Type emit_const(MethodVisitor fa) {

    Type type = ESTRINGLIST_TYPE;

    char[] ch = new char[len];
    for (int i = 0; i < len; i++) {
        ch[i] = (char) (0xff & (int) bytes.data[off + i]);
    }/* www .  j  a v  a  2s.c  o m*/

    fa.visitLdcInsn(new String(ch));
    tail.emit_const(fa);
    fa.visitMethodInsn(Opcodes.INVOKESTATIC, type.getInternalName(), "fromString",
            "(" + STRING_TYPE.getDescriptor() + ESEQ_DESC + ")" + type.getDescriptor());

    return type;
}