List of usage examples for org.objectweb.asm MethodVisitor visitLdcInsn
public void visitLdcInsn(final Object value)
From source file:org.apache.felix.ipojo.manipulation.ClassManipulator.java
License:Apache License
/** * Create a setter method for an array.// w ww. j ava 2 s . c om * @param name : field name * @param desc : method description */ private void createArrayGetter(String name, String desc) { String methodName = "__get" + name; MethodVisitor mv = cv.visitMethod(0, methodName, desc, null, null); mv.visitCode(); String internalType = desc.substring(2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalType); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, internalType); mv.visitInsn(ARETURN); // End mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.ClassManipulator.java
License:Apache License
/** * Create the getter for a field./*from w w w . j a v a2 s . c om*/ * @param name : field of the dependency * @param desc : description of the getter method * @param type : type to return */ private void createSimpleGetter(String name, String desc, Type type) { String methodName = "__get" + name; MethodVisitor mv = cv.visitMethod(0, methodName, desc, null, null); mv.visitCode(); switch (type.getSort()) { case Type.BOOLEAN: case Type.CHAR: case Type.BYTE: case Type.SHORT: case Type.INT: String internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; String boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; String unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName, false); mv.visitInsn(type.getOpcode(IRETURN)); break; case Type.LONG: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(LRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName, false); mv.visitInsn(LRETURN); break; case Type.DOUBLE: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(DRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName, false); mv.visitInsn(DRETURN); break; case Type.FLOAT: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(FRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName, false); mv.visitInsn(FRETURN); break; case Type.OBJECT: l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, "L" + type.getInternalName() + ";"); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, type.getInternalName()); mv.visitInsn(ARETURN); break; default: ManipulationProperty.getLogger().log(ManipulationProperty.SEVERE, "Manipulation problem in " + m_owner + " : a type is not implemented : " + type); break; } mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.ClassManipulator.java
License:Apache License
/** * Create the setter method for one property. The name of the method is _set+name of the field * @param name : name of the field representing a property * @param desc : description of the setter method * @param type : type of the property//from ww w. j a v a2s . c o m */ private void createSimpleSetter(String name, String desc, Type type) { MethodVisitor mv = cv.visitMethod(0, "__set" + name, desc, null, null); mv.visitCode(); switch (type.getSort()) { case Type.BOOLEAN: case Type.CHAR: case Type.BYTE: case Type.SHORT: case Type.INT: case Type.FLOAT: String internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; String boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; Label l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l22 = new Label(); mv.visitJumpInsn(IFNE, l22); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, internalName); mv.visitInsn(RETURN); mv.visitLabel(l22); mv.visitTypeInsn(NEW, boxingType); mv.visitInsn(DUP); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitMethodInsn(INVOKESPECIAL, boxingType, "<init>", "(" + internalName + ")V", false); mv.visitVarInsn(ASTORE, 2); Label l2 = new Label(); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V", false); Label l3 = new Label(); mv.visitLabel(l3); mv.visitInsn(RETURN); break; case Type.LONG: case Type.DOUBLE: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l23 = new Label(); mv.visitJumpInsn(IFNE, l23); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, internalName); mv.visitInsn(RETURN); mv.visitLabel(l23); mv.visitTypeInsn(NEW, boxingType); mv.visitInsn(DUP); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitMethodInsn(INVOKESPECIAL, boxingType, "<init>", "(" + internalName + ")V", false); mv.visitVarInsn(ASTORE, 3); // Double space l2 = new Label(); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V", false); l3 = new Label(); mv.visitLabel(l3); mv.visitInsn(RETURN); break; case Type.OBJECT: mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l24 = new Label(); mv.visitJumpInsn(IFNE, l24); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, "L" + type.getInternalName() + ";"); mv.visitInsn(RETURN); mv.visitLabel(l24); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V", false); mv.visitInsn(RETURN); break; default: ManipulationProperty.getLogger().log(ManipulationProperty.SEVERE, "Manipulation Error : Cannot create the setter method for the field : " + name + " (" + type + ")"); break; } mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.MethodCreator.java
License:Apache License
/** * Create the setter method for the __cm field. *///from w ww . j a v a 2 s .c om private void createSetInstanceManagerMethod() { MethodVisitor mv = cv.visitMethod(ACC_PRIVATE, "_setInstanceManager", "(Lorg/apache/felix/ipojo/InstanceManager;)V", null, null); mv.visitCode(); // If the given instance manager is null, just returns. mv.visitVarInsn(ALOAD, 1); Label l1 = new Label(); mv.visitJumpInsn(IFNONNULL, l1); mv.visitInsn(RETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", "getRegistredFields", "()Ljava/util/Set;"); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); Label endif = new Label(); mv.visitJumpInsn(IFNULL, endif); Iterator it = m_fields.iterator(); while (it.hasNext()) { String field = (String) it.next(); mv.visitVarInsn(ALOAD, 2); mv.visitLdcInsn(field); mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "contains", "(Ljava/lang/Object;)Z"); Label l3 = new Label(); mv.visitJumpInsn(IFEQ, l3); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_1); mv.visitFieldInsn(PUTFIELD, m_owner, FIELD_FLAG_PREFIX + field, "Z"); mv.visitLabel(l3); } mv.visitLabel(endif); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", "getRegistredMethods", "()Ljava/util/Set;"); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); Label endif2 = new Label(); mv.visitJumpInsn(IFNULL, endif2); for (int i = 0; i < m_methods.size(); i++) { String methodId = (String) m_methods.get(i); if (!methodId.equals("<init>")) { mv.visitVarInsn(ALOAD, 2); mv.visitLdcInsn(methodId); mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "contains", "(Ljava/lang/Object;)Z"); Label l3 = new Label(); mv.visitJumpInsn(IFEQ, l3); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(ICONST_1); mv.visitFieldInsn(PUTFIELD, m_owner, METHOD_FLAG_PREFIX + methodId, "Z"); mv.visitLabel(l3); } } mv.visitLabel(endif2); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.MethodCreator.java
License:Apache License
/** * Create a getter method for an array.//w w w . j a v a2 s .c o m * @param name : field name * @param desc : method description * @param type : contained type (inside the array) */ private void createArraySetter(String name, String desc, Type type) { MethodVisitor mv = cv.visitMethod(0, "__set" + name, desc, null, null); mv.visitCode(); String internalType = desc.substring(1); internalType = internalType.substring(0, internalType.length() - 2); Label l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l2 = new Label(); mv.visitJumpInsn(IFNE, l2); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, internalType); mv.visitInsn(RETURN); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); mv.visitInsn(RETURN); // End mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.MethodCreator.java
License:Apache License
/** * Create a setter method for an array./*from w w w .j av a2 s. c o m*/ * @param name : field name * @param desc : method description * @param type : contained type (inside the array) */ private void createArrayGetter(String name, String desc, Type type) { String methodName = "__get" + name; MethodVisitor mv = cv.visitMethod(0, methodName, desc, null, null); mv.visitCode(); String internalType = desc.substring(2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalType); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitTypeInsn(CHECKCAST, internalType); mv.visitInsn(ARETURN); // End mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.MethodCreator.java
License:Apache License
/** * Create the getter for a field./*from ww w . j ava2s .co m*/ * @param name : field of the dependency * @param desc : description of the getter method * @param type : type to return */ private void createSimpleGetter(String name, String desc, Type type) { String methodName = "__get" + name; MethodVisitor mv = cv.visitMethod(0, methodName, desc, null, null); mv.visitCode(); switch (type.getSort()) { case Type.BOOLEAN: case Type.CHAR: case Type.BYTE: case Type.SHORT: case Type.INT: String internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; String boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; String unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; Label l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(IRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName); mv.visitInsn(type.getOpcode(IRETURN)); break; case Type.LONG: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(LRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName); mv.visitInsn(LRETURN); break; case Type.DOUBLE: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(DRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName); mv.visitInsn(DRETURN); break; case Type.FLOAT: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; unboxingMethod = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][2]; l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, internalName); mv.visitInsn(FRETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 1); mv.visitTypeInsn(CHECKCAST, boxingType); mv.visitVarInsn(ASTORE, 2); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, boxingType, unboxingMethod, "()" + internalName); mv.visitInsn(FRETURN); break; case Type.OBJECT: l0 = new Label(); mv.visitLabel(l0); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); l1 = new Label(); mv.visitJumpInsn(IFNE, l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, name, "L" + type.getInternalName() + ";"); mv.visitInsn(ARETURN); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", GET, "(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;"); mv.visitTypeInsn(CHECKCAST, type.getInternalName()); mv.visitInsn(ARETURN); break; default: ManipulationProperty.getLogger().log(ManipulationProperty.SEVERE, "Manipulation problem in " + m_owner + " : a type is not implemented : " + type); break; } mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.felix.ipojo.manipulation.MethodCreator.java
License:Apache License
/** * Create the setter method for one property. The name of the method is _set+name of the field * @param name : name of the field representing a property * @param desc : description of the setter method * @param type : type of the property//from w ww . j a v a 2s . c o m */ private void createSimpleSetter(String name, String desc, Type type) { MethodVisitor mv = cv.visitMethod(0, "__set" + name, desc, null, null); mv.visitCode(); switch (type.getSort()) { case Type.BOOLEAN: case Type.CHAR: case Type.BYTE: case Type.SHORT: case Type.INT: case Type.FLOAT: String internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; String boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; Label l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l22 = new Label(); mv.visitJumpInsn(IFNE, l22); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, internalName); mv.visitInsn(RETURN); mv.visitLabel(l22); mv.visitTypeInsn(NEW, boxingType); mv.visitInsn(DUP); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitMethodInsn(INVOKESPECIAL, boxingType, "<init>", "(" + internalName + ")V"); mv.visitVarInsn(ASTORE, 2); Label l2 = new Label(); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitInsn(RETURN); break; case Type.LONG: case Type.DOUBLE: internalName = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][0]; boxingType = ManipulationProperty.PRIMITIVE_BOXING_INFORMATION[type.getSort()][1]; l1 = new Label(); mv.visitLabel(l1); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l23 = new Label(); mv.visitJumpInsn(IFNE, l23); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, internalName); mv.visitInsn(RETURN); mv.visitLabel(l23); mv.visitTypeInsn(NEW, boxingType); mv.visitInsn(DUP); mv.visitVarInsn(type.getOpcode(ILOAD), 1); mv.visitMethodInsn(INVOKESPECIAL, boxingType, "<init>", "(" + internalName + ")V"); mv.visitVarInsn(ASTORE, 3); // Double space l2 = new Label(); mv.visitLabel(l2); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); l3 = new Label(); mv.visitLabel(l3); mv.visitInsn(RETURN); break; case Type.OBJECT: mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, FIELD_FLAG_PREFIX + name, "Z"); Label l24 = new Label(); mv.visitJumpInsn(IFNE, l24); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitFieldInsn(PUTFIELD, m_owner, name, "L" + type.getInternalName() + ";"); mv.visitInsn(RETURN); mv.visitLabel(l24); mv.visitVarInsn(ALOAD, 0); mv.visitFieldInsn(GETFIELD, m_owner, IM_FIELD, "Lorg/apache/felix/ipojo/InstanceManager;"); mv.visitVarInsn(ALOAD, 0); mv.visitLdcInsn(name); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "org/apache/felix/ipojo/InstanceManager", SET, "(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V"); mv.visitInsn(RETURN); break; default: ManipulationProperty.getLogger().log(ManipulationProperty.SEVERE, "Manipulation Error : Cannot create the setter method for the field : " + name + " (" + type + ")"); break; } mv.visitMaxs(0, 0); mv.visitEnd(); }
From source file:org.apache.s4.core.gen.OverloadDispatcherGenerator.java
License:Apache License
private void addErrorLogStatement(MethodVisitor mv2) { mv2.visitVarInsn(ALOAD, 0);//www.j ava2s.c o m mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;"); mv2.visitMethodInsn(INVOKESTATIC, "org/slf4j/LoggerFactory", "getLogger", "(Ljava/lang/Class;)Lorg/slf4j/Logger;"); mv2.visitTypeInsn(NEW, "java/lang/StringBuilder"); mv2.visitInsn(DUP); mv2.visitLdcInsn("Cannot dispatch event of type ["); mv2.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V"); mv2.visitVarInsn(ALOAD, 2); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv2.visitLdcInsn("] to PE of type ["); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv2.visitVarInsn(ALOAD, 1); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv2.visitLdcInsn("] : no matching onEvent method found"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); mv2.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;"); mv2.visitMethodInsn(INVOKEINTERFACE, "org/slf4j/Logger", "error", "(Ljava/lang/String;)V"); }
From source file:org.ballerinalang.nativeimpl.jvm.methodvisitor.VisitLdcInsn.java
License:Open Source License
public static void visitLdcInsn(Strand strand, ObjectValue oMv, Object oValue) { MethodVisitor mv = ASMUtil.getRefArgumentNativeData(oMv); if (Long.class.equals(oValue.getClass())) { long longVal = (Long) oValue; mv.visitLdcInsn(longVal); } else if (Double.class.equals(oValue.getClass())) { double doubleVal = (Double) oValue; mv.visitLdcInsn(doubleVal);/*from w w w. jav a 2s . c om*/ } else if (String.class.equals(oValue.getClass())) { String stringVal = (String) oValue; mv.visitLdcInsn(stringVal); } else if (Boolean.class.equals(oValue.getClass())) { boolean booleanValue = (Boolean) oValue; mv.visitLdcInsn(booleanValue); } else if (Integer.class.equals(oValue.getClass())) { int intVal = (Integer) oValue; mv.visitLdcInsn(intVal); } else { throw new UnsupportedOperationException(); } }