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