You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two changes were required to handle generic types.
First, the code that tries to establish a correspondence between two
types could see one types.Type value that came from the type
declaration, looking like this:
type Foo[T any]
and another types.Type value that came from a method argument or
return value, looking like this, with no constraint:
func (Foo[T]) ...
We were using types.Identical in this case, but that function
(rightly, according to its narrow definition) returns false
when given `Foo[T any]` and `Foo[T]`.
So I defined typesEquivalent, which is like types.Identical
but succeeds in the above case.
The second change was also to the establishCorrespondence method.
Previously, any two named types could correspond. With generics, that
isn't true if the types have different type parameters. Here we will
always have the full types, so we check that there are the same number
of type params and they have identical constraints. The type param
names don't matter.
Also, use cmp.Diff for TestChanges to make it easier to fix broken
tests.
Also, update the config for go/packages in the apidiff
command. Apparently there were breaking changes to that package that
made `apidiff -w` fail.
Also, fix a gorelease test because the output of apidiff has changed
for incompatible generic types.
Change-Id: I0a75eb43f3ce4b55748f86a2c33a1cea6d52b35d
Reviewed-on: https://go-review.googlesource.com/c/exp/+/411076
Run-TryBot: Jonathan Amsterdam <[email protected]>
TryBot-Result: Gopher Robot <[email protected]>
Reviewed-by: Jean de Klerk <[email protected]>
0 commit comments