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