kythe.io@v0.0.68-0.20240422202219-7225dbc01741/kythe/typescript/testdata/class.ts (about)

     1  export {}
     2  
     3  //- @IFace defines/binding IFace
     4  //- IFace.node/kind interface
     5  interface IFace {
     6      //- @ifaceMethod defines/binding IFaceMethod
     7      //- IFaceMethod.node/kind function
     8      //- IFaceMethod.complete incomplete
     9      //- IFaceMethod childof IFace
    10      ifaceMethod(): void;
    11  
    12      //- @member defines/binding IFaceMember
    13      //- IFaceMember.node/kind variable
    14      //- IFaceMember.subkind field
    15      //- IFaceMember childof IFace
    16      member: number;
    17  }
    18  
    19  //- @IFace ref IFace
    20  //- @IExtended defines/binding IExtended
    21  //- IExtended extends IFace
    22  interface IExtended extends IFace {
    23      //- @ifaceMethod defines/binding ExtendedIFaceMethod
    24      //- ExtendedIFaceMethod overrides IFaceMethod
    25      ifaceMethod(): void;
    26  }
    27  
    28  //- @Class defines/binding Class=vname("Class#type", _, _, _, _)
    29  //- Class.node/kind record
    30  //- @IFace ref IFace
    31  //- Class extends IFace
    32  class Class implements IFace {
    33      //- @member defines/binding Member
    34      //- Member.node/kind variable
    35      //- !{ Member.tag/static _ }
    36      //- Member.subkind field
    37      //- Member childof Class
    38      member: number;
    39  
    40      //- @member defines/binding StaticMember
    41      //- StaticMember.tag/static _
    42      //- !{ @member defines/binding Member }
    43      //- StaticMember childof Class
    44      static member: number;
    45  
    46      //- @"#privateMember" defines/binding PrivateMember
    47      //- PrivateMember.node/kind variable
    48      //- PrivateMember.subkind field
    49      //- PrivateMember childof Class
    50      #privateMember: number;
    51  
    52      // This ctor declares a new member var named 'otherMember', and also
    53      // declares an ordinary parameter named 'member' (to ensure we don't get
    54      // confused about params to the ctor vs true member variables).
    55      //- @constructor defines/binding ClassCtor=vname("Class", _, _, _, _)
    56      //- ClassCtor.node/kind function
    57      //- ClassCtor.subkind constructor
    58      //- ClassCtor childof Class
    59      //- @otherMember defines/binding OtherMember
    60      //- OtherMember.node/kind variable
    61      //- @member defines/binding FakeMember
    62      //- FakeMember.node/kind variable
    63      constructor(public otherMember: number, member: string) {
    64        //- @Class ref ClassCtor
    65        //- @"new Class(0, 'a')" ref/call ClassCtor
    66        new Class(0, 'a');
    67      }
    68  
    69      //- @method defines/binding Method
    70      //- Method.node/kind function
    71      //- Method childof Class
    72      method() {
    73          //- @this ref Class
    74          //- @member ref Member
    75          this.member;
    76  
    77          //- @this ref Class
    78          //- @method ref Method
    79          this.method();
    80      }
    81  
    82      //- @"#privateMethod" defines/binding PrivateMethod
    83      //- PrivateMethod.node/kind function
    84      //- PrivateMethod childof Class
    85      #privateMethod() {
    86          //- @"#privateMember" ref PrivateMember
    87          this.#privateMember;
    88  
    89          //- @"#privateMethod" ref PrivateMethod
    90          this.#privateMethod();
    91      }
    92  
    93      //- @ifaceMethod defines/binding ClassIFaceMethod
    94      //- ClassIFaceMethod overrides IFaceMethod
    95      ifaceMethod(): void {}
    96  }
    97  
    98  
    99  //- @Subclass defines/binding Subclass=vname("Subclass#type", _, _, _, _)
   100  //- Subclass.node/kind record
   101  //- @Subclass defines/binding SubclassCtor=vname("Subclass", _, _, _, _)
   102  //- SubclassCtor.node/kind function
   103  //- @Class ref Class
   104  class Subclass extends Class {
   105      //- @method defines/binding OverridenMethod
   106      //- OverridenMethod overrides Method
   107      override method() {
   108          //- @member ref Member
   109          this.member;
   110      }
   111  }
   112  
   113  class SubSubclass extends Subclass implements IExtended {
   114      //- @ifaceMethod defines/binding OverridenIFaceMethod
   115      //- OverridenIFaceMethod overrides ClassIFaceMethod
   116      //- OverridenIFaceMethod overrides ExtendedIFaceMethod
   117      //- !{ OverridenIFaceMethod overrides IFaceMethod }
   118      override ifaceMethod() {}
   119  }
   120  
   121  //- @Class ref ClassCtor
   122  //- @Class ref/id Class
   123  let instance = new Class(3, 'a');
   124  //- @otherMember ref OtherMember
   125  instance.otherMember;
   126  
   127  // Using Class in type position should still create a link to the class.
   128  //- @Class ref Class
   129  let useAsType: Class = instance;
   130  
   131  //- @Class ref Class
   132  Class;