Skip to content

Commit

Permalink
fix issue #1345 about generics
Browse files Browse the repository at this point in the history
  • Loading branch information
sdghchj committed Oct 15, 2022
1 parent b2d5083 commit 692418b
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 13 deletions.
30 changes: 17 additions & 13 deletions generics.go
Expand Up @@ -268,13 +268,19 @@ func getExtendedGenericFieldType(file *ast.File, field ast.Expr, genericParamTyp
case *ast.Ident:
if genericParamTypeDefs != nil {
if typeSpec, ok := genericParamTypeDefs[fieldType.Name]; ok {
if typeSpec.TypeSpec == nil && IsGolangPrimitiveType(typeSpec.Name) {
return typeSpec.Name, nil
}
return typeSpec.TypeSpec.FullName(), nil
return typeSpec.Name, nil
}
}
return getFieldType(file, field)
if fieldType.Obj == nil {
return fieldType.Name, nil
}

tSpec := &TypeSpecDef{
File: file,
TypeSpec: fieldType.Obj.Decl.(*ast.TypeSpec),
PkgPath: file.Name.Name,
}
return tSpec.FullName(), nil
default:
return getFieldType(file, field)
}
Expand Down Expand Up @@ -334,15 +340,13 @@ func getGenericFieldType(file *ast.File, field ast.Expr, genericParamTypeDefs ma
func getGenericTypeName(file *ast.File, field ast.Expr, genericParamTypeDefs map[string]*genericTypeSpec) (string, error) {
switch fieldType := field.(type) {
case *ast.Ident:
if fieldType.Obj == nil {
if genericParamTypeDefs != nil {
if typeSpec, ok := genericParamTypeDefs[fieldType.Name]; ok {
if typeSpec.TypeSpec == nil && IsGolangPrimitiveType(typeSpec.Name) {
return typeSpec.Name, nil
}
return typeSpec.TypeSpec.FullName(), nil
}
if genericParamTypeDefs != nil {
if typeSpec, ok := genericParamTypeDefs[fieldType.Name]; ok {
return typeSpec.Name, nil
}
}

if fieldType.Obj == nil {
return fieldType.Name, nil
}

Expand Down
2 changes: 2 additions & 0 deletions testdata/generics_property/api/api.go
Expand Up @@ -22,6 +22,8 @@ type CreateMovie struct {
Producer types.Field[*Person]
Audience Audience[Person]
AudienceNames Audience[string]
Detail1 types.Field[types.Field[Person]]
Detail2 types.Field[types.Field[string]]
}

type Person struct {
Expand Down
62 changes: 62 additions & 0 deletions testdata/generics_property/expected.json
Expand Up @@ -120,6 +120,12 @@
"cameraPeople": {
"$ref": "#/definitions/types.Field-array_api_Person"
},
"detail1": {
"$ref": "#/definitions/types.Field-types_Field_api_Person"
},
"detail2": {
"$ref": "#/definitions/types.Field-types_Field_string"
},
"directors": {
"$ref": "#/definitions/types.Field-array_api_Person"
},
Expand Down Expand Up @@ -292,6 +298,62 @@
}
}
},
"types.Field-types_Field_api_Person": {
"type": "object",
"properties": {
"value": {
"$ref": "#/definitions/types.Field-api_Person"
},
"value2": {
"$ref": "#/definitions/types.Field-api_Person"
},
"value3": {
"type": "array",
"items": {
"$ref": "#/definitions/types.Field-api_Person"
}
},
"value4": {
"type": "object",
"properties": {
"subValue1": {
"$ref": "#/definitions/types.Field-api_Person"
},
"subValue2": {
"type": "string"
}
}
}
}
},
"types.Field-types_Field_string": {
"type": "object",
"properties": {
"value": {
"$ref": "#/definitions/types.Field-string"
},
"value2": {
"$ref": "#/definitions/types.Field-string"
},
"value3": {
"type": "array",
"items": {
"$ref": "#/definitions/types.Field-string"
}
},
"value4": {
"type": "object",
"properties": {
"subValue1": {
"$ref": "#/definitions/types.Field-string"
},
"subValue2": {
"type": "string"
}
}
}
}
},
"types.Post": {
"type": "object",
"properties": {
Expand Down

0 comments on commit 692418b

Please sign in to comment.