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"