Example usage for org.objectweb.asm Opcodes ACC_INTERFACE

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

Introduction

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

Prototype

int ACC_INTERFACE

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

Click Source Link

Usage

From source file:pt.minha.kernel.instrument.FakeMonitorClassVisitor.java

License:Open Source License

public void visit(int version, int access, String name, String signature, String supername,
        String[] interfaces) {/*from  ww  w. j a v a  2  s .  co m*/
    if (trans.isSynchronized()) {
        if (supername.equals("java/lang/Object") && (access & Opcodes.ACC_INTERFACE) == 0)
            supername = ClassConfig.fake_prefix + supername;
    }
    super.visit(version, access, name, signature, supername, interfaces);
}

From source file:pt.minha.kernel.instrument.SyncToMonitorClassVisitor.java

License:Open Source License

public void visit(int version, int access, String name, String signature, String superName,
        String[] interfaces) {/*w  w w  .  j av  a  2  s  .c o  m*/
    if (trans.isSynchronized()) {
        clz = name;
        this.access = access;
        if ((access & Opcodes.ACC_INTERFACE) == 0) {
            FieldVisitor fv = visitField(Opcodes.ACC_PUBLIC + Opcodes.ACC_STATIC, "_fake_class",
                    "L" + ClassConfig.fake_prefix + "java/lang/Object;", null, null);
            fv.visitEnd();
        }
    }
    super.visit(version, access, name, signature, superName, interfaces);
}

From source file:pt.minha.kernel.instrument.SyncToMonitorClassVisitor.java

License:Open Source License

public void visitEnd() {
    if (trans.isSynchronized()) {
        if (!hasClinit && (access & Opcodes.ACC_INTERFACE) == 0)
            mkClinit();/*from   ww  w  .  ja v a2s.  c o m*/
    }
    super.visitEnd();
}

From source file:pt.minha.kernel.instrument.SyncToMonitorClassVisitor.java

License:Open Source License

public void makeStub(int access, String name, String desc, String signature, String[] exceptions) {
    Method m = new Method(name, desc);

    MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
    mv.visitCode();/*from   w  w w  . ja  va2  s .  co m*/

    Label begin = new Label();
    Label pre_invoke = new Label();
    Label pos_leave = new Label();
    Label in_catch = new Label();
    Label pre_rethrow = new Label();
    Label end = new Label();

    mv.visitTryCatchBlock(pre_invoke, pos_leave, in_catch, null);
    mv.visitTryCatchBlock(in_catch, pre_rethrow, in_catch, null);

    mv.visitLabel(begin);

    int offset;
    if ((access & Opcodes.ACC_STATIC) == 0) {
        mv.visitVarInsn(Opcodes.ALOAD, 0);
        offset = 1;
    } else {
        mv.visitFieldInsn(Opcodes.GETSTATIC, clz, "_fake_class",
                "L" + ClassConfig.fake_prefix + "java/lang/Object;");
        offset = 0;
    }

    int length = 0;
    for (Type t : m.getArgumentTypes())
        length += t.getSize();

    mv.visitInsn(Opcodes.DUP);
    mv.visitVarInsn(Opcodes.ASTORE, offset + length);
    mv.visitInsn(Opcodes.MONITORENTER);

    mv.visitLabel(pre_invoke);

    if ((access & Opcodes.ACC_STATIC) == 0)
        mv.visitVarInsn(Opcodes.ALOAD, 0);

    int i = offset;
    for (Type t : m.getArgumentTypes()) {
        // t.getOpcode() should work for long and double too... :-( 
        if (t.getClassName().equals("long"))
            mv.visitVarInsn(Opcodes.LLOAD, i);
        else if (t.getClassName().equals("double"))
            mv.visitVarInsn(Opcodes.DLOAD, i);
        else
            mv.visitVarInsn(t.getOpcode(Opcodes.ILOAD), i);
        i += t.getSize();
    }

    boolean itf = (access & Opcodes.ACC_INTERFACE) != 0;
    if ((access & Opcodes.ACC_STATIC) == 0)
        mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, clz, "_" + name, desc, itf);
    else
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, clz, "_" + name, desc, itf);

    mv.visitVarInsn(Opcodes.ALOAD, offset + length);
    mv.visitInsn(Opcodes.MONITOREXIT);

    mv.visitLabel(pos_leave);

    if (m.getReturnType().equals(Type.VOID_TYPE))
        mv.visitInsn(Opcodes.RETURN);
    else
        mv.visitInsn(m.getReturnType().getOpcode(Opcodes.IRETURN));

    mv.visitLabel(in_catch);

    mv.visitVarInsn(Opcodes.ALOAD, offset + length);
    mv.visitInsn(Opcodes.MONITOREXIT);

    mv.visitLabel(pre_rethrow);
    mv.visitInsn(Opcodes.ATHROW);

    mv.visitLabel(end);

    i = 0;
    if ((access & Opcodes.ACC_STATIC) == 0)
        mv.visitLocalVariable("this", "L" + clz + ";", null, begin, end, i++);
    for (Type t : m.getArgumentTypes())
        mv.visitLocalVariable("arg" + i, t.getDescriptor(), null, begin, end, i++);

    mv.visitMaxs(0, 0);
    mv.visitEnd();
}

