@@ -2,15 +2,12 @@ package generator
22
33import (
44 "fmt"
5- "go/ast"
6- "go/build"
7- "go/parser"
8- "go/token"
95 "go/types"
106 "path/filepath"
117 "reflect"
128 "strings"
139
10+ "golang.org/x/tools/go/packages"
1411 parseutil "gopkg.in/src-d/go-parse-utils.v1"
1512)
1613
@@ -59,70 +56,18 @@ func (p *Processor) write(msg string, args ...interface{}) {
5956
6057// Do performs all the processing and returns the scanned package.
6158func (p * Processor ) Do () (* Package , error ) {
62- files , err := p .getSourceFiles ()
63- if err != nil {
64- return nil , err
65- }
66-
67- p .Package , err = p .parseSourceFiles (files )
59+ pkgs , err := packages .Load (& packages.Config {
60+ Dir : "." ,
61+ Mode : packages .NeedImports | packages .NeedTypes | packages .NeedDeps ,
62+ }, p .Path )
6863 if err != nil {
6964 return nil , err
7065 }
66+ p .Package = pkgs [0 ].Types
7167
7268 return p .processPackage ()
7369}
7470
75- func (p * Processor ) getSourceFiles () ([]string , error ) {
76- pkg , err := build .Default .ImportDir (p .Path , 0 )
77- if err != nil {
78- return nil , fmt .Errorf ("kallax: cannot process directory %s: %s" , p .Path , err )
79- }
80-
81- var files []string
82- files = append (files , pkg .GoFiles ... )
83- files = append (files , pkg .CgoFiles ... )
84-
85- if len (files ) == 0 {
86- return nil , fmt .Errorf ("kallax: %s: no buildable Go files" , p .Path )
87- }
88-
89- return joinDirectory (p .Path , p .removeIgnoredFiles (files )), nil
90- }
91-
92- func (p * Processor ) removeIgnoredFiles (filenames []string ) []string {
93- var output []string
94- for _ , filename := range filenames {
95- if _ , ok := p .Ignore [filename ]; ok {
96- continue
97- }
98-
99- output = append (output , filename )
100- }
101-
102- return output
103- }
104-
105- func (p * Processor ) parseSourceFiles (filenames []string ) (* types.Package , error ) {
106- var files []* ast.File
107- fs := token .NewFileSet ()
108- for _ , filename := range filenames {
109- file , err := parser .ParseFile (fs , filename , nil , 0 )
110- if err != nil {
111- return nil , fmt .Errorf ("kallax: parsing package: %s: %s" , filename , err )
112- }
113-
114- files = append (files , file )
115- }
116-
117- config := types.Config {
118- FakeImportC : true ,
119- Error : func (error ) {},
120- Importer : parseutil .NewImporter (),
121- }
122-
123- return config .Check (p .Path , fs , files , new (types.Info ))
124- }
125-
12671func (p * Processor ) processPackage () (* Package , error ) {
12772 pkg := NewPackage (p .Package )
12873 var ctors []* types.Func
@@ -465,15 +410,6 @@ func (p *Processor) processBaseField(m *Model, f *Field) {
465410 }
466411}
467412
468- func joinDirectory (directory string , files []string ) []string {
469- result := make ([]string , len (files ))
470- for i , file := range files {
471- result [i ] = filepath .Join (directory , file )
472- }
473-
474- return result
475- }
476-
477413func typeName (typ types.Type ) string {
478414 return removeGoPath (typ .String ())
479415}
0 commit comments