This commit is contained in:
redkale
2024-09-19 16:20:34 +08:00
parent f4c4bfda70
commit 5f2abc725b
4 changed files with 42 additions and 76 deletions

View File

@@ -560,6 +560,32 @@ public abstract class ConvertFactory<R extends Reader, W extends Writer> {
return readGetSetFieldName((Method) element);
}
public void sortFieldIndex(final Class clazz, List<AccessibleObject> members) {
Collections.sort(members, (o1, o2) -> {
ConvertColumnEntry ref1 = findRef(clazz, o1);
ConvertColumnEntry ref2 = findRef(clazz, o2);
if ((ref1 != null && ref1.getIndex() > 0) || (ref2 != null && ref2.getIndex() > 0)) {
int idx1 = ref1 == null ? Integer.MAX_VALUE / 2 : ref1.getIndex();
int idx2 = ref2 == null ? Integer.MAX_VALUE / 2 : ref2.getIndex();
if (idx1 != idx2) {
return idx1 - idx2;
}
}
String n1 = ref1 == null || ref1.name().isEmpty() ? readGetSetFieldName(o1) : ref1.name();
String n2 = ref2 == null || ref2.name().isEmpty() ? readGetSetFieldName(o2) : ref2.name();
if (n1 == null && n2 == null) {
return 0;
}
if (n1 == null) {
return -1;
}
if (n2 == null) {
return 1;
}
return n1.compareTo(n2);
});
}
public boolean isSimpleMemberType(Class declaringClass, Type type, Class clazz) {
if (type == String.class) {
return true;

View File

@@ -6,10 +6,14 @@
package org.redkale.convert.json;
import java.lang.reflect.*;
import java.lang.reflect.Type;
import java.util.*;
import org.redkale.asm.*;
import org.redkale.asm.AnnotationVisitor;
import org.redkale.asm.ClassWriter;
import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
import org.redkale.asm.FieldVisitor;
import org.redkale.asm.Label;
import org.redkale.asm.MethodVisitor;
import org.redkale.asm.Opcodes;
import static org.redkale.asm.Opcodes.*;
import org.redkale.convert.*;
import org.redkale.convert.ext.*;
@@ -194,29 +198,7 @@ public abstract class JsonDynEncoder<T> implements Encodeable<JsonWriter, T> {
if (members == null) {
return null;
}
Collections.sort(members, (o1, o2) -> {
ConvertColumnEntry ref1 = factory.findRef(clazz, o1);
ConvertColumnEntry ref2 = factory.findRef(clazz, o2);
if ((ref1 != null && ref1.getIndex() > 0) || (ref2 != null && ref2.getIndex() > 0)) {
int idx1 = ref1 == null ? Integer.MAX_VALUE / 2 : ref1.getIndex();
int idx2 = ref2 == null ? Integer.MAX_VALUE / 2 : ref2.getIndex();
if (idx1 != idx2) {
return idx1 - idx2;
}
}
String n1 = ref1 == null || ref1.name().isEmpty() ? factory.readGetSetFieldName(o1) : ref1.name();
String n2 = ref2 == null || ref2.name().isEmpty() ? factory.readGetSetFieldName(o2) : ref2.name();
if (n1 == null && n2 == null) {
return 0;
}
if (n1 == null) {
return -1;
}
if (n2 == null) {
return 1;
}
return n1.compareTo(n2);
});
factory.sortFieldIndex(clazz, members);
return generateDyncEncoder(factory, clazz, members);
} catch (Exception ex) {
ex.printStackTrace();

View File

@@ -10,31 +10,11 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.redkale.convert.ConvertColumnEntry;
import org.redkale.convert.Encodeable;
import org.redkale.convert.ObjectEncoder;
import org.redkale.convert.ext.BoolArraySimpledCoder;
import org.redkale.convert.ext.BoolSimpledCoder;
import org.redkale.convert.ext.ByteArraySimpledCoder;
import org.redkale.convert.ext.ByteSimpledCoder;
import org.redkale.convert.ext.CharArraySimpledCoder;
import org.redkale.convert.ext.CharSimpledCoder;
import org.redkale.convert.ext.DoubleArraySimpledCoder;
import org.redkale.convert.ext.DoubleSimpledCoder;
import org.redkale.convert.ext.FloatArraySimpledCoder;
import org.redkale.convert.ext.FloatSimpledCoder;
import org.redkale.convert.ext.IntArraySimpledCoder;
import org.redkale.convert.ext.IntSimpledCoder;
import org.redkale.convert.ext.LongArraySimpledCoder;
import org.redkale.convert.ext.LongSimpledCoder;
import org.redkale.convert.ext.ShortArraySimpledCoder;
import org.redkale.convert.ext.ShortSimpledCoder;
import org.redkale.convert.ext.StringArraySimpledCoder;
import org.redkale.convert.ext.StringSimpledCoder;
import org.redkale.convert.*;
import org.redkale.convert.ext.*;
import org.redkale.util.RedkaleClassLoader;
/**
@@ -202,29 +182,7 @@ public abstract class ProtobufDynEncoder<T> implements Encodeable<ProtobufWriter
if (members == null) {
return null;
}
Collections.sort(members, (o1, o2) -> {
ConvertColumnEntry ref1 = factory.findRef(clazz, o1);
ConvertColumnEntry ref2 = factory.findRef(clazz, o2);
if ((ref1 != null && ref1.getIndex() > 0) || (ref2 != null && ref2.getIndex() > 0)) {
int idx1 = ref1 == null ? Integer.MAX_VALUE / 2 : ref1.getIndex();
int idx2 = ref2 == null ? Integer.MAX_VALUE / 2 : ref2.getIndex();
if (idx1 != idx2) {
return idx1 - idx2;
}
}
String n1 = ref1 == null || ref1.name().isEmpty() ? factory.readGetSetFieldName(o1) : ref1.name();
String n2 = ref2 == null || ref2.name().isEmpty() ? factory.readGetSetFieldName(o2) : ref2.name();
if (n1 == null && n2 == null) {
return 0;
}
if (n1 == null) {
return -1;
}
if (n2 == null) {
return 1;
}
return n1.compareTo(n2);
});
factory.sortFieldIndex(clazz, members);
return generateDyncEncoder(factory, clazz, members);
} catch (Exception ex) {
ex.printStackTrace();

View File

@@ -13,22 +13,22 @@ import org.redkale.convert.json.JsonConvert;
* @author zhangjx
*/
public class User {
@ConvertColumn(index = 1)
@ConvertColumn(index = 3)
private Long id;
@ConvertColumn(index = 2)
@ConvertColumn(index = 4)
private String name;
@ConvertColumn(index = 3)
@ConvertColumn(index = 5)
private String nickName;
@ConvertColumn(index = 4)
@ConvertColumn(index = 1)
private Integer age;
@ConvertColumn(index = 5)
@ConvertColumn(index = 6)
private String sex;
@ConvertColumn(index = 6)
@ConvertColumn(index = 2)
private Date createTime;
public static User create() {