all: use reflect.TypeFor instead of reflect.TypeOf when we have known the type
For golang/go#60088.
Change-Id: I43a47ae20cd84e02b0eb3496387f73d92745da58
Reviewed-on: https://go-review.googlesource.com/c/tools/+/709135
Reviewed-by: Sean Liao <sean@liao.dev>
Auto-Submit: Michael Pratt <mpratt@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Sean Liao <sean@liao.dev>
diff --git a/go/analysis/passes/pkgfact/pkgfact.go b/go/analysis/passes/pkgfact/pkgfact.go
index 3174879..2b8add3 100644
--- a/go/analysis/passes/pkgfact/pkgfact.go
+++ b/go/analysis/passes/pkgfact/pkgfact.go
@@ -41,7 +41,7 @@
URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/pkgfact",
Run: run,
FactTypes: []analysis.Fact{new(pairsFact)},
- ResultType: reflect.TypeOf(map[string]string{}),
+ ResultType: reflect.TypeFor[map[string]string](),
}
// A pairsFact is a package-level fact that records
diff --git a/go/analysis/passes/printf/printf.go b/go/analysis/passes/printf/printf.go
index 0850a58..d94e592 100644
--- a/go/analysis/passes/printf/printf.go
+++ b/go/analysis/passes/printf/printf.go
@@ -43,7 +43,7 @@
URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/printf",
Requires: []*analysis.Analyzer{inspect.Analyzer},
Run: run,
- ResultType: reflect.TypeOf((*Result)(nil)),
+ ResultType: reflect.TypeFor[*Result](),
FactTypes: []analysis.Fact{new(isWrapper)},
}
diff --git a/go/analysis/passes/usesgenerics/usesgenerics.go b/go/analysis/passes/usesgenerics/usesgenerics.go
index b7ff3ad..a0126dd 100644
--- a/go/analysis/passes/usesgenerics/usesgenerics.go
+++ b/go/analysis/passes/usesgenerics/usesgenerics.go
@@ -24,7 +24,7 @@
URL: "https://pkg.go.dev/golang.org/x/tools/go/analysis/passes/usesgenerics",
Requires: []*analysis.Analyzer{inspect.Analyzer},
Run: run,
- ResultType: reflect.TypeOf((*Result)(nil)),
+ ResultType: reflect.TypeFor[*Result](),
FactTypes: []analysis.Fact{new(featuresFact)},
}
diff --git a/internal/analysisinternal/generated/generated.go b/internal/analysisinternal/generated/generated.go
index cea1fac..13e1b69 100644
--- a/internal/analysisinternal/generated/generated.go
+++ b/internal/analysisinternal/generated/generated.go
@@ -18,7 +18,7 @@
Name: "generated",
Doc: "detect which Go files are generated",
URL: "https://pkg.go.dev/golang.org/x/tools/internal/analysisinternal/generated",
- ResultType: reflect.TypeOf((*Result)(nil)),
+ ResultType: reflect.TypeFor[*Result](),
Run: func(pass *analysis.Pass) (any, error) {
set := make(map[*token.File]bool)
for _, file := range pass.Files {
diff --git a/internal/facts/facts_test.go b/internal/facts/facts_test.go
index 0143fc5..0b4ea73 100644
--- a/internal/facts/facts_test.go
+++ b/internal/facts/facts_test.go
@@ -461,7 +461,7 @@
s.ExportPackageFact(&otherFact{"bad package fact"})
filter := map[reflect.Type]bool{
- reflect.TypeOf(&myFact{}): true,
+ reflect.TypeFor[*myFact](): true,
}
pkgFacts := s.AllPackageFacts(filter)
diff --git a/internal/packagestest/expect.go b/internal/packagestest/expect.go
index 5319fa0..1533fd7 100644
--- a/internal/packagestest/expect.go
+++ b/internal/packagestest/expect.go
@@ -228,14 +228,14 @@
}
var (
- noteType = reflect.TypeOf((*expect.Note)(nil))
- identifierType = reflect.TypeOf(expect.Identifier(""))
- posType = reflect.TypeOf(token.Pos(0))
- positionType = reflect.TypeOf(token.Position{})
- rangeType = reflect.TypeOf(Range{})
- fsetType = reflect.TypeOf((*token.FileSet)(nil))
- regexType = reflect.TypeOf((*regexp.Regexp)(nil))
- exportedType = reflect.TypeOf((*Exported)(nil))
+ noteType = reflect.TypeFor[*expect.Note]()
+ identifierType = reflect.TypeFor[expect.Identifier]()
+ posType = reflect.TypeFor[token.Pos]()
+ positionType = reflect.TypeFor[token.Position]()
+ rangeType = reflect.TypeFor[Range]()
+ fsetType = reflect.TypeFor[*token.FileSet]()
+ regexType = reflect.TypeFor[*regexp.Regexp]()
+ exportedType = reflect.TypeFor[*Exported]()
)
// converter converts from a marker's argument parsed from the comment to
diff --git a/internal/refactor/inline/inline.go b/internal/refactor/inline/inline.go
index c21e74a..cc43403 100644
--- a/internal/refactor/inline/inline.go
+++ b/internal/refactor/inline/inline.go
@@ -3139,7 +3139,7 @@
//
// TODO(adonovan): remove this horrendous workaround when #20744 is finally fixed.
func clearPositions(root ast.Node) {
- posType := reflect.TypeOf(token.NoPos)
+ posType := reflect.TypeFor[token.Pos]()
ast.Inspect(root, func(n ast.Node) bool {
if n != nil {
v := reflect.ValueOf(n).Elem() // deref the pointer to struct
diff --git a/refactor/eg/rewrite.go b/refactor/eg/rewrite.go
index 6fb1e44..cf02b5d 100644
--- a/refactor/eg/rewrite.go
+++ b/refactor/eg/rewrite.go
@@ -158,12 +158,12 @@
objectPtrNil = reflect.ValueOf((*ast.Object)(nil))
scopePtrNil = reflect.ValueOf((*ast.Scope)(nil))
- identType = reflect.TypeOf((*ast.Ident)(nil))
- selectorExprType = reflect.TypeOf((*ast.SelectorExpr)(nil))
- objectPtrType = reflect.TypeOf((*ast.Object)(nil))
- statementType = reflect.TypeOf((*ast.Stmt)(nil)).Elem()
- positionType = reflect.TypeOf(token.NoPos)
- scopePtrType = reflect.TypeOf((*ast.Scope)(nil))
+ identType = reflect.TypeFor[*ast.Ident]()
+ selectorExprType = reflect.TypeFor[*ast.SelectorExpr]()
+ objectPtrType = reflect.TypeFor[*ast.Object]()
+ statementType = reflect.TypeFor[ast.Stmt]()
+ positionType = reflect.TypeFor[token.Pos]()
+ scopePtrType = reflect.TypeFor[*ast.Scope]()
)
// apply replaces each AST field x in val with f(x), returning val.