github.com/taylorchu/generic@v0.0.0-20171113184323-cd81575befa2/rewrite/rewrite_ident.go (about) 1 package rewrite 2 3 import ( 4 "go/ast" 5 6 "golang.org/x/tools/go/ast/astutil" 7 ) 8 9 // rewriteIdent converts TypeXXX to its replacement defined in typeMap. 10 func (s *Spec) rewriteIdent(pkg *Package) error { 11 for _, node := range pkg.Files { 12 ast.Inspect(node, func(n ast.Node) bool { 13 switch x := n.(type) { 14 case *ast.Ident: 15 if x.Obj == nil || x.Obj.Kind != ast.Typ { 16 return false 17 } 18 to, ok := s.TypeMap[x.Name] 19 if !ok { 20 return false 21 } 22 x.Name = to.Expr 23 24 for _, im := range to.Import { 25 astutil.AddImport(pkg.FileSet, node, im) 26 } 27 return false 28 } 29 return true 30 }) 31 } 32 return nil 33 }