List of usage examples for org.objectweb.asm MethodVisitor visitCode
public void visitCode()
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeToString(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null); visitor.visitCode(); visitor.visitTypeInsn(NEW, "java/lang/StringBuilder"); visitor.visitInsn(DUP);//from w w w . ja v a2 s . c om visitor.visitLdcInsn("struct " + struct.getPackageAndClass().className() + "{"); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V"); boolean first = true; for (String member : struct.getPublicMembers()) { visitor.visitInsn(DUP); visitor.visitLdcInsn((!first ? ", " : "") + member + "="); first = false; visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); visitor.visitInsn(DUP); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, owner, member, "Ljava/lang/Object;"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;"); } visitor.visitLdcInsn("}"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;"); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeAllArgsConstructor(ClassWriter classWriter, Struct struct, String owner) { MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "<init>", allArgsConstructorSignature(struct), null, null);/*w w w. j a v a 2s. c o m*/ visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0); visitor.visitMethodInsn(INVOKESPECIAL, "gololang/GoloStruct", "<init>", "()V"); int arg = 1; for (String name : struct.getMembers()) { visitor.visitVarInsn(ALOAD, 0); visitor.visitVarInsn(ALOAD, arg); visitor.visitFieldInsn(PUTFIELD, owner, name, "Ljava/lang/Object;"); arg = arg + 1; } initMembersField(struct, owner, visitor); visitor.visitVarInsn(ALOAD, 0); visitor.visitInsn(ICONST_0); visitor.visitFieldInsn(PUTFIELD, owner, $_frozen, "Z"); visitor.visitInsn(RETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeImmutableFactory(ClassWriter classWriter, Struct struct) { String constructorDesc = allArgsConstructorSignature(struct); String desc = constructorDesc.substring(0, constructorDesc.length() - 1); String classType = struct.getPackageAndClass().toJVMType(); desc = desc + "L" + classType + ";"; MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC | ACC_STATIC, IMMUTABLE_FACTORY_METHOD, desc, null, null);/* w w w . j ava 2s . co m*/ visitor.visitCode(); visitor.visitTypeInsn(NEW, classType); visitor.visitInsn(DUP); int arg = 0; for (String name : struct.getMembers()) { visitor.visitVarInsn(ALOAD, arg); arg = arg + 1; } visitor.visitMethodInsn(INVOKESPECIAL, classType, "<init>", constructorDesc); visitor.visitInsn(DUP); visitor.visitInsn(ICONST_1); visitor.visitFieldInsn(PUTFIELD, classType, $_frozen, "Z"); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeNoArgsConstructor(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);//from w w w.j av a 2s. c o m visitor.visitMethodInsn(INVOKESPECIAL, "gololang/GoloStruct", "<init>", "()V"); visitor.visitVarInsn(ALOAD, 0); visitor.visitInsn(ICONST_0); visitor.visitFieldInsn(PUTFIELD, struct.getPackageAndClass().toJVMType(), $_frozen, "Z"); initMembersField(struct, owner, visitor); visitor.visitInsn(RETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeFrozenGetter(ClassWriter classWriter, String owner) { MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "isFrozen", "()Z", null, null); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);//from w ww . jav a 2s. co m visitor.visitFieldInsn(GETFIELD, owner, $_frozen, "Z"); visitor.visitInsn(IRETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeSetter(ClassWriter classWriter, String owner, String name) { int accessFlag = name.startsWith("_") ? ACC_PRIVATE : ACC_PUBLIC; MethodVisitor visitor = classWriter.visitMethod(accessFlag, name, "(Ljava/lang/Object;)Lgololang/GoloStruct;", null, null); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);//from w w w . j av a 2 s .c o m visitor.visitFieldInsn(GETFIELD, owner, $_frozen, "Z"); Label setLabel = new Label(); visitor.visitJumpInsn(IFEQ, setLabel); visitor.visitTypeInsn(NEW, "java/lang/IllegalStateException"); visitor.visitInsn(DUP); visitor.visitLdcInsn("The struct instance is frozen"); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalStateException", "<init>", "(Ljava/lang/String;)V"); visitor.visitInsn(ATHROW); visitor.visitLabel(setLabel); visitor.visitVarInsn(ALOAD, 0); visitor.visitVarInsn(ALOAD, 1); visitor.visitFieldInsn(PUTFIELD, owner, name, "Ljava/lang/Object;"); visitor.visitVarInsn(ALOAD, 0); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeGetter(ClassWriter classWriter, String owner, String name) { int accessFlag = name.startsWith("_") ? ACC_PRIVATE : ACC_PUBLIC; MethodVisitor visitor = classWriter.visitMethod(accessFlag, name, "()Ljava/lang/Object;", null, null); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);/*from w w w. j a v a2s . c om*/ visitor.visitFieldInsn(GETFIELD, owner, name, "Ljava/lang/Object;"); visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeUnionGenerator.java
License:Apache License
private void initStaticFields(ClassWriter cw, PackageAndClass unionType, Map<String, PackageAndClass> staticFields) { MethodVisitor mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null); mv.visitCode(); for (String attr : staticFields.keySet()) { mv.visitTypeInsn(NEW, staticFields.get(attr).toJVMType()); mv.visitInsn(DUP);//from w ww . ja v a 2s .com mv.visitMethodInsn(INVOKESPECIAL, staticFields.get(attr).toJVMType(), "<init>", "()V", false); mv.visitFieldInsn(PUTSTATIC, unionType.toJVMType(), attr, unionType.toJVMRef()); } mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeUnionGenerator.java
License:Apache License
private void makeStaticFactory(ClassWriter cw, Union.Value value) { MethodVisitor mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, value.getName(), argsSignature(value.getMembers().size()) + value.getUnion().getPackageAndClass().toJVMRef(), null, null);//from ww w. j ava 2 s. c o m mv.visitCode(); mv.visitTypeInsn(NEW, value.getPackageAndClass().toJVMType()); mv.visitInsn(DUP); for (int i = 0; i < value.getMembers().size(); i++) { mv.visitVarInsn(ALOAD, i); } mv.visitMethodInsn(INVOKESPECIAL, value.getPackageAndClass().toJVMType(), "<init>", argsSignature(value.getMembers().size()) + "V", false); mv.visitInsn(ARETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeUnionGenerator.java
License:Apache License
private void makeDefaultConstructor(ClassWriter classWriter, String superCls) { MethodVisitor visitor = classWriter.visitMethod(ACC_PROTECTED, "<init>", "()V", null, null); visitor.visitCode(); visitor.visitVarInsn(ALOAD, 0);//from w ww . ja v a 2 s.c o m visitor.visitMethodInsn(INVOKESPECIAL, superCls, "<init>", "()V", false); visitor.visitInsn(RETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }