EntityFullFunc
This commit is contained in:
@@ -185,8 +185,25 @@ public final class Asms {
|
|||||||
} else if (clazz == double.class) {
|
} else if (clazz == double.class) {
|
||||||
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
|
||||||
|
} else if (clazz == boolean[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[Z");
|
||||||
|
} else if (clazz == byte[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[B");
|
||||||
|
} else if (clazz == short[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[S");
|
||||||
|
} else if (clazz == char[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[C");
|
||||||
|
} else if (clazz == int[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[I");
|
||||||
|
} else if (clazz == float[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[F");
|
||||||
|
} else if (clazz == long[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[J");
|
||||||
|
} else if (clazz == double[].class) {
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[D");
|
||||||
} else {
|
} else {
|
||||||
mv.visitTypeInsn(CHECKCAST, clazz.getName().replace('.', '/'));
|
mv.visitTypeInsn(
|
||||||
|
CHECKCAST, (clazz.isArray() ? "[" : "") + clazz.getName().replace('.', '/'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -362,9 +362,10 @@ public class EntityBuilder<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Object[] cps = new Object[this.constructorParameters.length];
|
Attribute<T, Serializable>[] constructorAttrs = this.constructorAttributes;
|
||||||
for (int i = 0; i < this.constructorAttributes.length; i++) {
|
Object[] cps = new Object[constructorAttrs.length];
|
||||||
Attribute<T, Serializable> attr = this.constructorAttributes[i];
|
for (int i = 0; i < constructorAttrs.length; i++) {
|
||||||
|
Attribute<T, Serializable> attr = constructorAttrs[i];
|
||||||
String sqlCol = getSQLColumn(null, attr.field());
|
String sqlCol = getSQLColumn(null, attr.field());
|
||||||
if (sqlColumns.contains(sqlCol)) {
|
if (sqlColumns.contains(sqlCol)) {
|
||||||
cps[i] = getFieldValue(row, attr, 0);
|
cps[i] = getFieldValue(row, attr, 0);
|
||||||
@@ -425,9 +426,10 @@ public class EntityBuilder<T> {
|
|||||||
if (this.constructorParameters == null) {
|
if (this.constructorParameters == null) {
|
||||||
obj = creator.create();
|
obj = creator.create();
|
||||||
} else {
|
} else {
|
||||||
Object[] cps = new Object[this.constructorParameters.length];
|
Attribute<T, Serializable>[] constructorAttrs = this.constructorAttributes;
|
||||||
for (int i = 0; i < this.constructorAttributes.length; i++) {
|
Object[] cps = new Object[constructorAttrs.length];
|
||||||
Attribute<T, Serializable> attr = this.constructorAttributes[i];
|
for (int i = 0; i < constructorAttrs.length; i++) {
|
||||||
|
Attribute<T, Serializable> attr = constructorAttrs[i];
|
||||||
if (sels.test(attr.field())) {
|
if (sels.test(attr.field())) {
|
||||||
cps[i] = getFieldValue(row, attr, 0);
|
cps[i] = getFieldValue(row, attr, 0);
|
||||||
}
|
}
|
||||||
@@ -460,6 +462,9 @@ public class EntityBuilder<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public T getFullEntityValue(final Serializable... values) {
|
public T getFullEntityValue(final Serializable... values) {
|
||||||
|
if (this.fullFunc != null) {
|
||||||
|
return this.fullFunc.getObject(values);
|
||||||
|
}
|
||||||
return getEntityValue(
|
return getEntityValue(
|
||||||
constructorAttributes, constructorAttributes == null ? attributes : unconstructorAttributes, values);
|
constructorAttributes, constructorAttributes == null ? attributes : unconstructorAttributes, values);
|
||||||
}
|
}
|
||||||
@@ -491,7 +496,7 @@ public class EntityBuilder<T> {
|
|||||||
if (this.constructorParameters == null) {
|
if (this.constructorParameters == null) {
|
||||||
obj = creator.create();
|
obj = creator.create();
|
||||||
} else {
|
} else {
|
||||||
Object[] cps = new Object[this.constructorParameters.length];
|
Object[] cps = new Object[constructorAttrs.length];
|
||||||
for (int i = 0; i < constructorAttrs.length; i++) {
|
for (int i = 0; i < constructorAttrs.length; i++) {
|
||||||
Attribute<T, Serializable> attr = constructorAttrs[i];
|
Attribute<T, Serializable> attr = constructorAttrs[i];
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
@@ -530,7 +535,7 @@ public class EntityBuilder<T> {
|
|||||||
if (this.constructorParameters == null) {
|
if (this.constructorParameters == null) {
|
||||||
obj = creator.create();
|
obj = creator.create();
|
||||||
} else {
|
} else {
|
||||||
Object[] cps = new Object[this.constructorParameters.length];
|
Object[] cps = new Object[constructorAttrs.length];
|
||||||
for (int i = 0; i < constructorAttrs.length; i++) {
|
for (int i = 0; i < constructorAttrs.length; i++) {
|
||||||
Attribute<T, Serializable> attr = constructorAttrs[i];
|
Attribute<T, Serializable> attr = constructorAttrs[i];
|
||||||
if (attr != null) {
|
if (attr != null) {
|
||||||
|
|||||||
@@ -7,18 +7,18 @@ package org.redkale.source;
|
|||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.redkale.annotation.ClassDepends;
|
import org.redkale.annotation.ClassDepends;
|
||||||
import org.redkale.asm.AnnotationVisitor;
|
|
||||||
import org.redkale.asm.Asms;
|
import org.redkale.asm.Asms;
|
||||||
import org.redkale.asm.ClassWriter;
|
import org.redkale.asm.ClassWriter;
|
||||||
import org.redkale.asm.FieldVisitor;
|
|
||||||
import org.redkale.asm.Label;
|
import org.redkale.asm.Label;
|
||||||
import org.redkale.asm.MethodVisitor;
|
import org.redkale.asm.MethodVisitor;
|
||||||
import org.redkale.asm.Opcodes;
|
import org.redkale.asm.Opcodes;
|
||||||
|
import static org.redkale.asm.Opcodes.AALOAD;
|
||||||
import static org.redkale.asm.Opcodes.ACC_BRIDGE;
|
import static org.redkale.asm.Opcodes.ACC_BRIDGE;
|
||||||
import static org.redkale.asm.Opcodes.ACC_FINAL;
|
import static org.redkale.asm.Opcodes.ACC_FINAL;
|
||||||
import static org.redkale.asm.Opcodes.ACC_PUBLIC;
|
import static org.redkale.asm.Opcodes.ACC_PUBLIC;
|
||||||
import static org.redkale.asm.Opcodes.ACC_SUPER;
|
import static org.redkale.asm.Opcodes.ACC_SUPER;
|
||||||
import static org.redkale.asm.Opcodes.ACC_SYNTHETIC;
|
import static org.redkale.asm.Opcodes.ACC_SYNTHETIC;
|
||||||
|
import static org.redkale.asm.Opcodes.ACC_VARARGS;
|
||||||
import static org.redkale.asm.Opcodes.ACONST_NULL;
|
import static org.redkale.asm.Opcodes.ACONST_NULL;
|
||||||
import static org.redkale.asm.Opcodes.ALOAD;
|
import static org.redkale.asm.Opcodes.ALOAD;
|
||||||
import static org.redkale.asm.Opcodes.ANEWARRAY;
|
import static org.redkale.asm.Opcodes.ANEWARRAY;
|
||||||
@@ -68,6 +68,8 @@ public abstract class EntityFullFunc<T> {
|
|||||||
|
|
||||||
public abstract T getObject(DataResultSetRow row);
|
public abstract T getObject(DataResultSetRow row);
|
||||||
|
|
||||||
|
public abstract T getObject(Serializable... values);
|
||||||
|
|
||||||
@ClassDepends
|
@ClassDepends
|
||||||
protected void setFieldValue(int attrIndex, DataResultSetRow row, T obj) {
|
protected void setFieldValue(int attrIndex, DataResultSetRow row, T obj) {
|
||||||
Attribute<T, Serializable> attr = attrs[attrIndex];
|
Attribute<T, Serializable> attr = attrs[attrIndex];
|
||||||
@@ -99,6 +101,7 @@ public abstract class EntityFullFunc<T> {
|
|||||||
final String rowDesc = Type.getDescriptor(DataResultSetRow.class);
|
final String rowDesc = Type.getDescriptor(DataResultSetRow.class);
|
||||||
final String rowName = DataResultSetRow.class.getName().replace('.', '/');
|
final String rowName = DataResultSetRow.class.getName().replace('.', '/');
|
||||||
final String objectDesc = Type.getDescriptor(Object.class);
|
final String objectDesc = Type.getDescriptor(Object.class);
|
||||||
|
final String serisDesc = Type.getDescriptor(Serializable[].class);
|
||||||
|
|
||||||
ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
ClassLoader loader = Thread.currentThread().getContextClassLoader();
|
||||||
if (String.class.getClassLoader() != entityType.getClassLoader()) {
|
if (String.class.getClassLoader() != entityType.getClassLoader()) {
|
||||||
@@ -117,9 +120,7 @@ public abstract class EntityFullFunc<T> {
|
|||||||
|
|
||||||
// -------------------------------------------------------------
|
// -------------------------------------------------------------
|
||||||
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
|
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
|
||||||
FieldVisitor fv;
|
|
||||||
MethodVisitor mv;
|
MethodVisitor mv;
|
||||||
AnnotationVisitor av0;
|
|
||||||
cw.visit(
|
cw.visit(
|
||||||
V11,
|
V11,
|
||||||
ACC_PUBLIC + ACC_FINAL + ACC_SUPER,
|
ACC_PUBLIC + ACC_FINAL + ACC_SUPER,
|
||||||
@@ -150,7 +151,7 @@ public abstract class EntityFullFunc<T> {
|
|||||||
mv.visitMaxs(4, 4);
|
mv.visitMaxs(4, 4);
|
||||||
mv.visitEnd();
|
mv.visitEnd();
|
||||||
}
|
}
|
||||||
{ // getObject
|
{ // getObject(DataResultSetRow row)
|
||||||
mv = cw.visitMethod(ACC_PUBLIC, "getObject", "(" + rowDesc + ")" + entityDesc, null, null);
|
mv = cw.visitMethod(ACC_PUBLIC, "getObject", "(" + rowDesc + ")" + entityDesc, null, null);
|
||||||
mv.visitVarInsn(ALOAD, 1);
|
mv.visitVarInsn(ALOAD, 1);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "wasNull", "()Z", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "wasNull", "()Z", true);
|
||||||
@@ -185,12 +186,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
if (attr.type() == boolean.class) {
|
if (attr.type() == boolean.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(ICONST_0);
|
mv.visitInsn(ICONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBoolean", "(IZ)Z", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBoolean", "(IZ)Z", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Z)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -203,12 +205,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == short.class) {
|
} else if (attr.type() == short.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(ICONST_0);
|
mv.visitInsn(ICONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getShort", "(IS)S", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getShort", "(IS)S", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(S)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -221,12 +224,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == int.class) {
|
} else if (attr.type() == int.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(ICONST_0);
|
mv.visitInsn(ICONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getInteger", "(II)I", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getInteger", "(II)I", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(I)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -239,12 +243,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == float.class) {
|
} else if (attr.type() == float.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(FCONST_0);
|
mv.visitInsn(FCONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getFloat", "(IF)F", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getFloat", "(IF)F", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(F)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -257,12 +262,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == long.class) {
|
} else if (attr.type() == long.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(LCONST_0);
|
mv.visitInsn(LCONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getLong", "(IJ)J", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getLong", "(IJ)J", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(J)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -275,12 +281,13 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == double.class) {
|
} else if (attr.type() == double.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitInsn(DCONST_0);
|
mv.visitInsn(DCONST_0);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getDouble", "(ID)D", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getDouble", "(ID)D", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(D)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -293,12 +300,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Boolean.class) {
|
} else if (attr.type() == Boolean.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBoolean", "(I)Ljava/lang/Boolean;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBoolean", "(I)Ljava/lang/Boolean;", true);
|
||||||
mv.visitMethodInsn(
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Boolean;)V", false);
|
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -310,11 +317,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Short.class) {
|
} else if (attr.type() == Short.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getShort", "(I)Ljava/lang/Short;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getShort", "(I)Ljava/lang/Short;", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Short;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -326,12 +334,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Integer.class) {
|
} else if (attr.type() == Integer.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getInteger", "(I)Ljava/lang/Integer;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getInteger", "(I)Ljava/lang/Integer;", true);
|
||||||
mv.visitMethodInsn(
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Integer;)V", false);
|
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -343,11 +351,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Float.class) {
|
} else if (attr.type() == Float.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getFloat", "(I)Ljava/lang/Float;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getFloat", "(I)Ljava/lang/Float;", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Float;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -359,11 +368,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Long.class) {
|
} else if (attr.type() == Long.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getLong", "(I)Ljava/lang/Long;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getLong", "(I)Ljava/lang/Long;", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Long;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -375,11 +385,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == Double.class) {
|
} else if (attr.type() == Double.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getDouble", "(I)Ljava/lang/Double;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getDouble", "(I)Ljava/lang/Double;", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/Double;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -391,11 +402,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == String.class) {
|
} else if (attr.type() == String.class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getString", "(I)Ljava/lang/String;", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getString", "(I)Ljava/lang/String;", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "(Ljava/lang/String;)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -407,11 +419,12 @@ public abstract class EntityFullFunc<T> {
|
|||||||
}
|
}
|
||||||
} else if (attr.type() == byte[].class) {
|
} else if (attr.type() == byte[].class) {
|
||||||
if (setter != null) {
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
mv.visitVarInsn(ALOAD, 1); // row
|
mv.visitVarInsn(ALOAD, 1); // row
|
||||||
Asms.visitInsn(mv, attrIndex);
|
Asms.visitInsn(mv, attrIndex);
|
||||||
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBytes", "(I)[B", true);
|
mv.visitMethodInsn(INVOKEINTERFACE, rowName, "getBytes", "(I)[B", true);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), "([B)V", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
continue;
|
continue;
|
||||||
} else if (field != null) {
|
} else if (field != null) {
|
||||||
mv.visitVarInsn(ALOAD, 2); // obj
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
@@ -435,7 +448,7 @@ public abstract class EntityFullFunc<T> {
|
|||||||
mv.visitMaxs(5, 3);
|
mv.visitMaxs(5, 3);
|
||||||
mv.visitEnd();
|
mv.visitEnd();
|
||||||
}
|
}
|
||||||
{ // 虚拟 getObject 方法
|
{ // 虚拟 getObject(DataResultSetRow row)
|
||||||
mv = cw.visitMethod(
|
mv = cw.visitMethod(
|
||||||
ACC_PUBLIC | ACC_BRIDGE | ACC_SYNTHETIC, "getObject", "(" + rowDesc + ")" + objectDesc, null, null);
|
ACC_PUBLIC | ACC_BRIDGE | ACC_SYNTHETIC, "getObject", "(" + rowDesc + ")" + objectDesc, null, null);
|
||||||
mv.visitVarInsn(ALOAD, 0);
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
@@ -445,6 +458,320 @@ public abstract class EntityFullFunc<T> {
|
|||||||
mv.visitMaxs(2, 2);
|
mv.visitMaxs(2, 2);
|
||||||
mv.visitEnd();
|
mv.visitEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{ // getObject(Serializable... values)
|
||||||
|
mv = cw.visitMethod(ACC_PUBLIC | ACC_VARARGS, "getObject", "(" + serisDesc + ")" + entityDesc, null, null);
|
||||||
|
// creator.create()
|
||||||
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
|
mv.visitFieldInsn(GETFIELD, supDynName, "creator", creatorDesc);
|
||||||
|
mv.visitInsn(ICONST_0);
|
||||||
|
mv.visitTypeInsn(ANEWARRAY, "java/lang/Object");
|
||||||
|
mv.visitMethodInsn(INVOKEINTERFACE, creatorName, "create", "([Ljava/lang/Object;)" + objectDesc, true);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, entityName);
|
||||||
|
mv.visitVarInsn(ASTORE, 2);
|
||||||
|
|
||||||
|
for (int i = 0; i < attrs.length; i++) {
|
||||||
|
final int attrIndex = i;
|
||||||
|
final Attribute<T, Serializable> attr = attrs[i];
|
||||||
|
java.lang.reflect.Method setter = null;
|
||||||
|
java.lang.reflect.Field field = null;
|
||||||
|
try {
|
||||||
|
setter = entityType.getMethod("set" + Utility.firstCharUpperCase(attr.field()), attr.type());
|
||||||
|
} catch (Exception e) {
|
||||||
|
try {
|
||||||
|
field = entityType.getField(attr.field());
|
||||||
|
} catch (Exception e2) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (setter == null && field == null) {
|
||||||
|
throw new SourceException("Not found '" + attr.field() + "' setter method or public field ");
|
||||||
|
}
|
||||||
|
if (attr.type() == boolean.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Z");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == short.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Short");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Short");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Short", "shortValue", "()S", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "S");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == int.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "I");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == float.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Float");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Float");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Float", "floatValue", "()F", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "F");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == long.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Long", "longValue", "()J", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "J");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == double.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Double", "doubleValue", "()D", false);
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "D");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Boolean.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Boolean;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Short.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Short");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Short");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Short;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Integer.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Integer");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Integer;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Float.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Float");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Float");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Float;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Long.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Long");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Long;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == Double.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/Double");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/Double;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == String.class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/String");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "java/lang/String");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/lang/String;");
|
||||||
|
}
|
||||||
|
} else if (attr.type() == byte[].class) {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[B");
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
mv.visitTypeInsn(CHECKCAST, "[B");
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "[B");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (setter != null) {
|
||||||
|
String desc = Type.getMethodDescriptor(setter);
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
Asms.visitCheckCast(mv, setter.getParameterTypes()[0]);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
|
||||||
|
} else if (field != null) {
|
||||||
|
String desc = Type.getDescriptor(field.getType());
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitVarInsn(ALOAD, 1); // values
|
||||||
|
Asms.visitInsn(mv, attrIndex);
|
||||||
|
mv.visitInsn(AALOAD);
|
||||||
|
Asms.visitCheckCast(mv, field.getType());
|
||||||
|
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), desc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mv.visitVarInsn(ALOAD, 2); // obj
|
||||||
|
mv.visitInsn(ARETURN);
|
||||||
|
mv.visitMaxs(3, 3);
|
||||||
|
mv.visitEnd();
|
||||||
|
}
|
||||||
|
{ // 虚拟 getObject(Serializable... values)
|
||||||
|
int access = ACC_PUBLIC | ACC_BRIDGE | ACC_VARARGS | ACC_SYNTHETIC;
|
||||||
|
mv = cw.visitMethod(access, "getObject", "(" + serisDesc + ")" + objectDesc, null, null);
|
||||||
|
mv.visitVarInsn(ALOAD, 0);
|
||||||
|
mv.visitVarInsn(ALOAD, 1);
|
||||||
|
mv.visitMethodInsn(INVOKEVIRTUAL, newDynName, "getObject", "(" + serisDesc + ")" + entityDesc, false);
|
||||||
|
mv.visitInsn(ARETURN);
|
||||||
|
mv.visitMaxs(2, 2);
|
||||||
|
mv.visitEnd();
|
||||||
|
}
|
||||||
cw.visitEnd();
|
cw.visitEnd();
|
||||||
|
|
||||||
byte[] bytes = cw.toByteArray();
|
byte[] bytes = cw.toByteArray();
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public class FullBean {
|
|||||||
|
|
||||||
private double money;
|
private double money;
|
||||||
|
|
||||||
|
private byte bit;
|
||||||
|
|
||||||
private Boolean flag2;
|
private Boolean flag2;
|
||||||
|
|
||||||
private Short status2;
|
private Short status2;
|
||||||
@@ -58,8 +60,17 @@ public class FullBean {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(String name) {
|
public FullBean setName(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte getBit() {
|
||||||
|
return bit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBit(byte bit) {
|
||||||
|
this.bit = bit;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getImg() {
|
public byte[] getImg() {
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ public class FullBean2 {
|
|||||||
|
|
||||||
public double money;
|
public double money;
|
||||||
|
|
||||||
|
public byte bit;
|
||||||
|
|
||||||
public Boolean flag2;
|
public Boolean flag2;
|
||||||
|
|
||||||
public Short status2;
|
public Short status2;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
package org.redkale.test.source;
|
package org.redkale.test.source;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
import java.math.BigInteger;
|
||||||
import org.redkale.source.DataResultSetRow;
|
import org.redkale.source.DataResultSetRow;
|
||||||
import org.redkale.source.EntityFullFunc;
|
import org.redkale.source.EntityFullFunc;
|
||||||
import org.redkale.util.Attribute;
|
import org.redkale.util.Attribute;
|
||||||
@@ -32,6 +33,8 @@ public class FullBeanDynFunc extends EntityFullFunc<FullBean> {
|
|||||||
|
|
||||||
setFieldValue(4, row, rs); // number: BigInteger
|
setFieldValue(4, row, rs); // number: BigInteger
|
||||||
|
|
||||||
|
setFieldValue(4, row, rs); // bit: Byte
|
||||||
|
|
||||||
rs.setFlag(row.getBoolean(5, false));
|
rs.setFlag(row.getBoolean(5, false));
|
||||||
rs.setStatus(row.getShort(6, (short) 0));
|
rs.setStatus(row.getShort(6, (short) 0));
|
||||||
rs.setId(row.getInteger(7, 0));
|
rs.setId(row.getInteger(7, 0));
|
||||||
@@ -47,4 +50,26 @@ public class FullBeanDynFunc extends EntityFullFunc<FullBean> {
|
|||||||
rs.setMoney2(row.getDouble(10));
|
rs.setMoney2(row.getDouble(10));
|
||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FullBean getObject(Serializable... values) {
|
||||||
|
FullBean rs = creator.create();
|
||||||
|
rs.setSeqid((Long) values[0]);
|
||||||
|
rs.setName((String) values[1]);
|
||||||
|
rs.setImg((byte[]) values[2]);
|
||||||
|
rs.setNumber((BigInteger) values[3]);
|
||||||
|
rs.setFlag((Boolean) values[4]);
|
||||||
|
rs.setStatus((Short) values[5]);
|
||||||
|
rs.setId((Integer) values[6]);
|
||||||
|
rs.setCreateTime((Long) values[7]);
|
||||||
|
rs.setPoint((Float) values[8]);
|
||||||
|
rs.setMoney((Double) values[9]);
|
||||||
|
rs.setFlag2((Boolean) values[10]);
|
||||||
|
rs.setStatus2((Short) values[11]);
|
||||||
|
rs.setId2((Integer) values[12]);
|
||||||
|
rs.setCreateTime2((Long) values[13]);
|
||||||
|
rs.setPoint2((Float) values[14]);
|
||||||
|
rs.setMoney2((Double) values[15]);
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user