mirror of
https://github.com/github/codeql.git
synced 2026-04-28 02:05:14 +02:00
Test case for generic inner type instantiation
This commit is contained in:
230
java/ql/test/kotlin/library-tests/generics/PrintAst.expected
Normal file
230
java/ql/test/kotlin/library-tests/generics/PrintAst.expected
Normal file
@@ -0,0 +1,230 @@
|
||||
generics.kt:
|
||||
# 0| [CompilationUnit] generics
|
||||
# 0| 1: [Class] GenericsKt
|
||||
# 3| 1: [ExtensionMethod] f0
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 3| 0: [TypeVariable] S
|
||||
#-----| 4: (Parameters)
|
||||
# 3| 0: [Parameter] <this>
|
||||
# 3| 1: [Parameter] s
|
||||
# 3| 5: [BlockStmt] { ... }
|
||||
# 4| 0: [ReturnStmt] return ...
|
||||
# 4| 0: [VarAccess] s
|
||||
# 7| 2: [ExtensionMethod] f1
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 7| 0: [TypeVariable] S
|
||||
#-----| 4: (Parameters)
|
||||
# 7| 0: [Parameter] <this>
|
||||
# 7| 1: [Parameter] s
|
||||
# 7| 5: [BlockStmt] { ... }
|
||||
# 8| 0: [ReturnStmt] return ...
|
||||
# 8| 0: [NullLiteral] null
|
||||
# 24| 3: [Method] m
|
||||
# 24| 5: [BlockStmt] { ... }
|
||||
# 25| 0: [LocalVariableDeclStmt] var ...;
|
||||
# 25| 1: [LocalVariableDeclExpr] c1
|
||||
# 25| 0: [ClassInstanceExpr] new C1<Integer,Integer>(...)
|
||||
# 25| -3: [TypeAccess] C1<Integer,Integer>
|
||||
# 25| 0: [TypeAccess] Integer
|
||||
# 25| 1: [TypeAccess] Integer
|
||||
# 25| 0: [IntegerLiteral] 1
|
||||
# 26| 1: [ExprStmt] <Expr>;
|
||||
# 26| 0: [MethodAccess] f1(...)
|
||||
# 26| -1: [VarAccess] c1
|
||||
# 26| 0: [IntegerLiteral] 2
|
||||
# 27| 2: [LocalVariableDeclStmt] var ...;
|
||||
# 27| 1: [LocalVariableDeclExpr] x1
|
||||
# 27| 0: [MethodAccess] f2(...)
|
||||
# 27| -2: [TypeAccess] String
|
||||
# 27| -1: [VarAccess] c1
|
||||
# 27| 0: [StringLiteral]
|
||||
# 28| 3: [LocalVariableDeclStmt] var ...;
|
||||
# 28| 1: [LocalVariableDeclExpr] c2
|
||||
# 28| 0: [ClassInstanceExpr] new C1<String,Integer>(...)
|
||||
# 28| -3: [TypeAccess] C1<String,Integer>
|
||||
# 28| 0: [TypeAccess] String
|
||||
# 28| 1: [TypeAccess] Integer
|
||||
# 28| 0: [StringLiteral]
|
||||
# 29| 4: [ExprStmt] <Expr>;
|
||||
# 29| 0: [MethodAccess] f1(...)
|
||||
# 29| -1: [VarAccess] c2
|
||||
# 29| 0: [StringLiteral] a
|
||||
# 30| 5: [LocalVariableDeclStmt] var ...;
|
||||
# 30| 1: [LocalVariableDeclExpr] x2
|
||||
# 30| 0: [MethodAccess] f2(...)
|
||||
# 30| -2: [TypeAccess] Integer
|
||||
# 30| -1: [VarAccess] c2
|
||||
# 30| 0: [IntegerLiteral] 3
|
||||
# 31| 6: [LocalVariableDeclStmt] var ...;
|
||||
# 31| 1: [LocalVariableDeclExpr] c3
|
||||
# 31| 0: [ClassInstanceExpr] new C2(...)
|
||||
# 31| -3: [TypeAccess] C2
|
||||
# 32| 7: [ExprStmt] <Expr>;
|
||||
# 32| 0: [MethodAccess] f4(...)
|
||||
# 32| -2: [TypeAccess] Integer
|
||||
# 32| -1: [VarAccess] c3
|
||||
# 32| 0: [IntegerLiteral] 5
|
||||
# 33| 8: [LocalVariableDeclStmt] var ...;
|
||||
# 33| 1: [LocalVariableDeclExpr] c4
|
||||
# 33| 0: [ClassInstanceExpr] new C0<Integer>(...)
|
||||
# 33| -3: [TypeAccess] C0<Integer>
|
||||
# 33| 0: [TypeAccess] Integer
|
||||
# 11| 2: [Class,GenericType,ParameterizedType] C0
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 11| 0: [TypeVariable] V
|
||||
# 11| 2: [Constructor] C0
|
||||
# 11| 5: [BlockStmt] { ... }
|
||||
# 11| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 11| 1: [ExprStmt] <Expr>;
|
||||
# 11| 0: [MethodAccess] <obinit>(...)
|
||||
# 13| 9: [Class,GenericType,ParameterizedType] C1
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 13| 0: [TypeVariable] T
|
||||
# 13| 1: [TypeVariable] W
|
||||
# 13| 1: [Constructor] C1
|
||||
#-----| 4: (Parameters)
|
||||
# 13| 0: [Parameter] t
|
||||
# 13| 5: [BlockStmt] { ... }
|
||||
# 13| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 13| 1: [ExprStmt] <Expr>;
|
||||
# 13| 0: [MethodAccess] <obinit>(...)
|
||||
# 13| 3: [Method] getT
|
||||
# 13| 5: [BlockStmt] { ... }
|
||||
# 13| 0: [ReturnStmt] return ...
|
||||
# 13| 0: [VarAccess] this.t
|
||||
# 13| -1: [ThisAccess] this
|
||||
# 13| 3: [FieldDeclaration] T t;
|
||||
# 13| -1: [TypeAccess] T
|
||||
# 14| 5: [Method] f1
|
||||
#-----| 4: (Parameters)
|
||||
# 14| 0: [Parameter] t
|
||||
# 14| 5: [BlockStmt] { ... }
|
||||
# 15| 6: [Method] f2
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 15| 0: [TypeVariable] U
|
||||
#-----| 4: (Parameters)
|
||||
# 15| 0: [Parameter] u
|
||||
# 15| 5: [BlockStmt] { ... }
|
||||
# 16| 0: [ReturnStmt] return ...
|
||||
# 16| 0: [ClassInstanceExpr] new C1<U,U>(...)
|
||||
# 16| -3: [TypeAccess] C1<U,U>
|
||||
# 16| 0: [TypeAccess] U
|
||||
# 16| 1: [TypeAccess] U
|
||||
# 16| 0: [VarAccess] u
|
||||
# 20| 15: [Class] C2
|
||||
# 20| 1: [Constructor] C2
|
||||
# 20| 5: [BlockStmt] { ... }
|
||||
# 20| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 20| 1: [ExprStmt] <Expr>;
|
||||
# 20| 0: [MethodAccess] <obinit>(...)
|
||||
# 21| 3: [Method] f4
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 21| 0: [TypeVariable] P
|
||||
#-----| 4: (Parameters)
|
||||
# 21| 0: [Parameter] p
|
||||
# 21| 5: [BlockStmt] { ... }
|
||||
# 36| 16: [Class,GenericType,ParameterizedType] BoundedTest
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 36| 0: [TypeVariable] T
|
||||
# 36| 1: [TypeVariable] S
|
||||
# 36| 1: [Constructor] BoundedTest
|
||||
# 36| 5: [BlockStmt] { ... }
|
||||
# 36| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 36| 1: [ExprStmt] <Expr>;
|
||||
# 36| 0: [MethodAccess] <obinit>(...)
|
||||
# 38| 3: [Method] m
|
||||
#-----| 4: (Parameters)
|
||||
# 38| 0: [Parameter] s
|
||||
# 38| 1: [Parameter] t
|
||||
# 38| 5: [BlockStmt] { ... }
|
||||
# 42| 17: [Class,GenericType,ParameterizedType] Outer
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 42| 0: [TypeVariable] T1
|
||||
# 42| 1: [TypeVariable] T2
|
||||
# 42| 1: [Constructor] Outer
|
||||
# 42| 5: [BlockStmt] { ... }
|
||||
# 42| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 42| 1: [ExprStmt] <Expr>;
|
||||
# 42| 0: [MethodAccess] <obinit>(...)
|
||||
# 43| 3: [Class,GenericType,ParameterizedType] Inner1
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 43| 0: [TypeVariable] T3
|
||||
# 43| 1: [TypeVariable] T4
|
||||
# 43| 2: [Constructor] Inner1
|
||||
# 43| 5: [BlockStmt] { ... }
|
||||
# 43| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 43| 1: [ExprStmt] <Expr>;
|
||||
# 43| 0: [MethodAccess] <obinit>(...)
|
||||
# 44| 3: [Method] fn1
|
||||
#-----| 4: (Parameters)
|
||||
# 44| 0: [Parameter] t1
|
||||
# 44| 1: [Parameter] t2
|
||||
# 44| 2: [Parameter] t3
|
||||
# 44| 3: [Parameter] t4
|
||||
# 44| 5: [BlockStmt] { ... }
|
||||
# 45| 0: [LocalVariableDeclStmt] var ...;
|
||||
# 45| 1: [LocalVariableDeclExpr] c
|
||||
# 45| 0: [ClassInstanceExpr] new Inner1<Integer,String,T1,T2>(...)
|
||||
# 45| -3: [TypeAccess] Inner1<Integer,String,T1,T2>
|
||||
# 45| 0: [TypeAccess] Integer
|
||||
# 45| 1: [TypeAccess] String
|
||||
# 45| -2: [ThisAccess] Outer.this
|
||||
# 45| 0: [TypeAccess] Outer
|
||||
# 49| 4: [Class,GenericType,ParameterizedType] Nested1
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 49| 0: [TypeVariable] T3
|
||||
# 49| 1: [TypeVariable] T4
|
||||
# 49| 1: [Constructor] Nested1
|
||||
# 49| 5: [BlockStmt] { ... }
|
||||
# 49| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 49| 1: [ExprStmt] <Expr>;
|
||||
# 49| 0: [MethodAccess] <obinit>(...)
|
||||
# 50| 3: [Method] fn2
|
||||
#-----| 4: (Parameters)
|
||||
# 50| 0: [Parameter] t3
|
||||
# 50| 1: [Parameter] t4
|
||||
# 50| 5: [BlockStmt] { ... }
|
||||
# 51| 0: [LocalVariableDeclStmt] var ...;
|
||||
# 51| 1: [LocalVariableDeclExpr] c
|
||||
# 51| 0: [ClassInstanceExpr] new Nested1<Integer,String>(...)
|
||||
# 51| -3: [TypeAccess] Nested1<Integer,String>
|
||||
# 51| 0: [TypeAccess] Integer
|
||||
# 51| 1: [TypeAccess] String
|
||||
# 56| 21: [Class,GenericType,ParameterizedType] Class1
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 56| 0: [TypeVariable] T1
|
||||
# 56| 1: [Constructor] Class1
|
||||
# 56| 5: [BlockStmt] { ... }
|
||||
# 56| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 56| 1: [ExprStmt] <Expr>;
|
||||
# 56| 0: [MethodAccess] <obinit>(...)
|
||||
# 57| 3: [Method] fn1
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 57| 0: [TypeVariable] T2
|
||||
#-----| 4: (Parameters)
|
||||
# 57| 0: [Parameter] t
|
||||
# 57| 5: [BlockStmt] { ... }
|
||||
# 58| 0: [LocalTypeDeclStmt] class ...
|
||||
# 58| 0: [Class,GenericType,LocalClass,ParameterizedType] Local
|
||||
#-----| -2: (Generic Parameters)
|
||||
# 58| 0: [TypeVariable] T3
|
||||
# 58| 1: [Constructor] Local
|
||||
# 58| 5: [BlockStmt] { ... }
|
||||
# 58| 0: [SuperConstructorInvocationStmt] super(...)
|
||||
# 58| 1: [ExprStmt] <Expr>;
|
||||
# 58| 0: [MethodAccess] <obinit>(...)
|
||||
# 59| 3: [Method] fn2
|
||||
#-----| 2: (Generic Parameters)
|
||||
# 59| 0: [TypeVariable] T4
|
||||
#-----| 4: (Parameters)
|
||||
# 59| 0: [Parameter] t2
|
||||
# 59| 1: [Parameter] t4
|
||||
# 59| 5: [BlockStmt] { ... }
|
||||
# 61| 1: [ExprStmt] <Expr>;
|
||||
# 61| 0: [MethodAccess] fn2(...)
|
||||
# 61| -2: [TypeAccess] String
|
||||
# 61| -1: [ClassInstanceExpr] new Local<Integer,T2,T1>(...)
|
||||
# 61| -3: [TypeAccess] Local<Integer,T2,T1>
|
||||
# 61| 0: [TypeAccess] Integer
|
||||
# 61| 0: [VarAccess] t
|
||||
# 61| 1: [StringLiteral]
|
||||
@@ -0,0 +1 @@
|
||||
semmle/code/java/PrintAst.ql
|
||||
@@ -4,6 +4,14 @@ genericType
|
||||
| generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:19:36:34 | T | 0 |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:37:36:41 | S | 1 |
|
||||
| generics.kt:42:1:54:1 | Outer | generics.kt:42:13:42:14 | T1 | 0 |
|
||||
| generics.kt:42:1:54:1 | Outer | generics.kt:42:17:42:18 | T2 | 1 |
|
||||
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:24:43:25 | T3 | 0 |
|
||||
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:28:43:29 | T4 | 1 |
|
||||
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:19:49:20 | T3 | 0 |
|
||||
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:23:49:24 | T4 | 1 |
|
||||
| generics.kt:56:1:63:1 | Class1 | generics.kt:56:14:56:15 | T1 | 0 |
|
||||
| generics.kt:58:9:60:9 | Local | generics.kt:58:21:58:22 | T3 | 0 |
|
||||
parameterizedType
|
||||
| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | V |
|
||||
| generics.kt:11:1:11:19 | C0<?> | generics.kt:11:1:11:19 | C0 | 0 | ? |
|
||||
@@ -26,6 +34,25 @@ parameterizedType
|
||||
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 1 | U |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 0 | T |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 1 | S |
|
||||
| generics.kt:42:1:54:1 | Outer | generics.kt:42:1:54:1 | Outer | 0 | T1 |
|
||||
| generics.kt:42:1:54:1 | Outer | generics.kt:42:1:54:1 | Outer | 1 | T2 |
|
||||
| generics.kt:42:1:54:1 | Outer<T1,T2> | generics.kt:42:1:54:1 | Outer | 0 | T1 |
|
||||
| generics.kt:42:1:54:1 | Outer<T1,T2> | generics.kt:42:1:54:1 | Outer | 1 | T2 |
|
||||
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:5:47:5 | Inner1 | 0 | T3 |
|
||||
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:5:47:5 | Inner1 | 1 | T4 |
|
||||
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 0 | Integer |
|
||||
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 1 | String |
|
||||
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 2 | T1 |
|
||||
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 3 | T2 |
|
||||
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:5:53:5 | Nested1 | 0 | T3 |
|
||||
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:5:53:5 | Nested1 | 1 | T4 |
|
||||
| generics.kt:49:5:53:5 | Nested1<Integer,String> | generics.kt:49:5:53:5 | Nested1 | 0 | Integer |
|
||||
| generics.kt:49:5:53:5 | Nested1<Integer,String> | generics.kt:49:5:53:5 | Nested1 | 1 | String |
|
||||
| generics.kt:56:1:63:1 | Class1 | generics.kt:56:1:63:1 | Class1 | 0 | T1 |
|
||||
| generics.kt:58:9:60:9 | Local | generics.kt:58:9:60:9 | Local | 0 | T3 |
|
||||
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 0 | Integer |
|
||||
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 1 | T2 |
|
||||
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 2 | T1 |
|
||||
function
|
||||
| generics.kt:3:1:5:1 | f0 | f0(int,java.lang.Object) |
|
||||
| generics.kt:7:1:9:1 | f1 | f1(int,java.lang.Object) |
|
||||
@@ -56,6 +83,26 @@ function
|
||||
| generics.kt:36:1:40:1 | <obinit> | <obinit>() |
|
||||
| generics.kt:36:1:40:1 | BoundedTest | BoundedTest() |
|
||||
| generics.kt:38:5:38:25 | m | m(java.lang.CharSequence,java.lang.CharSequence) |
|
||||
| generics.kt:42:1:54:1 | <obinit> | <obinit>() |
|
||||
| generics.kt:42:1:54:1 | Outer | Outer() |
|
||||
| generics.kt:43:5:47:5 | <obinit> | <obinit>() |
|
||||
| generics.kt:43:11:47:5 | Inner1 | Inner1() |
|
||||
| generics.kt:43:11:47:5 | Inner1<Integer,String,T1,T2> | Inner1<Integer,String,T1,T2>() |
|
||||
| generics.kt:44:9:46:9 | fn1 | fn1(java.lang.Object,java.lang.Object,int,java.lang.String) |
|
||||
| generics.kt:44:9:46:9 | fn1 | fn1(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object) |
|
||||
| generics.kt:49:5:53:5 | <obinit> | <obinit>() |
|
||||
| generics.kt:49:5:53:5 | Nested1 | Nested1() |
|
||||
| generics.kt:49:5:53:5 | Nested1<Integer,String> | Nested1<Integer,String>() |
|
||||
| generics.kt:50:9:52:9 | fn2 | fn2(int,java.lang.String) |
|
||||
| generics.kt:50:9:52:9 | fn2 | fn2(java.lang.Object,java.lang.Object) |
|
||||
| generics.kt:56:1:63:1 | <obinit> | <obinit>() |
|
||||
| generics.kt:56:1:63:1 | Class1 | Class1() |
|
||||
| generics.kt:57:5:62:5 | fn1 | fn1(java.lang.Object) |
|
||||
| generics.kt:58:9:60:9 | <obinit> | <obinit>() |
|
||||
| generics.kt:58:9:60:9 | Local | Local() |
|
||||
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | Local<Integer,T2,T1>() |
|
||||
| generics.kt:59:13:59:43 | fn2 | fn2(java.lang.Object,java.lang.Object) |
|
||||
| generics.kt:59:13:59:43 | fn2 | fn2(java.lang.Object,java.lang.Object) |
|
||||
genericFunction
|
||||
| generics.kt:3:1:5:1 | f0 | generics.kt:0:0:0:0 | GenericsKt | generics.kt:3:6:3:6 | S | 0 |
|
||||
| generics.kt:7:1:9:1 | f1 | generics.kt:0:0:0:0 | GenericsKt | generics.kt:7:6:7:6 | S | 0 |
|
||||
@@ -64,10 +111,14 @@ genericFunction
|
||||
| generics.kt:15:5:17:5 | f2 | generics.kt:13:1:18:1 | C1<String,Integer> | generics.kt:15:10:15:10 | U | 0 |
|
||||
| generics.kt:15:5:17:5 | f2 | generics.kt:13:1:18:1 | C1<U,U> | generics.kt:15:10:15:10 | U | 0 |
|
||||
| generics.kt:21:5:21:23 | f4 | generics.kt:20:1:22:1 | C2 | generics.kt:21:10:21:10 | P | 0 |
|
||||
| generics.kt:57:5:62:5 | fn1 | generics.kt:56:1:63:1 | Class1 | generics.kt:57:10:57:11 | T2 | 0 |
|
||||
| generics.kt:59:13:59:43 | fn2 | generics.kt:58:9:60:9 | Local | generics.kt:59:18:59:19 | T4 | 0 |
|
||||
| generics.kt:59:13:59:43 | fn2 | generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:59:18:59:19 | T4 | 0 |
|
||||
genericCall
|
||||
| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | String |
|
||||
| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | Integer |
|
||||
| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | Integer |
|
||||
| generics.kt:61:22:61:31 | fn2(...) | generics.kt:59:18:59:19 | T4 | String |
|
||||
genericCtor
|
||||
| generics.kt:16:16:16:26 | new C1<U,U>(...) | 0 | U |
|
||||
| generics.kt:16:16:16:26 | new C1<U,U>(...) | 1 | U |
|
||||
@@ -76,3 +127,8 @@ genericCtor
|
||||
| generics.kt:28:14:28:32 | new C1<String,Integer>(...) | 0 | String |
|
||||
| generics.kt:28:14:28:32 | new C1<String,Integer>(...) | 1 | Integer |
|
||||
| generics.kt:33:21:33:29 | new C0<Integer>(...) | 0 | Integer |
|
||||
| generics.kt:45:21:45:41 | new Inner1<Integer,String,T1,T2>(...) | 0 | Integer |
|
||||
| generics.kt:45:21:45:41 | new Inner1<Integer,String,T1,T2>(...) | 1 | String |
|
||||
| generics.kt:51:21:51:42 | new Nested1<Integer,String>(...) | 0 | Integer |
|
||||
| generics.kt:51:21:51:42 | new Nested1<Integer,String>(...) | 1 | String |
|
||||
| generics.kt:61:9:61:20 | new Local<Integer,T2,T1>(...) | 0 | Integer |
|
||||
|
||||
@@ -38,3 +38,26 @@ class BoundedTest<T : CharSequence, S : T> {
|
||||
fun m(s: S, t: T) { }
|
||||
|
||||
}
|
||||
|
||||
class Outer<T1, T2> {
|
||||
inner class Inner1<T3, T4> {
|
||||
fun fn1(t1: T1, t2: T2, t3: T3, t4: T4) {
|
||||
val c = Inner1<Int, String>()
|
||||
}
|
||||
}
|
||||
|
||||
class Nested1<T3, T4> {
|
||||
fun fn2(t3: T3, t4: T4) {
|
||||
val c = Nested1<Int, String>()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Class1<T1> {
|
||||
fun <T2> fn1(t: T2) {
|
||||
class Local<T3> {
|
||||
fun <T4> fn2(t2: T2, t4: T4) {}
|
||||
}
|
||||
Local<Int>().fn2(t, "")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user