internal/typeparams: hide go1.18 API usage behind a build constraint

Temporarily hide usage of the new go/types API, so that we can safely
tag x/tools@v0.1.7 without risk of further breakage when these APIs
change.

Updates golang/go#48632

Change-Id: Idba02d09644622b3d973a684a76514c86eefa17f
Reviewed-on: https://go-review.googlesource.com/c/tools/+/352854
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
diff --git a/go/internal/gcimporter/gcimporter_test.go b/go/internal/gcimporter/gcimporter_test.go
index e5eb9ed..c586f1f 100644
--- a/go/internal/gcimporter/gcimporter_test.go
+++ b/go/internal/gcimporter/gcimporter_test.go
@@ -22,6 +22,7 @@
 	"time"
 
 	"golang.org/x/tools/internal/testenv"
+	"golang.org/x/tools/internal/typeparams"
 )
 
 func TestMain(m *testing.M) {
@@ -106,6 +107,12 @@
 			for _, ext := range pkgExts {
 				if strings.HasSuffix(f.Name(), ext) {
 					name := f.Name()[0 : len(f.Name())-len(ext)] // remove extension
+					if testenv.UsesGenerics(name) && !typeparams.Enabled {
+						// golang/go#48632: Skip generic packages when type parameters are
+						// not enabled, as a temporary measure to allow avoiding the new
+						// go/types API on Go 1.18.
+						continue
+					}
 					if testPath(t, filepath.Join(dir, name), dir) != nil {
 						nimports++
 					}
diff --git a/go/internal/gcimporter/iexport_go118_test.go b/go/internal/gcimporter/iexport_go118_test.go
index 3c9610e..631d2b7 100644
--- a/go/internal/gcimporter/iexport_go118_test.go
+++ b/go/internal/gcimporter/iexport_go118_test.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.18
-// +build go1.18
+//go:build typeparams && go1.18
+// +build typeparams,go1.18
 
 package gcimporter_test
 
diff --git a/go/internal/gcimporter/iexport_test.go b/go/internal/gcimporter/iexport_test.go
index 084679b..f247d97 100644
--- a/go/internal/gcimporter/iexport_test.go
+++ b/go/internal/gcimporter/iexport_test.go
@@ -32,6 +32,7 @@
 	"golang.org/x/tools/go/internal/gcimporter"
 	"golang.org/x/tools/go/loader"
 	"golang.org/x/tools/internal/testenv"
+	"golang.org/x/tools/internal/typeparams"
 )
 
 func readExportFile(filename string) ([]byte, error) {
@@ -96,9 +97,12 @@
 	// TODO(#48595): fix this test with GOEXPERIMENT=unified.
 	isUnified := isUnifiedBuilder()
 	for _, path := range buildutil.AllPackages(conf.Build) {
-		if !(isUnified && testenv.UsesGenerics(path)) {
-			conf.Import(path)
+		if testenv.UsesGenerics(path) && (isUnified || !typeparams.Enabled) {
+			// golang/go#48632: Skip generic packages if we can't handle type
+			// parameters.
+			continue
 		}
+		conf.Import(path)
 	}
 
 	// Create a package containing type and value errors to ensure
diff --git a/go/internal/gcimporter/support_go117.go b/go/internal/gcimporter/support_go117.go
index d892273..817a147 100644
--- a/go/internal/gcimporter/support_go117.go
+++ b/go/internal/gcimporter/support_go117.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !go1.18
-// +build !go1.18
+//go:build !typeparams || !go1.18
+// +build !typeparams !go1.18
 
 package gcimporter
 
diff --git a/go/internal/gcimporter/support_go118.go b/go/internal/gcimporter/support_go118.go
index 2c98f0a..e6b81fc 100644
--- a/go/internal/gcimporter/support_go118.go
+++ b/go/internal/gcimporter/support_go118.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.18
-// +build go1.18
+//go:build typeparams && go1.18
+// +build typeparams,go1.18
 
 package gcimporter
 
diff --git a/internal/typeparams/enabled_go117.go b/internal/typeparams/enabled_go117.go
index 1821239..72d010e 100644
--- a/internal/typeparams/enabled_go117.go
+++ b/internal/typeparams/enabled_go117.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !go1.18
-// +build !go1.18
+//go:build !typeparams || !go1.18
+// +build !typeparams !go1.18
 
 package typeparams
 
diff --git a/internal/typeparams/enabled_go118.go b/internal/typeparams/enabled_go118.go
index d671488..642fc8e 100644
--- a/internal/typeparams/enabled_go118.go
+++ b/internal/typeparams/enabled_go118.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.18
-// +build go1.18
+//go:build typeparams && go1.18
+// +build typeparams,go1.18
 
 package typeparams
 
diff --git a/internal/typeparams/typeparams_go117.go b/internal/typeparams/typeparams_go117.go
index 479b556..12817af 100644
--- a/internal/typeparams/typeparams_go117.go
+++ b/internal/typeparams/typeparams_go117.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build !go1.18
-// +build !go1.18
+//go:build !typeparams || !go1.18
+// +build !typeparams !go1.18
 
 package typeparams
 
diff --git a/internal/typeparams/typeparams_go118.go b/internal/typeparams/typeparams_go118.go
index 16c6c0d..8ab17b7 100644
--- a/internal/typeparams/typeparams_go118.go
+++ b/internal/typeparams/typeparams_go118.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.18
-// +build go1.18
+//go:build typeparams && go1.18
+// +build typeparams,go1.18
 
 package typeparams
 
diff --git a/internal/typeparams/typeparams_test.go b/internal/typeparams/typeparams_test.go
index 9302ad7..68e6409 100644
--- a/internal/typeparams/typeparams_test.go
+++ b/internal/typeparams/typeparams_test.go
@@ -2,8 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build go1.18
-// +build go1.18
+//go:build typeparams && go1.18
+// +build typeparams,go1.18
 
 package typeparams_test