List of usage examples for org.objectweb.asm MethodVisitor visitMaxs
public void visitMaxs(final int maxStack, final int maxLocals)
From source file:com.android.build.gradle.shrinker.TestClasses.java
License:Apache License
static byte[] emptyClass(String name) throws Exception { ClassWriter cw = new ClassWriter(0); FieldVisitor fv;// w w w . ja va 2s .c o m MethodVisitor mv; AnnotationVisitor av0; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "test/" + name, null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
From source file:com.android.build.gradle.shrinker.TestClasses.java
License:Apache License
static byte[] classWithEmptyMethods(String className, String... namesAndDescriptors) throws Exception { ClassWriter cw = new ClassWriter(0); FieldVisitor fv;//from w ww. ja va 2s . com MethodVisitor mv; AnnotationVisitor av0; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "test/" + className, null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } for (String namesAndDescriptor : namesAndDescriptors) { int colon = namesAndDescriptor.indexOf(':'); String methodName = namesAndDescriptor.substring(0, colon); String descriptor = namesAndDescriptor.substring(colon + 1, namesAndDescriptor.length()); { mv = cw.visitMethod(ACC_PUBLIC, methodName, descriptor, null, null); mv.visitCode(); // This bytecode is only valid for some signatures (void methods). This class is used // for testing the parser, we don't ever load these classes to a running VM anyway. mv.visitInsn(RETURN); mv.visitMaxs(0, 1); mv.visitEnd(); } } cw.visitEnd(); return cw.toByteArray(); }
From source file:com.android.build.gradle.tasks.fd.GenerateInstantRunAppInfoTask.java
License:Apache License
void writeAppInfoClass(@NonNull String applicationId, @Nullable String applicationClass, long token) throws IOException { ClassWriter cw = new ClassWriter(0); FieldVisitor fv;//w ww .ja va 2 s . com MethodVisitor mv; String appInfoOwner = "com/android/tools/fd/runtime/AppInfo"; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, appInfoOwner, null, "java/lang/Object", null); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "applicationId", "Ljava/lang/String;", null, null); fv.visitEnd(); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "applicationClass", "Ljava/lang/String;", null, null); fv.visitEnd(); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "token", "J", null, null); fv.visitEnd(); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "usingApkSplits", "Z", null, null); fv.visitEnd(); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", "L" + appInfoOwner + ";", null, l0, l1, 0); mv.visitMaxs(1, 1); mv.visitEnd(); mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode(); mv.visitLdcInsn(applicationId); mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "applicationId", "Ljava/lang/String;"); if (applicationClass != null) { mv.visitLdcInsn(applicationClass); } else { mv.visitInsn(ACONST_NULL); } mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "applicationClass", "Ljava/lang/String;"); if (token != 0L) { mv.visitLdcInsn(token); } else { mv.visitInsn(LCONST_0); } mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "token", "J"); if (isUsingMultiApks()) { mv.visitInsn(ICONST_1); } else { mv.visitInsn(ICONST_0); } mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "usingApkSplits", "Z"); mv.visitInsn(RETURN); mv.visitMaxs(2, 0); mv.visitEnd(); cw.visitEnd(); byte[] bytes = cw.toByteArray(); try (JarOutputStream outputStream = new JarOutputStream( new BufferedOutputStream(new FileOutputStream(getOutputFile())))) { outputStream.putNextEntry(new ZipEntry("com/android/tools/fd/runtime/AppInfo.class")); outputStream.write(bytes); outputStream.closeEntry(); } }
From source file:com.android.build.gradle.tasks.ir.GenerateInstantRunAppInfoTask.java
License:Apache License
void writeAppInfoClass(@NonNull String applicationId, long token) throws IOException { ClassWriter cw = new ClassWriter(0); FieldVisitor fv;/*from ww w . j ava 2s . c o m*/ MethodVisitor mv; String appInfoOwner = SERVER_PACKAGE + "/AppInfo"; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, appInfoOwner, null, "java/lang/Object", null); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "applicationId", "Ljava/lang/String;", null, null); fv.visitEnd(); fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "token", "J", null, null); fv.visitEnd(); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); Label l1 = new Label(); mv.visitLabel(l1); mv.visitLocalVariable("this", "L" + appInfoOwner + ";", null, l0, l1, 0); mv.visitMaxs(1, 1); mv.visitEnd(); mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode(); mv.visitLdcInsn(applicationId); mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "applicationId", "Ljava/lang/String;"); if (token != 0L) { mv.visitLdcInsn(token); } else { mv.visitInsn(LCONST_0); } mv.visitFieldInsn(PUTSTATIC, appInfoOwner, "token", "J"); mv.visitInsn(RETURN); mv.visitMaxs(2, 0); mv.visitEnd(); cw.visitEnd(); byte[] bytes = cw.toByteArray(); try (JarOutputStream outputStream = new JarOutputStream( new BufferedOutputStream(new FileOutputStream(getOutputFile())))) { outputStream.putNextEntry(new ZipEntry(SERVER_PACKAGE + "/AppInfo.class")); outputStream.write(bytes); outputStream.closeEntry(); } }
From source file:com.android.builder.shrinker.TestClasses.java
License:Apache License
public static byte[] emptyClass(String name) throws Exception { ClassWriter cw = new ClassWriter(0); FieldVisitor fv;// www . j av a 2s . co m MethodVisitor mv; AnnotationVisitor av0; cw.visit(V1_6, ACC_PUBLIC + ACC_SUPER, "test/" + name, null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
From source file:com.asakusafw.dag.compiler.builtin.FoldOperatorGenerator.java
License:Apache License
private ClassDescription generateCombinerClass(Context context, UserOperator operator, ClassDescription outer) { ClassDescription target = getCombinerName(outer); OperatorInput input = operator.getInput(0); ClassWriter writer = newWriter(target, Object.class, ObjectCombiner.class); writer.visitOuterClass(outer.getInternalName(), target.getInternalName(), null); FieldRef impl = defineOperatorField(writer, operator, target); defineEmptyConstructor(writer, Object.class, method -> { setOperatorField(method, operator, impl); });/* w ww. j a va2s . c om*/ defineBuildKey(context, writer, input.getDataType(), input.getGroup()); MethodVisitor method = writer.visitMethod(Opcodes.ACC_PUBLIC, "combine", Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(Object.class), typeOf(Object.class)), null, null); List<ValueRef> arguments = new ArrayList<>(); arguments.add(impl); arguments.add(m -> { m.visitVarInsn(Opcodes.ALOAD, 1); m.visitTypeInsn(Opcodes.CHECKCAST, typeOf(input.getDataType()).getInternalName()); }); arguments.add(m -> { m.visitVarInsn(Opcodes.ALOAD, 2); m.visitTypeInsn(Opcodes.CHECKCAST, typeOf(input.getDataType()).getInternalName()); }); for (VertexElement dep : context.getDependencies(operator.getArguments())) { Invariants.require(dep.getElementKind() == ElementKind.VALUE); ValueDescription value = ((ValueElement) dep).getValue(); arguments.add(m -> { getConst(method, Invariants.safe(() -> value.resolve(context.getClassLoader()))); }); } invoke(method, context, operator, arguments); method.visitInsn(Opcodes.RETURN); method.visitMaxs(0, 0); method.visitEnd(); return context.addClassFile(new ClassData(target, writer::toByteArray)); }
From source file:com.asakusafw.dag.compiler.builtin.FoldOperatorGenerator.java
License:Apache License
private void defineSimpleStart(UserOperator operator, ClassWriter writer, FieldRef acc) { MethodVisitor method = writer.visitMethod(Opcodes.ACC_PUBLIC, "start", Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(Object.class)), null, null); TypeDescription dataType = operator.getInput(Fold.ID_INPUT).getDataType(); acc.load(method);/*w w w .ja v a 2 s.co m*/ method.visitVarInsn(Opcodes.ALOAD, 1); method.visitTypeInsn(Opcodes.CHECKCAST, typeOf(dataType).getInternalName()); copyDataModel(method, dataType); method.visitInsn(Opcodes.RETURN); method.visitMaxs(0, 0); method.visitEnd(); }
From source file:com.asakusafw.dag.compiler.builtin.FoldOperatorGenerator.java
License:Apache License
private void defineSimpleCombine(Context context, UserOperator operator, ClassWriter writer, FieldRef impl, FieldRef acc, Map<OperatorProperty, FieldRef> map) { MethodVisitor method = writer.visitMethod(Opcodes.ACC_PUBLIC, "combine", Type.getMethodDescriptor(Type.VOID_TYPE, typeOf(Object.class)), null, null); TypeDescription dataType = operator.getInput(Fold.ID_INPUT).getDataType(); LocalVarRef object = cast(method, 1, dataType); List<ValueRef> arguments = new ArrayList<>(); arguments.add(impl);/*from w w w.j a va 2s .c om*/ arguments.add(acc); arguments.add(object); appendSecondaryInputs(arguments::add, operator, map::get); appendArguments(arguments::add, operator, map::get); invoke(method, context, operator, arguments); method.visitInsn(Opcodes.RETURN); method.visitMaxs(0, 0); method.visitEnd(); }
From source file:com.asakusafw.dag.compiler.builtin.FoldOperatorGenerator.java
License:Apache License
private void defineSimpleFinish(ClassWriter writer, FieldRef acc, ValueRef result) { MethodVisitor method = writer.visitMethod(Opcodes.ACC_PUBLIC, "finish", Type.getMethodDescriptor(typeOf(void.class)), null, null); result.load(method);//w w w. ja va2 s. co m acc.load(method); invokeResultAdd(method); method.visitInsn(Opcodes.RETURN); method.visitMaxs(0, 0); method.visitEnd(); }
From source file:com.asakusafw.dag.compiler.builtin.MasterJoinLikeOperatorGenerator.java
License:Apache License
private static void defineSelection(Context context, ClassWriter writer, UserOperator operator, FieldRef impl, Map<OperatorProperty, FieldRef> dependencies) { Method selector = Invariants.safe(() -> { return MasterJoinOperatorUtil.getSelection(context.getClassLoader(), operator); });//from ww w . jav a 2 s . c om if (selector == null) { return; } MethodVisitor method = writer.visitMethod(Opcodes.ACC_PROTECTED | Opcodes.ACC_FINAL, "selectMaster", Type.getMethodDescriptor(typeOf(Object.class), typeOf(List.class), typeOf(Object.class)), null, null); cast(method, 2, MasterJoinOperatorUtil.getTransactionInput(operator).getDataType()); List<ValueRef> arguments = new ArrayList<>(); impl.load(method); arguments.add(new LocalVarRef(Opcodes.ALOAD, 1)); arguments.add(new LocalVarRef(Opcodes.ALOAD, 2)); arguments .addAll(Lang.project(getExtraViews(operator), v -> Invariants.requireNonNull(dependencies.get(v)))); arguments .addAll(Lang.project(operator.getArguments(), v -> Invariants.requireNonNull(dependencies.get(v)))); for (int i = 0, n = selector.getParameterCount(); i < n; i++) { arguments.get(i).load(method); } method.visitMethodInsn(Opcodes.INVOKEVIRTUAL, typeOf(selector.getDeclaringClass()).getInternalName(), selector.getName(), Type.getMethodDescriptor(selector), false); method.visitInsn(Opcodes.ARETURN); method.visitMaxs(0, 0); method.visitEnd(); }