mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-06 18:23:49 +00:00
feat[pb]: generates an all-args constructor. If no field in the class, no constructor will be generated.
This commit is contained in:
@@ -162,7 +162,7 @@ public abstract class GeneratePbUtils {
|
||||
var recordBody = buildRecordBody(pbMessage);
|
||||
builder.append(GenerateProtocolFile.addTabs(recordBody, 1));
|
||||
} else {
|
||||
var classBody = buildClassBody(pbMessage);
|
||||
var classBody = buildClassBody(pbGenerateOperation, pbMessage);
|
||||
classBody = classBody.replaceFirst("public class ", "public static class ");
|
||||
builder.append(GenerateProtocolFile.addTabs(classBody, 1));
|
||||
}
|
||||
@@ -247,7 +247,7 @@ public abstract class GeneratePbUtils {
|
||||
var recordBody = buildRecordBody(pbMessage);
|
||||
builder.append(recordBody);
|
||||
} else {
|
||||
var classBody = buildClassBody(pbMessage);
|
||||
var classBody = buildClassBody(pbGenerateOperation, pbMessage);
|
||||
builder.append(classBody);
|
||||
}
|
||||
return builder.toString();
|
||||
@@ -398,7 +398,7 @@ public abstract class GeneratePbUtils {
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
private static String buildClassBody(PbMessage pbMessage) {
|
||||
private static String buildClassBody(PbGenerateOperation pbGenerateOperation, PbMessage pbMessage) {
|
||||
var builder = new StringBuilder();
|
||||
builder.append(StringUtils.format("@Protocol(id = {})", pbMessage.getProtocolId())).append(LS);
|
||||
builder.append(StringUtils.format("public class {} {", pbMessage.getName())).append(LS);
|
||||
@@ -408,19 +408,27 @@ public abstract class GeneratePbUtils {
|
||||
.sorted((a, b) -> a.getTag() - b.getTag())
|
||||
.toList();
|
||||
|
||||
var builderMethod = new StringBuilder();
|
||||
var fieldBuilder = new StringBuilder();
|
||||
var valueOfBuilder = new StringBuilder();
|
||||
var methodBuilder = new StringBuilder();
|
||||
|
||||
valueOfBuilder.append(TAB).append(StringUtils.format("public {} {", pbMessage.getName())).append(LS);
|
||||
for (var pbField : pbFields) {
|
||||
var type = getJavaType(pbField);
|
||||
var name = pbField.getName();
|
||||
|
||||
var fieldComment = buildFieldComment(pbField);
|
||||
builder.append(fieldComment);
|
||||
fieldBuilder.append(fieldComment);
|
||||
if (isCompatiblePbField(pbField)) {
|
||||
var tag = pbField.getTag() - COMPATIBLE_FIELD_TAG;
|
||||
builder.append(TAB).append(StringUtils.format("@Compatible({})", tag)).append(LS);
|
||||
fieldBuilder.append(TAB).append(StringUtils.format("@Compatible({})", tag)).append(LS);
|
||||
}
|
||||
builder.append(TAB).append(StringUtils.format("private {} {};", type, name)).append(LS);
|
||||
fieldBuilder.append(TAB).append(StringUtils.format("private {} {};", type, name)).append(LS);
|
||||
|
||||
// valueOf
|
||||
valueOfBuilder.append(TAB + TAB).append(StringUtils.format("this.{} = {};", name, name)).append(LS);
|
||||
|
||||
// method
|
||||
String getMethod;
|
||||
if (!"bool".equalsIgnoreCase(pbField.getType())) {
|
||||
getMethod = StringUtils.format("get{}", StringUtils.capitalize(pbField.getName()));
|
||||
@@ -428,17 +436,28 @@ public abstract class GeneratePbUtils {
|
||||
getMethod = StringUtils.format("is{}", StringUtils.capitalize(pbField.getName()));
|
||||
}
|
||||
|
||||
builderMethod.append(TAB).append(StringUtils.format("public {} {}() {", type, getMethod)).append(LS);
|
||||
builderMethod.append(TAB + TAB).append(StringUtils.format("return {};", pbField.getName())).append(LS);
|
||||
builderMethod.append(TAB).append("}").append(LS);
|
||||
methodBuilder.append(TAB).append(StringUtils.format("public {} {}() {", type, getMethod)).append(LS);
|
||||
methodBuilder.append(TAB + TAB).append(StringUtils.format("return {};", pbField.getName())).append(LS);
|
||||
methodBuilder.append(TAB).append("}").append(LS);
|
||||
|
||||
String setMethod = StringUtils.format("set{}", StringUtils.capitalize(pbField.getName()));
|
||||
builderMethod.append(TAB).append(StringUtils.format("public void {}({} {}) {", setMethod, type, pbField.getName())).append(LS);
|
||||
builderMethod.append(TAB + TAB).append(StringUtils.format("this.{} = {};", pbField.getName(), pbField.getName())).append(LS);
|
||||
builderMethod.append(TAB).append("}").append(LS);
|
||||
methodBuilder.append(TAB).append(StringUtils.format("public void {}({} {}) {", setMethod, type, pbField.getName())).append(LS);
|
||||
methodBuilder.append(TAB + TAB).append(StringUtils.format("this.{} = {};", pbField.getName(), pbField.getName())).append(LS);
|
||||
methodBuilder.append(TAB).append("}").append(LS);
|
||||
}
|
||||
valueOfBuilder.append(TAB).append("}").append(LS);
|
||||
|
||||
builder.append(LS).append(fieldBuilder);
|
||||
|
||||
if (pbGenerateOperation.isAllArgsConstructor() && CollectionUtils.isNotEmpty(pbFields)) {
|
||||
// no args constructor
|
||||
builder.append(TAB).append(StringUtils.format("public {} {", pbMessage.getName())).append(LS)
|
||||
.append(TAB).append("}").append(LS);
|
||||
// all args constructor
|
||||
builder.append(valueOfBuilder);
|
||||
}
|
||||
|
||||
builder.append(LS).append(builderMethod);
|
||||
builder.append(LS).append(methodBuilder);
|
||||
builder.append("}");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
+16
-4
@@ -21,6 +21,10 @@ public class PbGenerateOperation {
|
||||
private String protoPath;
|
||||
private String outputPath;
|
||||
private String javaPackage;
|
||||
/**
|
||||
* Generates an all-args constructor. If no field in the class, no constructor will be generated.
|
||||
*/
|
||||
private boolean allArgsConstructor;
|
||||
/**
|
||||
* Whether generated class is record
|
||||
*/
|
||||
@@ -65,10 +69,22 @@ public class PbGenerateOperation {
|
||||
this.javaPackage = javaPackage;
|
||||
}
|
||||
|
||||
public boolean isAllArgsConstructor() {
|
||||
return allArgsConstructor;
|
||||
}
|
||||
|
||||
public void setAllArgsConstructor(boolean allArgsConstructor) {
|
||||
this.allArgsConstructor = allArgsConstructor;
|
||||
}
|
||||
|
||||
public boolean isRecordClass() {
|
||||
return recordClass;
|
||||
}
|
||||
|
||||
public void setRecordClass(boolean recordClass) {
|
||||
this.recordClass = recordClass;
|
||||
}
|
||||
|
||||
public List<String> getRecordExcludes() {
|
||||
return recordExcludes;
|
||||
}
|
||||
@@ -77,10 +93,6 @@ public class PbGenerateOperation {
|
||||
this.recordExcludes = recordExcludes;
|
||||
}
|
||||
|
||||
public void setRecordClass(boolean recordClass) {
|
||||
this.recordClass = recordClass;
|
||||
}
|
||||
|
||||
public boolean isOneProtocol() {
|
||||
return oneProtocol;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,8 @@ public class GenerateProtobufTesting {
|
||||
buildOption.setProtoPath("src\\test\\protobuf");
|
||||
buildOption.setOutputPath("zfoopb");
|
||||
buildOption.setJavaPackage("com.zfoo.protocol.generate.test");
|
||||
// buildOption.setRecordClass(true);
|
||||
buildOption.setRecordClass(true);
|
||||
// buildOption.setAllArgsConstructor(true);
|
||||
// buildOption.getRecordExcludes().add("SimpleObject");
|
||||
// buildOption.setOneProtocol(true);
|
||||
GeneratePbUtils.create(buildOption);
|
||||
|
||||
Reference in New Issue
Block a user