private byte[] generateSetterByteCodes(final Method m, final String className) throws Exception { final Class<?> propertyType = m.getParameterTypes()[0]; if (propertyType.isPrimitive()) { return SetterBuilder.createPrimitiveSetter(className, m); } else { return SetterBuilder.createObjectSetter(className, m); } }
private static String toType(Class<?> target) { String name = target.getName(); return toType(name); }
public static byte[] createObjectSetter(final String className, final Field field) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); MethodVisitor mv; Class<?> target = field.getDeclaringClass(); Class<?> property = field.getType(); String targetType = toType(target); String propertyType = toType(property); String classType = toType(className); cw.visit( V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, classType, "Ljava/lang/Object;L" + SETTER_TYPE + "<L" + targetType + ";" + AsmUtils.toTargetTypeDeclaration(propertyType) + ">;", "java/lang/Object", new String[] {SETTER_TYPE}); { 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(); } appendSet(field, cw, target, targetType, propertyType, classType); appendToString(cw); cw.visitEnd(); return AsmUtils.writeClassToFile(className, cw.toByteArray()); }
Class<?> property = AsmUtils.wrappers.get(primitive); String targetType = toType(target); String primitiveType = AsmUtils.primitivesType.get(primitive); String propertyType = toType(property); String classType = toType(className); mv.visitEnd(); appendPrimitiveSynthetic(cw, targetType, primitiveType, propertyType, classType, setMethod, primitiveLoadOp); appendToString(cw);
private static void appendSet(Method method, ClassWriter cw, Class<?> target, String targetType, String propertyType, String classType) { MethodVisitor mv; { mv = cw.visitMethod(ACC_PUBLIC, "set", "(" + AsmUtils.toTargetTypeDeclaration(targetType) + AsmUtils.toTargetTypeDeclaration(propertyType) + ")V", null, new String[] { "java/lang/Exception" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); AsmUtils.invoke(mv, target, method.getName(), "(" + AsmUtils.toTargetTypeDeclaration(propertyType) + ")" + AsmUtils.toTargetTypeDeclaration(method.getReturnType())); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } appendSynthetic(cw, targetType, propertyType, classType); }
public static byte[] createObjectSetter(final String className, final Method method) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); MethodVisitor mv; Class<?> target = method.getDeclaringClass(); Class<?> property = method.getParameterTypes()[0]; String targetType = toType(target); String propertyType = toType(property); String classType = toType(className); cw.visit( V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, classType, "Ljava/lang/Object;L" + SETTER_TYPE + "<L" + targetType + ";" + AsmUtils.toTargetTypeDeclaration(propertyType) + ">;", "java/lang/Object", new String[] {SETTER_TYPE}); { 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(); } appendSet(method, cw, target, targetType, propertyType, classType); appendToString(cw); cw.visitEnd(); return AsmUtils.writeClassToFile(className, cw.toByteArray()); }
Class<?> property = AsmUtils.wrappers.get(primitive); String targetType = toType(target); String primitiveType = AsmUtils.primitivesType.get(primitive); String propertyType = toType(property); String classType = toType(className); mv.visitEnd(); appendPrimitiveSynthetic(cw, targetType, primitiveType, propertyType, classType, setMethod, primitiveLoadOp); appendToString(cw);
private static void appendSet(Method method, ClassWriter cw, Class<?> target, String targetType, String propertyType, String classType) { MethodVisitor mv; { mv = cw.visitMethod(ACC_PUBLIC, "set", "(" + AsmUtils.toTargetTypeDeclaration(targetType) + AsmUtils.toTargetTypeDeclaration(propertyType) + ")V", null, new String[] { "java/lang/Exception" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); AsmUtils.invoke(mv, target, method.getName(), "(" + AsmUtils.toTargetTypeDeclaration(propertyType) + ")" + AsmUtils.toTargetTypeDeclaration(method.getReturnType())); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } appendSynthetic(cw, targetType, propertyType, classType); }
public static byte[] createObjectSetter(final String className, final Field field) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); MethodVisitor mv; Class<?> target = field.getDeclaringClass(); Class<?> property = field.getType(); String targetType = toType(target); String propertyType = toType(property); String classType = toType(className); cw.visit( V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, classType, "Ljava/lang/Object;L" + SETTER_TYPE + "<L" + targetType + ";" + AsmUtils.toTargetTypeDeclaration(propertyType) + ">;", "java/lang/Object", new String[] {SETTER_TYPE}); { 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(); } appendSet(field, cw, target, targetType, propertyType, classType); appendToString(cw); cw.visitEnd(); return AsmUtils.writeClassToFile(className, cw.toByteArray()); }
Class<?> property = AsmUtils.wrappers.get(primitive); String targetType = toType(target); String primitiveType = AsmUtils.primitivesType.get(primitive); String propertyType = toType(property); String classType = toType(className); mv.visitEnd(); appendPrimitiveSynthetic(cw, targetType, primitiveType, propertyType, classType, setMethod, primitiveLoadOp); appendToString(cw);
private byte[] generateSetterByteCodes(final Field m, final String className) throws Exception { final Class<?> propertyType = m.getType(); if (propertyType.isPrimitive()) { return SetterBuilder.createPrimitiveSetter(className, m); } else { return SetterBuilder.createObjectSetter(className, m); } }
private static void appendSet(Field field, ClassWriter cw, Class<?> target, String targetType, String propertyType, String classType) { MethodVisitor mv; { mv = cw.visitMethod(ACC_PUBLIC, "set", "(" + AsmUtils.toTargetTypeDeclaration(targetType) + AsmUtils.toTargetTypeDeclaration(propertyType) + ")V", null, new String[] { "java/lang/Exception" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(PUTFIELD, targetType, field.getName(), AsmUtils.toTargetTypeDeclaration(propertyType)); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } appendSynthetic(cw, targetType, propertyType, classType); }
private static String toType(Class<?> target) { String name = target.getName(); return toType(name); }
public static byte[] createObjectSetter(final String className, final Method method) throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS); MethodVisitor mv; Class<?> target = method.getDeclaringClass(); Class<?> property = method.getParameterTypes()[0]; String targetType = toType(target); String propertyType = toType(property); String classType = toType(className); cw.visit( V1_6, ACC_PUBLIC + ACC_FINAL + ACC_SUPER, classType, "Ljava/lang/Object;L" + SETTER_TYPE + "<L" + targetType + ";" + AsmUtils.toTargetTypeDeclaration(propertyType) + ">;", "java/lang/Object", new String[] {SETTER_TYPE}); { 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(); } appendSet(method, cw, target, targetType, propertyType, classType); appendToString(cw); cw.visitEnd(); return AsmUtils.writeClassToFile(className, cw.toByteArray()); }
Class<?> property = AsmUtils.wrappers.get(primitive); String targetType = toType(target); String primitiveType = AsmUtils.primitivesType.get(primitive); String propertyType = toType(property); String classType = toType(className); mv.visitEnd(); appendPrimitiveSynthetic(cw, targetType, primitiveType, propertyType, classType, setMethod, primitiveLoadOp); appendToString(cw);
private byte[] generateSetterByteCodes(final Field m, final String className) throws Exception { final Class<?> propertyType = m.getType(); if (propertyType.isPrimitive()) { return SetterBuilder.createPrimitiveSetter(className, m); } else { return SetterBuilder.createObjectSetter(className, m); } }
private static void appendSet(Field field, ClassWriter cw, Class<?> target, String targetType, String propertyType, String classType) { MethodVisitor mv; { mv = cw.visitMethod(ACC_PUBLIC, "set", "(" + AsmUtils.toTargetTypeDeclaration(targetType) + AsmUtils.toTargetTypeDeclaration(propertyType) + ")V", null, new String[] { "java/lang/Exception" }); mv.visitCode(); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitFieldInsn(PUTFIELD, targetType, field.getName(), AsmUtils.toTargetTypeDeclaration(propertyType)); mv.visitInsn(RETURN); mv.visitMaxs(2, 3); mv.visitEnd(); } appendSynthetic(cw, targetType, propertyType, classType); }
private byte[] generateSetterByteCodes(final Method m, final String className) throws Exception { final Class<?> propertyType = m.getParameterTypes()[0]; if (propertyType.isPrimitive()) { return SetterBuilder.createPrimitiveSetter(className, m); } else { return SetterBuilder.createObjectSetter(className, m); } }