From 5f2abc725b77ba3d8aeb13bd2503f8fbb2fd7be0 Mon Sep 17 00:00:00 2001 From: redkale Date: Thu, 19 Sep 2024 16:20:34 +0800 Subject: [PATCH] protobuf --- .../org/redkale/convert/ConvertFactory.java | 26 ++++++++++ .../redkale/convert/json/JsonDynEncoder.java | 32 +++---------- .../convert/pb/ProtobufDynEncoder.java | 48 ++----------------- .../org/redkale/test/convert/pb/User.java | 12 ++--- 4 files changed, 42 insertions(+), 76 deletions(-) diff --git a/src/main/java/org/redkale/convert/ConvertFactory.java b/src/main/java/org/redkale/convert/ConvertFactory.java index fa0a37b4e..660ebb65b 100644 --- a/src/main/java/org/redkale/convert/ConvertFactory.java +++ b/src/main/java/org/redkale/convert/ConvertFactory.java @@ -560,6 +560,32 @@ public abstract class ConvertFactory { return readGetSetFieldName((Method) element); } + public void sortFieldIndex(final Class clazz, List 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; diff --git a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java index f11e2017d..456322425 100644 --- a/src/main/java/org/redkale/convert/json/JsonDynEncoder.java +++ b/src/main/java/org/redkale/convert/json/JsonDynEncoder.java @@ -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 implements Encodeable { 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(); diff --git a/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java b/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java index 816b6632c..2a9bf033f 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufDynEncoder.java @@ -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 implements Encodeable { - 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(); diff --git a/src/test/java/org/redkale/test/convert/pb/User.java b/src/test/java/org/redkale/test/convert/pb/User.java index fde5e2526..163827bc2 100644 --- a/src/test/java/org/redkale/test/convert/pb/User.java +++ b/src/test/java/org/redkale/test/convert/pb/User.java @@ -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() {