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  }