kythe.io@v0.0.68-0.20240422202219-7225dbc01741/kythe/go/indexer/testdata/generics/genericmethod.go (about) 1 package genericmethod 2 3 func main() { 4 c := &Container[string]{"element"} 5 //- @Get ref Get 6 c.Get() 7 //- @Put ref Put 8 c.Put("yup") 9 10 //- @getter defines/binding Getter 11 //- @Get ref Get 12 getter := c.Get 13 //- @getter ref Getter 14 getter() 15 } 16 17 // - @Container defines/binding Container 18 // - @T defines/binding TVar 19 type Container[T any] struct { 20 //- @T ref TVar 21 Element T 22 } 23 24 // Methods introduce unique tvars 25 // TODO(schroederc): relate these to the struct tvar 26 // - @Get defines/binding Get 27 // - @#0T defines/binding GetTVar 28 // - GetTVar.node/kind tvar 29 // - @#1T ref GetTVar 30 // - !{@#0T ref TVar} 31 // - !{@#1T ref TVar} 32 // - @"Container[T]" ref TApp 33 // - TApp.node/kind tapp 34 // - TApp param.0 Container 35 // - TApp param.1 GetTVar 36 func (c *Container[T]) Get() T { 37 //- @T ref GetTVar 38 //- !{@T ref TVar} 39 var res T = c.Element 40 return res 41 } 42 43 //- Get code GetCode 44 //- GetCode.kind "BOX" 45 //- GetCode child.1 RecvCode 46 //- RecvCode child.0 LookupCode 47 //- LookupCode.kind "LOOKUP_BY_PARAM" 48 49 // And can technically be renamed 50 // - @Put defines/binding Put 51 // - @#0A defines/binding PutTVar 52 // - PutTVar.node/kind tvar 53 // - @#1A ref PutTVar 54 // - @#2A ref PutTVar 55 // - !{@#0A ref GetTVar} 56 // - !{@#1A ref GetTVar} 57 // - !{@#2A ref GetTVar} 58 func (c *Container[A]) Put(t A) A { 59 //- @A ref PutTVar 60 //- !{@A ref GetTVar} 61 var temp A = c.Element 62 c.Element = temp 63 return temp 64 } 65 66 // - @Interface defines/binding Interface 67 type Interface interface { 68 //- @Get defines/binding GetI 69 Get() string 70 //- @Put defines/binding PutI 71 Put(string) string 72 73 //- Container satisfies Interface 74 //- Get overrides GetI 75 //- Put overrides PutI 76 } 77 78 // kythe/go/indexer/genericmethod_test.Container.Get.T 79 //- GetTVar code TVarCode 80 //- TVarCode.kind "BOX" 81 //- TVarCode child.0 TVarName 82 //- TVarName child.0 C 83 //- TVarName child.1 I 84 //- C.kind "CONTEXT" 85 //- C.post_child_text "." 86 //- C.add_final_list_token "true" 87 //- C child.0 Pkg 88 //- C child.1 Struct 89 //- C child.2 Method 90 //- Pkg.kind "IDENTIFIER" 91 //- Pkg.pre_text "kythe/go/indexer/genericmethod_test" 92 //- Struct.kind "IDENTIFIER" 93 //- Struct.pre_text "Container" 94 //- Method.kind "IDENTIFIER" 95 //- Method.pre_text "Get" 96 //- I.kind "IDENTIFIER" 97 //- I.pre_text "T"