From 8654db4555bd0537162a72c4514c601a9a8b5c30 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 18 Feb 2021 17:01:54 -0800 Subject: [PATCH] [dev.typeparams] go/types: adjust printing of embedded struct fields (fixes x/tools/cmd/guru tests) Prior to 1.16, go/types printed an embedded struct field by simply printing its type, which may have included a package qualification. Just printing the type is not useful with generic types and we now must print the actual field name derived from the type - this leads to different output for non-generic imported embedded types. Fix by printing a package qualification in that case. Change-Id: I2cb2484da7732428d13fdfb5fe4ec1fa1ee813a2 Reviewed-on: https://go-review.googlesource.com/c/go/+/293961 Trust: Robert Griesemer Run-TryBot: Robert Griesemer Reviewed-by: Robert Findley TryBot-Result: Go Bot --- src/go/types/typestring.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/go/types/typestring.go b/src/go/types/typestring.go index 64bbb33505..6ddba08bdc 100644 --- a/src/go/types/typestring.go +++ b/src/go/types/typestring.go @@ -126,6 +126,13 @@ func writeType(buf *bytes.Buffer, typ Type, qf Qualifier, visited []Type) { if i > 0 { buf.WriteString("; ") } + // For compatibility with versions < go1.16, qualify the field name + // of embedded fields with the package name. Various tests (such as + // in x/tools/cmd/guru) depend on this output; and x/tools packages + // are run against earlier versions of Go. + if n, _ := f.typ.(*Named); f.embedded && n != nil && n.obj != nil && n.obj.pkg != nil { + writePackage(buf, n.obj.pkg, qf) + } buf.WriteString(f.name) if f.embedded { // emphasize that the embedded field's name -- 2.50.0