@@ -1264,12 +1264,18 @@ func main() {
12641264 }
12651265}
12661266
1267- func locateObject (ts * requestgen.TypeSelector ) (types.Object , error ) {
1268- log .Infof ("locating object: %#v" , ts )
1267+ func locateObject (ts * requestgen.TypeSelector , selectedPkgs [] * packages. Package ) (types.Object , error ) {
1268+ log .Debugf ("locating object: %#v" , ts )
12691269
1270- packages , err := loadPackages ([]string {ts .Package }, []string {})
1271- if err != nil {
1272- return nil , err
1270+ var packages []* packages.Package
1271+ if len (selectedPkgs ) > 0 && (ts .Package == "." || ts .Package == selectedPkgs [0 ].PkgPath ) {
1272+ packages = selectedPkgs
1273+ } else {
1274+ var err error
1275+ packages , err = loadPackages ([]string {ts .Package }, []string {})
1276+ if err != nil {
1277+ return nil , err
1278+ }
12731279 }
12741280
12751281 if len (packages ) == 0 {
@@ -1319,7 +1325,7 @@ func locateObject(ts *requestgen.TypeSelector) (types.Object, error) {
13191325 return nil , fmt .Errorf ("can not find type matches the type selector %+v in the packages %+v" , ts , packages )
13201326}
13211327
1322- func parseTypeSelector (sel string , pkgs []* packages.Package ) (types.Object , * requestgen.TypeSelector , error ) {
1328+ func parseTypeSelector (sel string , selectedPkgs []* packages.Package ) (types.Object , * requestgen.TypeSelector , error ) {
13231329 log .Debugf ("parsing type selector: %s" , sel )
13241330
13251331 ts , err := requestgen .ParseTypeSelector (sel )
@@ -1330,10 +1336,10 @@ func parseTypeSelector(sel string, pkgs []*packages.Package) (types.Object, *req
13301336 log .Debugf ("parsed type selector: %#v" , ts )
13311337
13321338 if ts .Package == "." {
1333- ts .Package = pkgs [0 ].PkgPath
1339+ ts .Package = selectedPkgs [0 ].PkgPath
13341340 }
13351341
1336- o , err := locateObject (ts )
1342+ o , err := locateObject (ts , selectedPkgs )
13371343 if err != nil {
13381344 return nil , ts , err
13391345 }
0 commit comments