Java optimized (#376)

* optiimzed java gen

* optiimzed java gen

* fix
This commit is contained in:
kingxt
2021-01-12 14:14:49 +08:00
committed by GitHub
parent ee19fb736b
commit cf3a1020b0
3 changed files with 226 additions and 122 deletions

View File

@@ -1,43 +1,18 @@
package javagen
import (
"bytes"
"errors"
"fmt"
"io"
"strings"
"text/template"
"github.com/tal-tech/go-zero/core/stringx"
"github.com/tal-tech/go-zero/tools/goctl/api/spec"
"github.com/tal-tech/go-zero/tools/goctl/util"
)
const getSetTemplate = `
{{.indent}}{{.decorator}}
{{.indent}}public {{.returnType}} get{{.property}}() {
{{.indent}} return this.{{.tagValue}};
{{.indent}}}
{{.indent}}public void set{{.property}}({{.type}} {{.propertyValue}}) {
{{.indent}} this.{{.tagValue}} = {{.propertyValue}};
{{.indent}}}
`
const boolTemplate = `
{{.indent}}{{.decorator}}
{{.indent}}public {{.returnType}} is{{.property}}() {
{{.indent}} return this.{{.tagValue}};
{{.indent}}}
{{.indent}}public void set{{.property}}({{.type}} {{.propertyValue}}) {
{{.indent}} this.{{.tagValue}} = {{.propertyValue}};
{{.indent}}}
`
func writeProperty(writer io.Writer, member spec.Member, indent int) error {
writeIndent(writer, indent)
ty, err := goTypeToJava(member.Type)
ty, err := specTypeToJava(member.Type)
ty = strings.Replace(ty, "*", "", 1)
if err != nil {
return err
@@ -53,13 +28,17 @@ func writeProperty(writer io.Writer, member spec.Member, indent int) error {
return err
}
writeDefaultValue(writer, member)
err = writeDefaultValue(writer, member)
if err != nil {
return err
}
fmt.Fprint(writer, ";\n")
return err
}
func writeDefaultValue(writer io.Writer, member spec.Member) error {
javaType, err := goTypeToJava(member.Type)
javaType, err := specTypeToJava(member.Type)
if err != nil {
return err
}
@@ -85,7 +64,7 @@ func indentString(indent int) string {
return result
}
func goTypeToJava(tp spec.Type) (string, error) {
func specTypeToJava(tp spec.Type) (string, error) {
switch v := tp.(type) {
case spec.DefineStruct:
return util.Title(tp.Name()), nil
@@ -96,7 +75,7 @@ func goTypeToJava(tp spec.Type) (string, error) {
}
return r, nil
case spec.MapType:
valueType, err := goTypeToJava(v.Value)
valueType, err := specTypeToJava(v.Value)
if err != nil {
return "", err
}
@@ -107,16 +86,29 @@ func goTypeToJava(tp spec.Type) (string, error) {
return "byte[]", nil
}
valueType, err := goTypeToJava(v.Value)
valueType, err := specTypeToJava(v.Value)
if err != nil {
return "", err
}
switch valueType {
case "int":
return "Integer[]", nil
case "long":
return "Long[]", nil
case "float":
return "Float[]", nil
case "double":
return "Double[]", nil
case "boolean":
return "Boolean[]", nil
}
return fmt.Sprintf("java.util.ArrayList<%s>", util.Title(valueType)), nil
case spec.InterfaceType:
return "Object", nil
case spec.PointerType:
return goTypeToJava(v.Type)
return specTypeToJava(v.Type)
}
return "", errors.New("unsupported primitive type " + tp.Name())
@@ -130,7 +122,9 @@ func primitiveType(tp string) (string, bool) {
return "long", true
case "int", "int8", "int32", "uint", "uint8", "uint16", "uint32":
return "int", true
case "float", "float32", "float64":
case "float", "float32":
return "float", true
case "float64":
return "double", true
case "bool":
return "boolean", true
@@ -138,59 +132,3 @@ func primitiveType(tp string) (string, bool) {
return "", false
}
func genGetSet(writer io.Writer, defineStruct spec.DefineStruct, indent int) error {
var members = defineStruct.GetBodyMembers()
members = append(members, defineStruct.GetFormMembers()...)
for _, member := range members {
javaType, err := goTypeToJava(member.Type)
if err != nil {
return nil
}
var property = util.Title(member.Name)
var templateStr = getSetTemplate
if javaType == "boolean" {
templateStr = boolTemplate
property = strings.TrimPrefix(property, "Is")
property = strings.TrimPrefix(property, "is")
}
t := template.Must(template.New(templateStr).Parse(getSetTemplate))
var tmplBytes bytes.Buffer
tyString := javaType
decorator := ""
javaPrimitiveType := []string{"int", "long", "boolean", "float", "double", "short"}
if !stringx.Contains(javaPrimitiveType, javaType) {
if member.IsOptional() || member.IsOmitEmpty() {
decorator = "@Nullable "
} else {
decorator = "@NotNull "
}
tyString = decorator + tyString
}
tagName, err := member.GetPropertyName()
if err != nil {
return err
}
err = t.Execute(&tmplBytes, map[string]string{
"property": property,
"propertyValue": util.Untitle(member.Name),
"tagValue": tagName,
"type": tyString,
"decorator": decorator,
"returnType": javaType,
"indent": indentString(indent),
})
if err != nil {
return err
}
r := tmplBytes.String()
r = strings.Replace(r, " boolean get", " boolean is", 1)
writer.Write([]byte(r))
}
return nil
}