Skip to content

Commit cf894a5

Browse files
author
duanlv
committed
fix: generic receiver error
1 parent d58efe7 commit cf894a5

1 file changed

Lines changed: 20 additions & 13 deletions

File tree

definition.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,25 @@ func (f *FuncDefinition) Key() string {
3737
case *ast.Ident:
3838
return f.pkg.PkgPath + "." + t.Name + "." + f.Decl.Name.Name
3939
case *ast.StarExpr:
40-
i, ok := t.X.(*ast.Ident)
41-
if !ok {
42-
fmt.Printf("invalid function receiver at %s", f.pkg.Fset.Position(receiver.Pos()).String())
43-
break
40+
switch i := t.X.(type) {
41+
case *ast.Ident:
42+
return "*" + f.pkg.PkgPath + "." + i.Name + "." + f.Decl.Name.Name
43+
case *ast.IndexExpr:
44+
// 范型未被完全支持,暂时先这样处理
45+
_i, ok := i.X.(*ast.Ident)
46+
if !ok {
47+
return ""
48+
}
49+
return "*" + f.pkg.PkgPath + "." + _i.Name + "." + f.Decl.Name.Name
50+
default:
51+
fmt.Printf("invalid function receiver at %s\n", f.pkg.Fset.Position(receiver.Pos()).String())
4452
}
45-
return "*" + f.pkg.PkgPath + "." + i.Name + "." + f.Decl.Name.Name
53+
case *ast.IndexExpr:
54+
// 范型未被完全支持,暂时先这样处理
55+
return ""
4656
default:
47-
fmt.Printf("invalid function receiver at %s", f.pkg.Fset.Position(receiver.Pos()).String())
57+
fmt.Printf("invalid function receiver at %s\n", f.pkg.Fset.Position(receiver.Pos()).String())
4858
}
49-
ident, ok := receiver.Type.(*ast.Ident)
50-
if !ok {
51-
fmt.Printf("invalid function receiver at %s", f.pkg.Fset.Position(receiver.Pos()).String())
52-
return f.pkg.PkgPath + "." + f.Decl.Name.Name
53-
}
54-
return f.pkg.PkgPath + "." + ident.Name + f.Decl.Name.Name
5559
}
5660

5761
return f.pkg.PkgPath + "." + f.Decl.Name.Name
@@ -121,7 +125,10 @@ func (t *TypeDefinition) RefKey(typeArgs ...*spec.SchemaRef) string {
121125
type Definitions map[string]Definition
122126

123127
func (d *Definitions) Set(def Definition) {
124-
(*d)[def.Key()] = def
128+
k := def.Key()
129+
if k != "" {
130+
(*d)[k] = def
131+
}
125132
}
126133

127134
func (d *Definitions) Get(key string) Definition {

0 commit comments

Comments
 (0)