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.