github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/callgraph/cha/testdata/generics.go (about) 1 //go:build ignore 2 // +build ignore 3 4 package main 5 6 // Test of generic function calls. 7 8 type I interface { 9 Foo() 10 } 11 12 type A struct{} 13 14 func (a A) Foo() {} 15 16 type B struct{} 17 18 func (b B) Foo() {} 19 20 func instantiated[X I](x X) { 21 x.Foo() 22 } 23 24 func Bar() {} 25 26 func f(h func(), g func(I), k func(A), a A, b B) { 27 h() 28 29 k(a) 30 g(b) // g:func(I) is not matched by instantiated[B]:func(B) 31 32 instantiated[A](a) // static call 33 instantiated[B](b) // static call 34 } 35 36 // WANT: 37 // All calls 38 // (*A).Foo --> (A).Foo 39 // (*B).Foo --> (B).Foo 40 // f --> Bar 41 // f --> instantiated[main.A] 42 // f --> instantiated[main.A] 43 // f --> instantiated[main.B] 44 // instantiated --> (*A).Foo 45 // instantiated --> (*B).Foo 46 // instantiated --> (A).Foo 47 // instantiated --> (B).Foo 48 // instantiated[main.A] --> (A).Foo 49 // instantiated[main.B] --> (B).Foo