fix inner type generate error (#377)
* fix point type bug * optimized * fix inner type error
This commit is contained in:
@@ -122,15 +122,6 @@ func (c *componentsContext) createComponent(dir, packetName string, ty spec.Type
|
||||
return err
|
||||
}
|
||||
|
||||
fp, created, err := apiutil.MaybeCreateFile(dir, modelDir, modelFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !created {
|
||||
return nil
|
||||
}
|
||||
defer fp.Close()
|
||||
|
||||
propertiesString, err := c.buildProperties(defineStruct)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -160,6 +151,15 @@ func (c *componentsContext) createComponent(dir, packetName string, ty spec.Type
|
||||
return err
|
||||
}
|
||||
|
||||
fp, created, err := apiutil.MaybeCreateFile(dir, modelDir, modelFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !created {
|
||||
return nil
|
||||
}
|
||||
defer fp.Close()
|
||||
|
||||
buffer := new(bytes.Buffer)
|
||||
t := template.Must(template.New("componentType").Parse(componentTemplate))
|
||||
err = t.Execute(buffer, map[string]interface{}{
|
||||
@@ -192,7 +192,7 @@ func (c *componentsContext) buildProperties(defineStruct spec.DefineStruct) (str
|
||||
|
||||
func (c *componentsContext) buildGetterSetter(defineStruct spec.DefineStruct) (string, error) {
|
||||
var builder strings.Builder
|
||||
if err := c.genGetSet(&builder, defineStruct, 1); err != nil {
|
||||
if err := c.genGetSet(&builder, 1); err != nil {
|
||||
return "", apiutil.WrapErr(err, "Type "+defineStruct.Name()+" get or set generate error")
|
||||
}
|
||||
|
||||
@@ -209,18 +209,23 @@ func (c *componentsContext) writeType(writer io.Writer, defineStruct spec.Define
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *componentsContext) writeMembers(writer io.Writer, defineStruct spec.DefineStruct, indent int) error {
|
||||
for _, member := range defineStruct.Members {
|
||||
func (c *componentsContext) writeMembers(writer io.Writer, tp spec.Type, indent int) error {
|
||||
definedType, ok := tp.(spec.DefineStruct)
|
||||
if !ok {
|
||||
pointType, ok := tp.(spec.PointerType)
|
||||
if ok {
|
||||
return c.writeMembers(writer, pointType.Type, indent)
|
||||
}
|
||||
return errors.New(fmt.Sprintf("type %s not supported", tp.Name()))
|
||||
}
|
||||
|
||||
for _, member := range definedType.Members {
|
||||
if member.IsInline {
|
||||
defineStruct, ok := member.Type.(spec.DefineStruct)
|
||||
if ok {
|
||||
err := c.writeMembers(writer, defineStruct, indent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
continue
|
||||
err := c.writeMembers(writer, member.Type, indent)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return errors.New("unsupported inline type %s" + member.Type.Name())
|
||||
continue
|
||||
}
|
||||
|
||||
if member.IsBodyMember() || member.IsFormMember() {
|
||||
@@ -263,9 +268,8 @@ func (c *componentsContext) buildConstructor() (string, string, error) {
|
||||
return params.String(), constructorSetter.String(), nil
|
||||
}
|
||||
|
||||
func (c *componentsContext) genGetSet(writer io.Writer, defineStruct spec.DefineStruct, indent int) error {
|
||||
var members = defineStruct.GetBodyMembers()
|
||||
members = append(members, defineStruct.GetFormMembers()...)
|
||||
func (c *componentsContext) genGetSet(writer io.Writer, indent int) error {
|
||||
var members = c.members
|
||||
for _, member := range members {
|
||||
javaType, err := specTypeToJava(member.Type)
|
||||
if err != nil {
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package javagen
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
@@ -20,6 +18,7 @@ import com.xhb.core.packet.HttpPacket;
|
||||
import com.xhb.core.network.HttpRequestClient;
|
||||
{{.imports}}
|
||||
|
||||
{{.doc}}
|
||||
public class {{.packetName}} extends HttpPacket<{{.responseType}}> {
|
||||
{{.paramsDeclaration}}
|
||||
|
||||
@@ -101,14 +100,28 @@ func createWith(dir string, api *spec.ApiSpec, route spec.Route, packetName stri
|
||||
"requestType": util.Title(route.RequestTypeName()),
|
||||
"HasRequestBody": hasRequestBody,
|
||||
"imports": imports,
|
||||
"doc": doc(route),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
formatFile(&tmplBytes, fp)
|
||||
|
||||
_, err = fp.WriteString(formatSource(tmplBytes.String()))
|
||||
return nil
|
||||
}
|
||||
|
||||
func doc(route spec.Route) string {
|
||||
comment := route.JoinedDoc()
|
||||
if len(comment) > 0 {
|
||||
formatter := `
|
||||
/*
|
||||
%s
|
||||
*/`
|
||||
return fmt.Sprintf(formatter, comment)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func getImports(api *spec.ApiSpec, packetName string) string {
|
||||
var builder strings.Builder
|
||||
allTypes := api.Types
|
||||
@@ -118,24 +131,6 @@ func getImports(api *spec.ApiSpec, packetName string) string {
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
func formatFile(tmplBytes *bytes.Buffer, file *os.File) {
|
||||
scanner := bufio.NewScanner(tmplBytes)
|
||||
builder := bufio.NewWriter(file)
|
||||
defer builder.Flush()
|
||||
preIsBreakLine := false
|
||||
for scanner.Scan() {
|
||||
text := strings.TrimSpace(scanner.Text())
|
||||
if text == "" && preIsBreakLine {
|
||||
continue
|
||||
}
|
||||
preIsBreakLine = text == ""
|
||||
builder.WriteString(scanner.Text() + "\n")
|
||||
}
|
||||
if err := scanner.Err(); err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
||||
|
||||
func paramsSet(route spec.Route) string {
|
||||
path := route.Path
|
||||
cops := strings.Split(path, "/")
|
||||
|
||||
@@ -11,6 +11,10 @@ import (
|
||||
)
|
||||
|
||||
func writeProperty(writer io.Writer, member spec.Member, indent int) error {
|
||||
if len(member.Comment) > 0 {
|
||||
writeIndent(writer, indent)
|
||||
fmt.Fprint(writer, member.Comment+util.NL)
|
||||
}
|
||||
writeIndent(writer, indent)
|
||||
ty, err := specTypeToJava(member.Type)
|
||||
ty = strings.Replace(ty, "*", "", 1)
|
||||
|
||||
Reference in New Issue
Block a user