Example usage for org.objectweb.asm Opcodes ASM4

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

Introduction

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

Prototype

int ASM4

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

Click Source Link

Usage

From source file:com.facebook.buck.android.dalvik.firstorder.FirstOrderTest.java

License:Apache License

private static ClassNode loadClassNode(Class<?> input) {
    try {/* w ww.  j a  v  a2  s.c om*/
        ClassReader reader = new ClassReader(input.getName());
        ClassNode node = new ClassNode(Opcodes.ASM4);
        reader.accept(node, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
        return node;
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

From source file:com.facebook.buck.dalvik.firstorder.FirstOrderTest.java

License:Apache License

private static ClassNode loadClassNode(Class<?> input) {
    try {//from  ww w .ja  v  a2s .co m
        ClassReader reader = new ClassReader(input.getName());
        ClassNode node = new ClassNode(Opcodes.ASM4);
        reader.accept(node, ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES);
        return node;
    } catch (IOException e) {
        throw Throwables.propagate(e);
    }
}

From source file:com.fjn.helper.frameworkex.asm.test.ClassPrinterTest.java

License:Apache License

public ClassPrinterTest() {
    super(Opcodes.ASM4);
}

From source file:com.googlecode.d2j.asm.LdcOptimizeAdapter.java

License:Apache License

/**
 * @param mv
 */
public LdcOptimizeAdapter(MethodVisitor mv) {
    super(Opcodes.ASM4, mv);
}

From source file:com.googlecode.d2j.dex.Dex2jar.java

License:Apache License

private void doTranslate(final Path dist) throws IOException {

    DexFileNode fileNode = new DexFileNode();
    try {/* ww w . j  a  v  a2 s .  c o m*/
        reader.accept(fileNode, readerConfig | DexFileReader.IGNORE_READ_EXCEPTION);
    } catch (Exception ex) {
        exceptionHandler.handleFileException(ex);
    }
    ClassVisitorFactory cvf = new ClassVisitorFactory() {
        @Override
        public ClassVisitor create(final String name) {
            return new ClassVisitor(Opcodes.ASM4, new ClassWriter(ClassWriter.COMPUTE_MAXS)) {
                @Override
                public void visitEnd() {
                    super.visitEnd();
                    ClassWriter cw = (ClassWriter) super.cv;

                    byte[] data;
                    try {
                        // FIXME handle 'java.lang.RuntimeException: Method code too large!'
                        data = cw.toByteArray();
                    } catch (Exception ex) {
                        System.err.println(String.format("ASM fail to generate .class file: %s", name));
                        exceptionHandler.handleFileException(ex);
                        return;
                    }
                    try {
                        Path dist1 = dist.resolve(name + ".class");
                        Path parent = dist1.getParent();
                        if (parent != null && !Files.exists(parent)) {
                            Files.createDirectories(parent);
                        }
                        Files.write(dist1, data);
                    } catch (IOException e) {
                        e.printStackTrace(System.err);
                    }
                }
            };
        }
    };

    new ExDex2Asm(exceptionHandler) {
        public void convertCode(DexMethodNode methodNode, MethodVisitor mv) {
            if ((readerConfig & DexFileReader.SKIP_CODE) != 0
                    && methodNode.method.getName().equals("<clinit>")) {
                // also skip clinit
                return;
            }
            super.convertCode(methodNode, mv);
        }

        @Override
        public void optimize(IrMethod irMethod) {
            T_exceptionFix.transform(irMethod);
            T_endRemove.transform(irMethod);
            T_cleanLabel.transform(irMethod);
            if (0 != (v3Config & V3.TOPOLOGICAL_SORT)) {
                // T_topologicalSort.transform(irMethod);
            }
            T_ssa.transform(irMethod);
            T_removeLocal.transform(irMethod);
            T_removeConst.transform(irMethod);
            T_zero.transform(irMethod);
            if (T_npe.transformReportChanged(irMethod)) {
                T_deadCode.transform(irMethod);
                T_removeLocal.transform(irMethod);
                T_removeConst.transform(irMethod);
            }
            T_new.transform(irMethod);
            T_fillArray.transform(irMethod);
            T_agg.transform(irMethod);
            T_voidInvoke.transform(irMethod);
            if (0 != (v3Config & V3.PRINT_IR)) {
                int i = 0;
                for (Stmt p : irMethod.stmts) {
                    if (p.st == Stmt.ST.LABEL) {
                        LabelStmt labelStmt = (LabelStmt) p;
                        labelStmt.displayName = "L" + i++;
                    }
                }
                System.out.println(irMethod);
            }
            T_type.transform(irMethod);
            T_unssa.transform(irMethod);
            T_ir2jRegAssign.transform(irMethod);
            T_trimEx.transform(irMethod);
        }

        @Override
        public void ir2j(IrMethod irMethod, MethodVisitor mv) {
            new IR2JConverter(0 != (V3.OPTIMIZE_SYNCHRONIZED & v3Config)).convert(irMethod, mv);
        }
    }.convertDex(fileNode, cvf);

}

From source file:com.googlecode.d2j.dex.ExDex2Asm.java

License:Apache License

@Override
public void convertCode(DexMethodNode methodNode, MethodVisitor mv) {
    if (!AsmBridge.isMethodWriter(mv)) {
        throw new RuntimeException("We use a MethodWriter tricky here!");
    }/*from  w w  w .  jav  a  2s . co m*/
    MethodNode mn = new MethodNode(Opcodes.ASM4, methodNode.access, methodNode.method.getName(),
            methodNode.method.getDesc(), null, null);
    try {
        super.convertCode(methodNode, mn);
    } catch (Exception ex) {
        if (exceptionHandler == null) {
            throw new DexException(ex, "fail convert code for %s", methodNode.method);
        } else {
            mn.instructions.clear();
            mn.tryCatchBlocks.clear();
            exceptionHandler.handleMethodTranslateException(methodNode.method, methodNode, mn, ex);
        }
    }
    // code convert ok, copy to MethodWriter and check for Size
    mn.accept(mv);
    try {
        AsmBridge.sizeOfMethodWriter(mv);
    } catch (Exception ex) {
        mn.instructions.clear();
        mn.tryCatchBlocks.clear();
        exceptionHandler.handleMethodTranslateException(methodNode.method, methodNode, mn, ex);
        AsmBridge.replaceMethodWriter(mv, mn);
    }
}

From source file:com.googlecode.d2j.map.AsmInheritanceClassVisitor.java

License:Apache License

public AsmInheritanceClassVisitor(InheritanceTree tree) {
    super(Opcodes.ASM4);
    this.tree = tree;
}

From source file:com.googlecode.dex2jar.tools.Dex2jarMultiThreadCmd.java

License:Apache License

private void run0(String fileName, final ExecutorService executorService) throws IOException {
    // long baseTS = System.currentTimeMillis();
    String baseName = getBaseName(new File(fileName).toPath());
    Path currentDir = new File(".").toPath();
    Path file = currentDir.resolve(baseName + "-dex2jar.jar");
    final Path errorFile = currentDir.resolve(baseName + "-error.zip");
    System.err.println("dex2jar " + fileName + " -> " + file);
    final BaksmaliBaseDexExceptionHandler exceptionHandler = new BaksmaliBaseDexExceptionHandler();
    DexFileReader reader = new DexFileReader(ZipUtil.readDex(new File(fileName)));
    DexFileNode fileNode = new DexFileNode();
    try {//from   w w w.  j a  v a 2 s.  c  o m
        reader.accept(fileNode, DexFileReader.SKIP_DEBUG | DexFileReader.IGNORE_READ_EXCEPTION);
    } catch (Exception ex) {
        exceptionHandler.handleFileException(ex);
        throw ex;
    }
    final FileSystem fs = createZip(file);
    final Path dist = fs.getPath("/");
    ClassVisitorFactory cvf = new ClassVisitorFactory() {
        @Override
        public ClassVisitor create(final String name) {
            return new ClassVisitor(Opcodes.ASM4, new ClassWriter(ClassWriter.COMPUTE_MAXS)) {
                @Override
                public void visitEnd() {
                    super.visitEnd();
                    ClassWriter cw = (ClassWriter) super.cv;

                    byte[] data;
                    try {
                        // FIXME handle 'java.lang.RuntimeException: Method code too large!'
                        data = cw.toByteArray();
                    } catch (Exception ex) {
                        System.err.println(String.format("ASM fail to generate .class file: %s", name));
                        exceptionHandler.handleFileException(ex);
                        return;
                    }
                    try {
                        Path dist1 = dist.resolve(name + ".class");
                        BaseCmd.createParentDirectories(dist1);
                        Files.write(dist1, data);
                    } catch (IOException e) {
                        exceptionHandler.handleFileException(e);
                    }
                }
            };
        }
    };

    new ExDex2Asm(exceptionHandler) {

        @Override
        public void convertDex(DexFileNode fileNode, final ClassVisitorFactory cvf) {
            if (fileNode.clzs != null) {
                final Map<String, Clz> classes = collectClzInfo(fileNode);
                final List<Future<?>> results = new ArrayList<>(fileNode.clzs.size());
                for (final DexClassNode classNode : fileNode.clzs) {
                    results.add(executorService.submit(new Runnable() {
                        @Override
                        public void run() {
                            convertClass(classNode, cvf, classes);
                        }
                    }));
                }
                executorService.submit(new Runnable() {
                    @Override
                    public void run() {
                        for (Future<?> result : results) {
                            try {
                                result.get();
                            } catch (InterruptedException | ExecutionException e) {
                                e.printStackTrace();
                            }
                        }
                        BaksmaliBaseDexExceptionHandler exceptionHandler1 = (BaksmaliBaseDexExceptionHandler) exceptionHandler;
                        if (exceptionHandler1.hasException()) {
                            exceptionHandler1.dump(errorFile, new String[0]);
                        }
                        try {
                            fs.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                });
            }
        }
    }.convertDex(fileNode, cvf);
}

From source file:com.googlecode.gwt.test.internal.rewrite.ForceClassVersion15.java

License:Apache License

public ForceClassVersion15(ClassVisitor v) {
    super(Opcodes.ASM4, v);
}

From source file:com.googlecode.gwt.test.internal.rewrite.RewriteRefsToJsoClasses.java

License:Apache License

/**
 * Construct a new rewriter instance./*w  ww .  j  av  a 2  s .  c  om*/
 *
 * @param cv the visitor to chain to
 * @param jsoDescriptors an unmodifiable set of descriptors containing
 *           <code>JavaScriptObject</code> and all subclasses
 * @param mapper maps methods to the class in which they are declared
 */
public RewriteRefsToJsoClasses(ClassVisitor cv, Set<String> jsoDescriptors, InstanceMethodOracle mapper) {
    super(Opcodes.ASM4, cv);
    this.jsoDescriptors = jsoDescriptors;
    this.mapper = mapper;
}