From source file:pxb.android.dex2jar.dump.Dump.java

License:Apache License

public DexClassVisitor visit(int access_flags, String className, String superClass, String... interfaceNames) {

    String javaClassName = Type.getType(className).getClassName();
    out = writerManager.get(javaClassName);
    out.printf("//class:%04d  access:0x%04x\n", class_count++, access_flags);
    out.print(getAccDes(access_flags));//from w  ww. jav a 2s. c  o  m
    if ((access_flags & Opcodes.ACC_INTERFACE) == 0) {
        out.print("class ");
    }
    out.print(javaClassName);

    if (!"Ljava/lang/Object;".equals(superClass)) {
        out.print(" extends ");
        out.print(Type.getType(superClass).getClassName());
    }
    if (interfaceNames != null && interfaceNames.length > 0) {
        out.print(" implements ");
        out.print(Type.getType(interfaceNames[0]).getClassName());
        for (int i = 1; i < interfaceNames.length; i++) {
            out.print(',');
            out.print(Type.getType(interfaceNames[i]).getClassName());
        }
    }
    out.println();
    DexClassVisitor dcv = dfv.visit(access_flags, className, superClass, interfaceNames);
    if (dcv == null)
        return null;
    return new DexClassAdapter(dcv) {

        public DexFieldVisitor visitField(Field field, Object value) {
            out.printf("//field:%04d  access:0x%04x\n", field_count++, field.getAccessFlags());
            out.printf("//%s\n", field);
            out.printf("%s %s %s", getAccDes(field.getAccessFlags()),
                    Type.getType(field.getType()).getClassName(), field.getName());
            if (value != null) {
                out.print('=');
                out.print(value);
            }
            out.println(';');

            return dcv.visitField(field, value);
        }

        @Override
        public void visitEnd() {
            out.flush();
            out.close();
            out = null;
            super.visitEnd();
        }

        int method_count = 0;
        int field_count = 0;

        public DexMethodVisitor visitMethod(final Method method) {
            out.println();
            out.printf("//method:%04d  access:0x%04x\n", method_count++, method.getAccessFlags());
            out.printf("//%s\n", method);

            out.printf("%s%s %s(", getAccDes(method.getAccessFlags()),
                    Type.getType(method.getType().getReturnType()).getClassName(), method.getName());
            String ps[] = method.getType().getParameterTypes();
            if (ps != null && ps.length > 0) {
                out.print(Type.getType(ps[0]).getClassName());
                for (int i = 1; i < ps.length; i++) {
                    out.print(',');
                    out.print(Type.getType(ps[i]).getClassName());
                }
            }
            out.println(')');

            DexMethodVisitor dmv = dcv.visitMethod(method);
            if (dmv == null) {
                return null;
            }
            return new DexMethodAdapter(dmv) {
                public DexCodeVisitor visitCode() {
                    DexCodeVisitor dcv = mv.visitCode();
                    if (dcv == null)
                        return null;
                    return new DumpDexCodeAdapter(dcv, method, out);
                }
            };
        }
    };
}

From source file:the.bytecode.club.bytecodeviewer.decompilers.bytecode.ClassNodeDecompiler.java

License:Open Source License

public static String getAccessString(int access) {
    List<String> tokens = new ArrayList<String>();
    if ((access & Opcodes.ACC_PUBLIC) != 0)
        tokens.add("public");
    if ((access & Opcodes.ACC_PRIVATE) != 0)
        tokens.add("private");
    if ((access & Opcodes.ACC_PROTECTED) != 0)
        tokens.add("protected");
    if ((access & Opcodes.ACC_FINAL) != 0)
        tokens.add("final");
    if ((access & Opcodes.ACC_SYNTHETIC) != 0)
        tokens.add("synthetic");
    // if ((access & Opcodes.ACC_SUPER) != 0)
    // tokens.add("super"); implied by invokespecial insn
    if ((access & Opcodes.ACC_ABSTRACT) != 0)
        tokens.add("abstract");
    if ((access & Opcodes.ACC_INTERFACE) != 0)
        tokens.add("interface");
    if ((access & Opcodes.ACC_ENUM) != 0)
        tokens.add("enum");
    if ((access & Opcodes.ACC_ANNOTATION) != 0)
        tokens.add("annotation");
    if (!tokens.contains("interface") && !tokens.contains("enum") && !tokens.contains("annotation"))
        tokens.add("class");
    if (tokens.size() == 0)
        return "[Error parsing]";

    // hackery delimeters
    StringBuilder sb = new StringBuilder(tokens.get(0));
    for (int i = 1; i < tokens.size(); i++) {
        sb.append(" ");
        sb.append(tokens.get(i));//from   ww w.  j a  v a 2 s  .  co  m
    }
    return sb.toString();
}

From source file:travis.model.project.structure.StructComponent.java

License:Open Source License

public boolean isInterface() {
    return StructUtil.isFlagSet(access, Opcodes.ACC_INTERFACE);
}