//Collect going through package and collect info //using conf.Check method. It's using this implementation //of importer for check all inner packages and go/types/importer.Default() //to check all built in packages (without sources) func (_importer *CollectInfoImporter) Collect() (*types.Package, *token.FileSet, error) { var conf types.Config conf.Importer = _importer conf.Error = _importer.errorHandler if _importer.packages == nil { _importer.packages = make(map[string]*types.Package) } var pkg *types.Package var err error var files []string if files, err = fs.SourceFiles(_importer.Pkg, false); err != nil { return nil, nil, err } if _importer.fset, _importer.astFiles, err = doParseFiles(files, _importer.fset); err != nil { return nil, nil, err } //XXX: return positive result if check() returns error. pkg, _ = conf.Check(_importer.Pkg, _importer.fset, _importer.astFiles, _importer.Info) // if pkg, err = conf.Check(_importer.Pkg, _importer.fset, _importer.astFiles, _importer.Info); err != nil { // return pkg, _importer.fset, err // } _importer.packages[_importer.Pkg] = pkg util.Debug("package [%s] successfully parsed\n", pkg.Name()) return pkg, _importer.fset, nil }
func (_importer *CollectInfoImporter) doImport(path string, collectInfo bool) (*types.Package, error) { var pkg *types.Package var err error var conf types.Config conf.Importer = _importer conf.Error = _importer.errorHandler files, err := fs.SourceFiles(path, false) if err != nil { return nil, err } fset, astFiles, err := doParseFiles(files, _importer.fset) if err != nil { return nil, err } if collectInfo { pkg, err = conf.Check(path, fset, astFiles, _importer.Info) } else { pkg, err = conf.Check(path, fset, astFiles, nil) } return pkg, err }