From 4d31f383bd6615adca1a81a124f94ba1076aaab9 Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 29 Oct 2022 11:08:02 +0800 Subject: [PATCH] =?UTF-8?q?perf[protocol]:=20=E5=8D=8F=E8=AE=AE=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E6=8C=89=E7=85=A7?= =?UTF-8?q?=E5=8E=9F=E6=9C=AC=E7=9A=84=E9=A1=BA=E5=BA=8F=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E7=9A=84=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../protocol/exception/UnknownException.java | 4 ++++ .../generate/GenerateProtocolFile.java | 12 ++++++++++++ .../serializer/cpp/GenerateCppUtils.java | 13 +++++-------- .../serializer/csharp/GenerateCsUtils.java | 15 ++++++++------- .../serializer/gdscript/GenerateGdUtils.java | 18 +++++++----------- .../serializer/go/GenerateGoUtils.java | 14 +++++--------- .../serializer/typescript/GenerateTsUtils.java | 14 ++++++-------- 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/exception/UnknownException.java b/protocol/src/main/java/com/zfoo/protocol/exception/UnknownException.java index 4a48a653..cecbbb2c 100644 --- a/protocol/src/main/java/com/zfoo/protocol/exception/UnknownException.java +++ b/protocol/src/main/java/com/zfoo/protocol/exception/UnknownException.java @@ -20,6 +20,10 @@ import com.zfoo.protocol.util.StringUtils; */ public class UnknownException extends RuntimeException { + public UnknownException() { + super(); + } + public UnknownException(Throwable cause) { super(cause); } diff --git a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java index 67039c71..2b6a8f46 100644 --- a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java +++ b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java @@ -13,6 +13,7 @@ package com.zfoo.protocol.generate; import com.zfoo.protocol.ProtocolManager; +import com.zfoo.protocol.exception.UnknownException; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolRegistration; @@ -27,6 +28,7 @@ import com.zfoo.protocol.serializer.protobuf.GenerateProtobufUtils; import com.zfoo.protocol.serializer.typescript.GenerateTsUtils; import java.io.IOException; +import java.lang.reflect.Field; import java.util.Arrays; import java.util.HashSet; import java.util.Objects; @@ -181,4 +183,14 @@ public abstract class GenerateProtocolFile { var protocolParam = generateOperation.getProtocolParam(); } + + public static int indexOf(Field[] fields, Field field) { + for (int index = 0; index < fields.length; index++) { + if (fields[index].equals(field)) { + return index; + } + } + throw new UnknownException(); + } + } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java index a2e73449..3cc64756 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java @@ -28,10 +28,7 @@ import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.serializer.reflect.*; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.FileUtils; -import com.zfoo.protocol.util.IOUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import java.io.File; import java.io.IOException; @@ -181,10 +178,10 @@ public abstract class GenerateCppUtils { var fieldRegistrations = registration.getFieldRegistrations(); var cppBuilder = new StringBuilder(); - // 协议的属性生成 - for (int i = 0; i < fields.length; i++) { - Field field = fields[i]; - IFieldRegistration fieldRegistration = fieldRegistrations[i]; + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; var fieldName = field.getName(); var propertyTypeAndName = cppSerializer(fieldRegistration.serializer()).field(field, fieldRegistration); var propertyType = propertyTypeAndName.getKey(); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java index 76754aab..e5b5bb18 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java @@ -20,12 +20,10 @@ import com.zfoo.protocol.generate.GenerateProtocolPath; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.anno.Compatible; +import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.reflect.*; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.FileUtils; -import com.zfoo.protocol.util.IOUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import java.io.File; import java.io.IOException; @@ -128,11 +126,14 @@ public abstract class GenerateCsUtils { } private static String fieldDefinition(ProtocolRegistration registration) { - var protocolId = registration.protocolId(); + var protocolId = registration.getId(); var fields = registration.getFields(); + var fieldRegistrations = registration.getFieldRegistrations(); var csBuilder = new StringBuilder(); - // 协议的属性生成 - for (var field : fields) { + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; var fieldName = field.getName(); var propertyType = toCsClassName(field.getGenericType().getTypeName()); var propertyFullName = StringUtils.format("public {} {};", propertyType, fieldName); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java index 33d9b29b..589c648d 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java @@ -26,18 +26,12 @@ import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.serializer.reflect.*; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.FileUtils; -import com.zfoo.protocol.util.IOUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import java.io.File; import java.io.IOException; import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.zfoo.protocol.util.FileUtils.LS; import static com.zfoo.protocol.util.StringUtils.TAB_ASCII; @@ -164,9 +158,11 @@ public abstract class GenerateGdUtils { var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); var gdBuilder = new StringBuilder(); - for (int i = 0; i < fields.length; i++) { - Field field = fields[i]; - IFieldRegistration fieldRegistration = fieldRegistrations[i]; + // 生成源代码字段的时候,按照原始定义的方式生成 + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; var fieldName = field.getName(); // 生成注释 var fieldNote = GenerateProtocolNote.fieldNote(protocolId, fieldName, CodeLanguage.GdScript); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/go/GenerateGoUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/go/GenerateGoUtils.java index ce42c14a..63db6dfa 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/go/GenerateGoUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/go/GenerateGoUtils.java @@ -24,10 +24,7 @@ import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.reflect.*; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.FileUtils; -import com.zfoo.protocol.util.IOUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import java.io.File; import java.io.IOException; @@ -150,12 +147,11 @@ public abstract class GenerateGoUtils { var protocolId = registration.protocolId(); var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); - var goBuilder = new StringBuilder(); - // 协议的属性生成 - for (int i = 0; i < fields.length; i++) { - Field field = fields[i]; - IFieldRegistration fieldRegistration = fieldRegistrations[i]; + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; var fieldName = StringUtils.capitalize(field.getName()); var fieldType = goSerializer(fieldRegistration.serializer()).fieldType(field, fieldRegistration); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java index a495f800..3448d3cf 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java @@ -22,13 +22,11 @@ import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.anno.Compatible; +import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.serializer.reflect.*; -import com.zfoo.protocol.util.ClassUtils; -import com.zfoo.protocol.util.FileUtils; -import com.zfoo.protocol.util.IOUtils; -import com.zfoo.protocol.util.StringUtils; +import com.zfoo.protocol.util.*; import java.io.File; import java.io.IOException; @@ -158,11 +156,11 @@ public abstract class GenerateTsUtils { var protocolId = registration.protocolId(); var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); - var fieldDefinitionBuilder = new StringBuilder(); - for (var i = 0; i < fields.length; i++) { - var field = fields[i]; - var fieldRegistration = fieldRegistrations[i]; + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + for (int i = 0; i < sequencedFields.size(); i++) { + var field = sequencedFields.get(i); + IFieldRegistration fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; var fieldName = field.getName(); // 生成注释 var fieldNote = GenerateProtocolNote.fieldNote(protocolId, fieldName, CodeLanguage.TypeScript);