List of usage examples for org.objectweb.asm.tree MethodNode visitMethodInsn
@Override public void visitMethodInsn(final int opcodeAndSource, final String owner, final String name, final String descriptor, final boolean isInterface)
From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java
License:Open Source License
private static MethodNode generateSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) { MethodNode setter = new MethodNode(); setter.access = ACC_PUBLIC;/*w ww. ja v a 2 s . co m*/ setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class), getType(Object.class)); setter.name = "set"; setter.exceptions = Collections.emptyList(); setter.maxLocals = 3; setter.maxStack = 2; // load target object setter.visitVarInsn(ALOAD, 1); // cast target object setter.visitTypeInsn(CHECKCAST, getInternalName(type)); // load attribute value setter.visitVarInsn(ALOAD, 2); // convert attribute value if necessary setter.maxStack += CGUtils.adaptToType(setter, smethod.getParameterTypes()[0]); // call real setter setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(), getMethodDescriptor(smethod), false); setter.visitInsn(RETURN); return setter; }
From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java
License:Open Source License
private static MethodNode generateLongSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) { MethodNode setter = new MethodNode(); setter.access = ACC_PUBLIC;/*from w w w. ja v a2 s . co m*/ setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class), getType(long.class)); setter.name = "set"; setter.exceptions = Collections.emptyList(); setter.maxLocals = 4; setter.maxStack = 3; // load target object setter.visitVarInsn(ALOAD, 1); // cast target object setter.visitTypeInsn(CHECKCAST, getInternalName(type)); // load attribute value setter.visitVarInsn(LLOAD, 2); // call real setter setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(), getMethodDescriptor(smethod), false); setter.visitInsn(RETURN); return setter; }
From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java
License:Open Source License
private static MethodNode generateDoubleSetter(Class<? extends AbstractBeanEntityBuilder> type, Method smethod) {//from w w w. j ava 2 s . com MethodNode setter = new MethodNode(); setter.access = ACC_PUBLIC; setter.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class), getType(double.class)); setter.name = "set"; setter.exceptions = Collections.emptyList(); setter.maxLocals = 4; setter.maxStack = 3; // load target object setter.visitVarInsn(ALOAD, 1); // cast target object setter.visitTypeInsn(CHECKCAST, getInternalName(type)); // load attribute value setter.visitVarInsn(DLOAD, 2); // call real setter setter.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(), getMethodDescriptor(smethod), false); setter.visitInsn(RETURN); return setter; }
From source file:org.lenskit.data.entities.AbstractBeanEntityBuilder.java
License:Open Source License
private static MethodNode generateClearer(Class<? extends AbstractBeanEntityBuilder> type, Method smethod, Method cmethod) {//from w ww .jav a 2 s . c o m MethodNode clearer = new MethodNode(); clearer.access = ACC_PUBLIC; clearer.desc = getMethodDescriptor(VOID_TYPE, getType(AbstractBeanEntityBuilder.class)); clearer.name = "clear"; clearer.exceptions = Collections.emptyList(); clearer.maxLocals = 2; clearer.maxStack = 1; if (cmethod != null) { // load target object clearer.visitVarInsn(ALOAD, 1); // cast to target object type clearer.visitTypeInsn(CHECKCAST, getInternalName(type)); // call clearer method clearer.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), cmethod.getName(), getMethodDescriptor(cmethod), false); clearer.visitInsn(RETURN); } else if (!smethod.getParameterTypes()[0].isPrimitive()) { // load target object & cast to type clearer.visitVarInsn(ALOAD, 1); clearer.visitTypeInsn(CHECKCAST, getInternalName(type)); // load null and call setter clearer.visitInsn(ACONST_NULL); clearer.maxStack = 2; clearer.visitMethodInsn(INVOKEVIRTUAL, getInternalName(type), smethod.getName(), getMethodDescriptor(smethod), false); clearer.visitInsn(RETURN); } else { // no clearer and primitive method, throw unsupported operation exception clearer.maxStack = 2; clearer.visitTypeInsn(NEW, "java/lang/UnsupportedOperationException"); clearer.visitInsn(DUP); clearer.visitMethodInsn(INVOKESPECIAL, "java/lang/UnsupportedOperationException", "<init>", "()V", false); clearer.visitInsn(ATHROW); } return clearer; }