List of usage examples for org.objectweb.asm MethodVisitor visitLdcInsn
public void visitLdcInsn(final Object value)
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void makeGetMethod(ClassWriter classWriter, Struct struct) { String owner = struct.getPackageAndClass().toJVMType(); MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "get", "(Ljava/lang/String;)Ljava/lang/Object;", null, null);//ww w.j av a2s .com visitor.visitCode(); insertPrivateElementCheck(struct, visitor); Label nextCase = new Label(); for (String member : struct.getMembers()) { visitor.visitLdcInsn(member); visitor.visitVarInsn(ALOAD, 1); visitor.visitJumpInsn(IF_ACMPNE, nextCase); visitor.visitVarInsn(ALOAD, 0); visitor.visitMethodInsn(INVOKEVIRTUAL, owner, member, "()Ljava/lang/Object;"); visitor.visitInsn(ARETURN); visitor.visitLabel(nextCase); nextCase = new Label(); } insertUnknowElementCode(struct, visitor); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void insertPrivateElementCheck(Struct struct, MethodVisitor visitor) { Label afterPrivateCheck = new Label(); visitor.visitVarInsn(ALOAD, 1);// w ww . j a v a 2 s .c o m visitor.visitLdcInsn("_"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "startsWith", "(Ljava/lang/String;)Z"); visitor.visitJumpInsn(IFEQ, afterPrivateCheck); visitor.visitTypeInsn(NEW, "java/lang/IllegalArgumentException"); visitor.visitInsn(DUP); visitor.visitLdcInsn("Private member of " + struct.getPackageAndClass().toString()); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalArgumentException", "<init>", "(Ljava/lang/String;)V"); visitor.visitInsn(ATHROW); visitor.visitLabel(afterPrivateCheck); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeStructGenerator.java
License:Apache License
private void insertUnknowElementCode(Struct struct, MethodVisitor visitor) { visitor.visitTypeInsn(NEW, "java/lang/IllegalArgumentException"); visitor.visitInsn(DUP);/* w w w . ja v a 2s . c om*/ visitor.visitLdcInsn("Unknown member in " + struct.getPackageAndClass().toString()); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalArgumentException", "<init>", "(Ljava/lang/String;)V"); visitor.visitInsn(ATHROW); }
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();//from w ww . j a v a 2s . co m visitor.visitTypeInsn(NEW, "java/lang/StringBuilder"); visitor.visitInsn(DUP); 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 initMembersField(Struct struct, String owner, MethodVisitor visitor) { int arg;//w ww . j av a2 s.c om visitor.visitVarInsn(ALOAD, 0); loadInteger(visitor, struct.getPublicMembers().size()); visitor.visitTypeInsn(ANEWARRAY, "java/lang/String"); arg = 0; for (String name : struct.getPublicMembers()) { visitor.visitInsn(DUP); loadInteger(visitor, arg); visitor.visitLdcInsn(name); visitor.visitInsn(AASTORE); arg = arg + 1; } visitor.visitFieldInsn(PUTFIELD, owner, "members", "[Ljava/lang/String;"); }
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();/*w w w.j a va 2s. co m*/ visitor.visitVarInsn(ALOAD, 0); 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.JavaBytecodeUnionGenerator.java
License:Apache License
private void makeToString(ClassWriter classWriter, Union.Value value) { MethodVisitor visitor = classWriter.visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null); visitor.visitCode();//from www. ja va 2 s.c o m if (!value.hasMembers()) { visitor.visitLdcInsn( "union " + value.getUnion().getPackageAndClass().className() + "." + value.getName()); } else { visitor.visitTypeInsn(NEW, "java/lang/StringBuilder"); visitor.visitInsn(DUP); visitor.visitLdcInsn( "union " + value.getUnion().getPackageAndClass().className() + "." + value.getName() + "{"); visitor.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V", false); visitor.visitVarInsn(ASTORE, 1); boolean first = true; for (String member : value.getMembers()) { visitor.visitVarInsn(ALOAD, 1); visitor.visitLdcInsn((first ? "" : ", ") + member + "="); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); visitor.visitVarInsn(ALOAD, 1); visitor.visitVarInsn(ALOAD, 0); visitor.visitFieldInsn(GETFIELD, value.getPackageAndClass().toJVMType(), member, "Ljava/lang/Object;"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/Object;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); first = false; } visitor.visitVarInsn(ALOAD, 1); visitor.visitLdcInsn("}"); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false); visitor.visitInsn(POP); visitor.visitVarInsn(ALOAD, 1); visitor.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false); } visitor.visitInsn(ARETURN); visitor.visitMaxs(0, 0); visitor.visitEnd(); }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeUtils.java
License:Apache License
static void loadInteger(MethodVisitor methodVisitor, int value) { if (between(value, Short.MIN_VALUE, Short.MAX_VALUE)) { if (between(value, Byte.MIN_VALUE, Byte.MAX_VALUE)) { if (between(value, -1, 5)) { methodVisitor.visitInsn(ICONST[value + 1]); } else { methodVisitor.visitIntInsn(BIPUSH, value); }/*from w w w . j a v a2 s . co m*/ } else { methodVisitor.visitIntInsn(SIPUSH, value); } } else { methodVisitor.visitLdcInsn(value); } }
From source file:fr.insalyon.citi.golo.compiler.JavaBytecodeUtils.java
License:Apache License
static void loadLong(MethodVisitor methodVisitor, long value) { if (value == 0) { methodVisitor.visitInsn(LCONST_0); } else if (value == 1) { methodVisitor.visitInsn(LCONST_1); } else {/*from w w w . j av a2 s . co m*/ methodVisitor.visitLdcInsn(value); } }
From source file:fr.liglab.adele.cilia.dependency.ProxyGenerator.java
License:Apache License
/** * Generates a delegated method./* w w w .j av a 2s .c om*/ * * @param cw the class writer * @param method the method object to delegate * @param className the generated class name * @param itfName the internal specification class name */ private static void generateDelegator(ClassWriter cw, Method method, String className, String itfName) { String methodName = method.getName(); String desc = Type.getMethodDescriptor(method); String[] exceptions = getInternalClassNames(method.getExceptionTypes()); int modifiers = method.getModifiers() & ~(Modifier.ABSTRACT | Modifier.NATIVE | Modifier.SYNCHRONIZED); Type[] types = Type.getArgumentTypes(method); int freeRoom = 1; for (int t = 0; t < types.length; t++) { freeRoom = freeRoom + types[t].getSize(); } MethodVisitor mv = cw.visitMethod(modifiers, methodName, desc, null, exceptions); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, className, DEPENDENCY, DEPENDENCY_DESC); // The dependency is on the stack. mv.visitMethodInsn(INVOKEVIRTUAL, DEPENDENCY_INTERNAL_NAME, "getService", // Call getService "()Ljava/lang/Object;"); // The service object is on the stack. int varSvc = freeRoom; freeRoom = freeRoom + 1; // Object Reference. mv.visitVarInsn(ASTORE, varSvc); // Store the service object. Label notNull = new Label(); Label isNull = new Label(); mv.visitVarInsn(ALOAD, varSvc); // Load the service mv.visitJumpInsn(IFNONNULL, notNull); // If not null go to not null // Null branch - throw the exception mv.visitLabel(isNull); mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); mv.visitInsn(DUP); mv.visitLdcInsn("No service available"); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "<init>", "(Ljava/lang/String;)V"); mv.visitInsn(ATHROW); // End of the null branch // Not null, go one the execution mv.visitLabel(notNull); // Invoke the method on the service object. mv.visitVarInsn(ALOAD, varSvc); // Push argument on the stack. int i = 1; // Arguments. (non static method) for (int t = 0; t < types.length; t++) { mv.visitVarInsn(types[t].getOpcode(ILOAD), i); i = i + types[t].getSize(); } // Invocation mv.visitMethodInsn(INVOKEINTERFACE, itfName, methodName, desc); // Return the result Type returnType = Type.getReturnType(desc); if (returnType.getSort() != Type.VOID) { mv.visitInsn(returnType.getOpcode(IRETURN)); } else { mv.visitInsn(RETURN); } // End of the method. mv.visitMaxs(0, 0); mv.visitEnd(); }