List of usage examples for org.objectweb.asm Opcodes ACC_INTERFACE
int ACC_INTERFACE
To view the source code for org.objectweb.asm Opcodes ACC_INTERFACE.
Click Source Link
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); }