From 08ddf9b3cea05c9ad149d7c8462d619259622aaa Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 3 Dec 2023 17:44:31 +0800 Subject: [PATCH] ref[protobuf]: refactor protobuf generate --- .../serializer/protobuf/GeneratePbUtils.java | 44 +++++++------------ .../protobuf/PbGenerateOperation.java | 12 +++-- .../protocol/protobuf/AllTypeBuilderTest.java | 1 + 3 files changed, 21 insertions(+), 36 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java index 302ef481..b29f3747 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java @@ -59,6 +59,7 @@ public abstract class GeneratePbUtils { } ProtoParser parser = new ProtoParser(protoString); Proto proto = parser.parse(); + proto.setName(FileUtils.fileSimpleName(protoFile.getName())); protos.add(proto); } return protos; @@ -66,41 +67,26 @@ public abstract class GeneratePbUtils { public static void generate(PbGenerateOperation buildOption, List protos) { - Map allProtos = new HashMap<>(); - for (Proto proto : protos) { + var allProtos = new HashMap(); + for (var proto : protos) { allProtos.put(proto.getName(), proto); } + var messageOutputPath = buildOption.getOutputPath() + File.separator; + if (StringUtils.isNotEmpty(buildOption.getJavaPackage())) { + messageOutputPath = messageOutputPath + buildOption.getJavaPackage().replaceAll(StringUtils.PERIOD_REGEX, "/"); + } + for (var proto : protos) { - List options = proto.getOptions(); - Map protoOptions = new HashMap<>(); - if (options != null) { - options.forEach(o -> protoOptions.put(o.getName(), o.getValue())); - } - if (CollectionUtils.isEmpty(proto.getPbMessages())) { + var pbMessages = proto.getPbMessages(); + if (CollectionUtils.isEmpty(pbMessages)) { continue; } - - generateMessage(buildOption, proto, allProtos); - } - } - - - private static void generateMessage(PbGenerateOperation buildOption, Proto proto, Map protos) { - String msgPath = buildOption.getOutputPath() + File.separator; - - Map msgComments = new HashMap<>(); - - List msgs = proto.getPbMessages(); - for (var msg : msgs) { - StringBuilder mc = new StringBuilder(); - if (CollectionUtils.isNotEmpty(msg.getComments())) { - msg.getComments().forEach(c -> mc.append(c)); + for (var pbMessage : pbMessages) { + var code = buildMessage(proto, pbMessage, 1, null); + var filePath = StringUtils.format("{}/{}/{}.java", messageOutputPath, proto.getName(), pbMessage.getName()); + FileUtils.writeStringToFile(new File(filePath), code, false); } - msgComments.put(msg.getName(), mc.toString()); - var code = buildMessage(proto, msg, 1, null, protos); - var filePath = msgPath + File.separator + msg.getName() + ".java"; - FileUtils.writeStringToFile(new File(filePath), code, false); } } @@ -183,7 +169,7 @@ public abstract class GeneratePbUtils { return StringUtils.EMPTY; } - public static String buildMessage(Proto proto, PbMessage msg, int indent, Map defineMsgs, Map protos) { + public static String buildMessage(Proto proto, PbMessage msg, int indent, Map defineMsgs) { var tmp = new ArrayList(); var imports = new HashSet(); var builder = new StringBuilder(); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/PbGenerateOperation.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/PbGenerateOperation.java index 3a7ecacf..784c0133 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/PbGenerateOperation.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/PbGenerateOperation.java @@ -17,7 +17,7 @@ public class PbGenerateOperation { private String protoPath; private String outputPath; - private boolean isNested; + private String javaPackage; public String getProtoPath() { return protoPath; @@ -35,13 +35,11 @@ public class PbGenerateOperation { this.outputPath = outputPath; } - public boolean isIsNested() { - return isNested; + public String getJavaPackage() { + return javaPackage; } - public PbGenerateOperation setIsNested(boolean isNested) { - this.isNested = isNested; - return this; + public void setJavaPackage(String javaPackage) { + this.javaPackage = javaPackage; } - } diff --git a/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java b/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java index e5976fdf..1d5592df 100644 --- a/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java +++ b/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java @@ -28,6 +28,7 @@ public class AllTypeBuilderTest { buildOption.setProtoPath("D:\\github\\zfoo\\protocol\\src\\test\\resources\\proto"); // buildOption.setProtoPath("D:\\github\\zoo\\app\\zgame\\zgame-common\\src\\main\\resources\\proto"); buildOption.setOutputPath("D:\\github\\zfoo\\protocol\\src\\test\\tmpsrc/"); + buildOption.setJavaPackage("com.zfoo.protocol.common"); GeneratePbUtils.create(buildOption); }