Skip to content

Commit

Permalink
Use packages instead of importer
Browse files Browse the repository at this point in the history
  • Loading branch information
Neo2308 committed Feb 24, 2024
1 parent 7ab1aae commit 1aa2446
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions mockgen/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
"fmt"
"go/ast"
"go/build"
"go/importer"
"go/parser"
"go/token"
"go/types"
Expand All @@ -32,6 +31,8 @@ import (
"strconv"
"strings"

"golang.org/x/tools/go/packages"

"go.uber.org/mock/mockgen/model"
)

Expand Down Expand Up @@ -640,11 +641,12 @@ func (p *fileParser) parseArrayLength(expr ast.Expr) (string, error) {
return val.Obj.Decl.(*ast.ValueSpec).Values[0].(*ast.BasicLit).Value, nil
case (*ast.SelectorExpr):
// when the length is a const defined in an external package
usedPkg, err := importer.Default().Import(fmt.Sprintf("%s", val.X))
if err != nil {
return "", p.errorf(expr.Pos(), "unknown package in array length: %v", err)
loadConfig := &packages.Config{
Mode: packages.NeedName | packages.NeedTypes,
}
ev, err := types.Eval(token.NewFileSet(), usedPkg, token.NoPos, val.Sel.Name)
loadConfig.Fset = token.NewFileSet()
pkgs, err := packages.Load(loadConfig, fmt.Sprintf("%s", val.X))
ev, err := types.Eval(token.NewFileSet(), pkgs[0].Types, token.NoPos, val.Sel.Name)
if err != nil {
return "", p.errorf(expr.Pos(), "unknown constant in array length: %v", err)
}
Expand Down

0 comments on commit 1aa2446

Please sign in to comment.