Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9e21fa8

Browse files
tamasvajkigfoo
authored andcommitted
Test case for generic inner type instantiation
1 parent 978978b commit 9e21fa8

4 files changed

Lines changed: 310 additions & 0 deletions

File tree

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
generics.kt:
2+
# 0| [CompilationUnit] generics
3+
# 0| 1: [Class] GenericsKt
4+
# 3| 1: [ExtensionMethod] f0
5+
#-----| 2: (Generic Parameters)
6+
# 3| 0: [TypeVariable] S
7+
#-----| 4: (Parameters)
8+
# 3| 0: [Parameter] <this>
9+
# 3| 1: [Parameter] s
10+
# 3| 5: [BlockStmt] { ... }
11+
# 4| 0: [ReturnStmt] return ...
12+
# 4| 0: [VarAccess] s
13+
# 7| 2: [ExtensionMethod] f1
14+
#-----| 2: (Generic Parameters)
15+
# 7| 0: [TypeVariable] S
16+
#-----| 4: (Parameters)
17+
# 7| 0: [Parameter] <this>
18+
# 7| 1: [Parameter] s
19+
# 7| 5: [BlockStmt] { ... }
20+
# 8| 0: [ReturnStmt] return ...
21+
# 8| 0: [NullLiteral] null
22+
# 24| 3: [Method] m
23+
# 24| 5: [BlockStmt] { ... }
24+
# 25| 0: [LocalVariableDeclStmt] var ...;
25+
# 25| 1: [LocalVariableDeclExpr] c1
26+
# 25| 0: [ClassInstanceExpr] new C1<Integer,Integer>(...)
27+
# 25| -3: [TypeAccess] C1<Integer,Integer>
28+
# 25| 0: [TypeAccess] Integer
29+
# 25| 1: [TypeAccess] Integer
30+
# 25| 0: [IntegerLiteral] 1
31+
# 26| 1: [ExprStmt] <Expr>;
32+
# 26| 0: [MethodAccess] f1(...)
33+
# 26| -1: [VarAccess] c1
34+
# 26| 0: [IntegerLiteral] 2
35+
# 27| 2: [LocalVariableDeclStmt] var ...;
36+
# 27| 1: [LocalVariableDeclExpr] x1
37+
# 27| 0: [MethodAccess] f2(...)
38+
# 27| -2: [TypeAccess] String
39+
# 27| -1: [VarAccess] c1
40+
# 27| 0: [StringLiteral]
41+
# 28| 3: [LocalVariableDeclStmt] var ...;
42+
# 28| 1: [LocalVariableDeclExpr] c2
43+
# 28| 0: [ClassInstanceExpr] new C1<String,Integer>(...)
44+
# 28| -3: [TypeAccess] C1<String,Integer>
45+
# 28| 0: [TypeAccess] String
46+
# 28| 1: [TypeAccess] Integer
47+
# 28| 0: [StringLiteral]
48+
# 29| 4: [ExprStmt] <Expr>;
49+
# 29| 0: [MethodAccess] f1(...)
50+
# 29| -1: [VarAccess] c2
51+
# 29| 0: [StringLiteral] a
52+
# 30| 5: [LocalVariableDeclStmt] var ...;
53+
# 30| 1: [LocalVariableDeclExpr] x2
54+
# 30| 0: [MethodAccess] f2(...)
55+
# 30| -2: [TypeAccess] Integer
56+
# 30| -1: [VarAccess] c2
57+
# 30| 0: [IntegerLiteral] 3
58+
# 31| 6: [LocalVariableDeclStmt] var ...;
59+
# 31| 1: [LocalVariableDeclExpr] c3
60+
# 31| 0: [ClassInstanceExpr] new C2(...)
61+
# 31| -3: [TypeAccess] C2
62+
# 32| 7: [ExprStmt] <Expr>;
63+
# 32| 0: [MethodAccess] f4(...)
64+
# 32| -2: [TypeAccess] Integer
65+
# 32| -1: [VarAccess] c3
66+
# 32| 0: [IntegerLiteral] 5
67+
# 33| 8: [LocalVariableDeclStmt] var ...;
68+
# 33| 1: [LocalVariableDeclExpr] c4
69+
# 33| 0: [ClassInstanceExpr] new C0<Integer>(...)
70+
# 33| -3: [TypeAccess] C0<Integer>
71+
# 33| 0: [TypeAccess] Integer
72+
# 11| 2: [Class,GenericType,ParameterizedType] C0
73+
#-----| -2: (Generic Parameters)
74+
# 11| 0: [TypeVariable] V
75+
# 11| 2: [Constructor] C0
76+
# 11| 5: [BlockStmt] { ... }
77+
# 11| 0: [SuperConstructorInvocationStmt] super(...)
78+
# 11| 1: [ExprStmt] <Expr>;
79+
# 11| 0: [MethodAccess] <obinit>(...)
80+
# 13| 9: [Class,GenericType,ParameterizedType] C1
81+
#-----| -2: (Generic Parameters)
82+
# 13| 0: [TypeVariable] T
83+
# 13| 1: [TypeVariable] W
84+
# 13| 1: [Constructor] C1
85+
#-----| 4: (Parameters)
86+
# 13| 0: [Parameter] t
87+
# 13| 5: [BlockStmt] { ... }
88+
# 13| 0: [SuperConstructorInvocationStmt] super(...)
89+
# 13| 1: [ExprStmt] <Expr>;
90+
# 13| 0: [MethodAccess] <obinit>(...)
91+
# 13| 3: [Method] getT
92+
# 13| 5: [BlockStmt] { ... }
93+
# 13| 0: [ReturnStmt] return ...
94+
# 13| 0: [VarAccess] this.t
95+
# 13| -1: [ThisAccess] this
96+
# 13| 3: [FieldDeclaration] T t;
97+
# 13| -1: [TypeAccess] T
98+
# 14| 5: [Method] f1
99+
#-----| 4: (Parameters)
100+
# 14| 0: [Parameter] t
101+
# 14| 5: [BlockStmt] { ... }
102+
# 15| 6: [Method] f2
103+
#-----| 2: (Generic Parameters)
104+
# 15| 0: [TypeVariable] U
105+
#-----| 4: (Parameters)
106+
# 15| 0: [Parameter] u
107+
# 15| 5: [BlockStmt] { ... }
108+
# 16| 0: [ReturnStmt] return ...
109+
# 16| 0: [ClassInstanceExpr] new C1<U,U>(...)
110+
# 16| -3: [TypeAccess] C1<U,U>
111+
# 16| 0: [TypeAccess] U
112+
# 16| 1: [TypeAccess] U
113+
# 16| 0: [VarAccess] u
114+
# 20| 15: [Class] C2
115+
# 20| 1: [Constructor] C2
116+
# 20| 5: [BlockStmt] { ... }
117+
# 20| 0: [SuperConstructorInvocationStmt] super(...)
118+
# 20| 1: [ExprStmt] <Expr>;
119+
# 20| 0: [MethodAccess] <obinit>(...)
120+
# 21| 3: [Method] f4
121+
#-----| 2: (Generic Parameters)
122+
# 21| 0: [TypeVariable] P
123+
#-----| 4: (Parameters)
124+
# 21| 0: [Parameter] p
125+
# 21| 5: [BlockStmt] { ... }
126+
# 36| 16: [Class,GenericType,ParameterizedType] BoundedTest
127+
#-----| -2: (Generic Parameters)
128+
# 36| 0: [TypeVariable] T
129+
# 36| 1: [TypeVariable] S
130+
# 36| 1: [Constructor] BoundedTest
131+
# 36| 5: [BlockStmt] { ... }
132+
# 36| 0: [SuperConstructorInvocationStmt] super(...)
133+
# 36| 1: [ExprStmt] <Expr>;
134+
# 36| 0: [MethodAccess] <obinit>(...)
135+
# 38| 3: [Method] m
136+
#-----| 4: (Parameters)
137+
# 38| 0: [Parameter] s
138+
# 38| 1: [Parameter] t
139+
# 38| 5: [BlockStmt] { ... }
140+
# 42| 17: [Class,GenericType,ParameterizedType] Outer
141+
#-----| -2: (Generic Parameters)
142+
# 42| 0: [TypeVariable] T1
143+
# 42| 1: [TypeVariable] T2
144+
# 42| 1: [Constructor] Outer
145+
# 42| 5: [BlockStmt] { ... }
146+
# 42| 0: [SuperConstructorInvocationStmt] super(...)
147+
# 42| 1: [ExprStmt] <Expr>;
148+
# 42| 0: [MethodAccess] <obinit>(...)
149+
# 43| 3: [Class,GenericType,ParameterizedType] Inner1
150+
#-----| -2: (Generic Parameters)
151+
# 43| 0: [TypeVariable] T3
152+
# 43| 1: [TypeVariable] T4
153+
# 43| 2: [Constructor] Inner1
154+
# 43| 5: [BlockStmt] { ... }
155+
# 43| 0: [SuperConstructorInvocationStmt] super(...)
156+
# 43| 1: [ExprStmt] <Expr>;
157+
# 43| 0: [MethodAccess] <obinit>(...)
158+
# 44| 3: [Method] fn1
159+
#-----| 4: (Parameters)
160+
# 44| 0: [Parameter] t1
161+
# 44| 1: [Parameter] t2
162+
# 44| 2: [Parameter] t3
163+
# 44| 3: [Parameter] t4
164+
# 44| 5: [BlockStmt] { ... }
165+
# 45| 0: [LocalVariableDeclStmt] var ...;
166+
# 45| 1: [LocalVariableDeclExpr] c
167+
# 45| 0: [ClassInstanceExpr] new Inner1<Integer,String,T1,T2>(...)
168+
# 45| -3: [TypeAccess] Inner1<Integer,String,T1,T2>
169+
# 45| 0: [TypeAccess] Integer
170+
# 45| 1: [TypeAccess] String
171+
# 45| -2: [ThisAccess] Outer.this
172+
# 45| 0: [TypeAccess] Outer
173+
# 49| 4: [Class,GenericType,ParameterizedType] Nested1
174+
#-----| -2: (Generic Parameters)
175+
# 49| 0: [TypeVariable] T3
176+
# 49| 1: [TypeVariable] T4
177+
# 49| 1: [Constructor] Nested1
178+
# 49| 5: [BlockStmt] { ... }
179+
# 49| 0: [SuperConstructorInvocationStmt] super(...)
180+
# 49| 1: [ExprStmt] <Expr>;
181+
# 49| 0: [MethodAccess] <obinit>(...)
182+
# 50| 3: [Method] fn2
183+
#-----| 4: (Parameters)
184+
# 50| 0: [Parameter] t3
185+
# 50| 1: [Parameter] t4
186+
# 50| 5: [BlockStmt] { ... }
187+
# 51| 0: [LocalVariableDeclStmt] var ...;
188+
# 51| 1: [LocalVariableDeclExpr] c
189+
# 51| 0: [ClassInstanceExpr] new Nested1<Integer,String>(...)
190+
# 51| -3: [TypeAccess] Nested1<Integer,String>
191+
# 51| 0: [TypeAccess] Integer
192+
# 51| 1: [TypeAccess] String
193+
# 56| 21: [Class,GenericType,ParameterizedType] Class1
194+
#-----| -2: (Generic Parameters)
195+
# 56| 0: [TypeVariable] T1
196+
# 56| 1: [Constructor] Class1
197+
# 56| 5: [BlockStmt] { ... }
198+
# 56| 0: [SuperConstructorInvocationStmt] super(...)
199+
# 56| 1: [ExprStmt] <Expr>;
200+
# 56| 0: [MethodAccess] <obinit>(...)
201+
# 57| 3: [Method] fn1
202+
#-----| 2: (Generic Parameters)
203+
# 57| 0: [TypeVariable] T2
204+
#-----| 4: (Parameters)
205+
# 57| 0: [Parameter] t
206+
# 57| 5: [BlockStmt] { ... }
207+
# 58| 0: [LocalTypeDeclStmt] class ...
208+
# 58| 0: [Class,GenericType,LocalClass,ParameterizedType] Local
209+
#-----| -2: (Generic Parameters)
210+
# 58| 0: [TypeVariable] T3
211+
# 58| 1: [Constructor] Local
212+
# 58| 5: [BlockStmt] { ... }
213+
# 58| 0: [SuperConstructorInvocationStmt] super(...)
214+
# 58| 1: [ExprStmt] <Expr>;
215+
# 58| 0: [MethodAccess] <obinit>(...)
216+
# 59| 3: [Method] fn2
217+
#-----| 2: (Generic Parameters)
218+
# 59| 0: [TypeVariable] T4
219+
#-----| 4: (Parameters)
220+
# 59| 0: [Parameter] t2
221+
# 59| 1: [Parameter] t4
222+
# 59| 5: [BlockStmt] { ... }
223+
# 61| 1: [ExprStmt] <Expr>;
224+
# 61| 0: [MethodAccess] fn2(...)
225+
# 61| -2: [TypeAccess] String
226+
# 61| -1: [ClassInstanceExpr] new Local<Integer,T2,T1>(...)
227+
# 61| -3: [TypeAccess] Local<Integer,T2,T1>
228+
# 61| 0: [TypeAccess] Integer
229+
# 61| 0: [VarAccess] t
230+
# 61| 1: [StringLiteral]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
semmle/code/java/PrintAst.ql

java/ql/test/kotlin/library-tests/generics/generics.expected

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ genericType
44
| generics.kt:13:1:18:1 | C1 | generics.kt:13:13:13:13 | W | 1 |
55
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:19:36:34 | T | 0 |
66
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:37:36:41 | S | 1 |
7+
| generics.kt:42:1:54:1 | Outer | generics.kt:42:13:42:14 | T1 | 0 |
8+
| generics.kt:42:1:54:1 | Outer | generics.kt:42:17:42:18 | T2 | 1 |
9+
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:24:43:25 | T3 | 0 |
10+
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:28:43:29 | T4 | 1 |
11+
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:19:49:20 | T3 | 0 |
12+
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:23:49:24 | T4 | 1 |
13+
| generics.kt:56:1:63:1 | Class1 | generics.kt:56:14:56:15 | T1 | 0 |
14+
| generics.kt:58:9:60:9 | Local | generics.kt:58:21:58:22 | T3 | 0 |
715
parameterizedType
816
| generics.kt:11:1:11:19 | C0 | generics.kt:11:1:11:19 | C0 | 0 | V |
917
| generics.kt:11:1:11:19 | C0<?> | generics.kt:11:1:11:19 | C0 | 0 | ? |
@@ -26,6 +34,25 @@ parameterizedType
2634
| generics.kt:13:1:18:1 | C1<U,U> | generics.kt:13:1:18:1 | C1 | 1 | U |
2735
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 0 | T |
2836
| generics.kt:36:1:40:1 | BoundedTest | generics.kt:36:1:40:1 | BoundedTest | 1 | S |
37+
| generics.kt:42:1:54:1 | Outer | generics.kt:42:1:54:1 | Outer | 0 | T1 |
38+
| generics.kt:42:1:54:1 | Outer | generics.kt:42:1:54:1 | Outer | 1 | T2 |
39+
| generics.kt:42:1:54:1 | Outer<T1,T2> | generics.kt:42:1:54:1 | Outer | 0 | T1 |
40+
| generics.kt:42:1:54:1 | Outer<T1,T2> | generics.kt:42:1:54:1 | Outer | 1 | T2 |
41+
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:5:47:5 | Inner1 | 0 | T3 |
42+
| generics.kt:43:5:47:5 | Inner1 | generics.kt:43:5:47:5 | Inner1 | 1 | T4 |
43+
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 0 | Integer |
44+
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 1 | String |
45+
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 2 | T1 |
46+
| generics.kt:43:5:47:5 | Inner1<Integer,String,T1,T2> | generics.kt:43:5:47:5 | Inner1 | 3 | T2 |
47+
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:5:53:5 | Nested1 | 0 | T3 |
48+
| generics.kt:49:5:53:5 | Nested1 | generics.kt:49:5:53:5 | Nested1 | 1 | T4 |
49+
| generics.kt:49:5:53:5 | Nested1<Integer,String> | generics.kt:49:5:53:5 | Nested1 | 0 | Integer |
50+
| generics.kt:49:5:53:5 | Nested1<Integer,String> | generics.kt:49:5:53:5 | Nested1 | 1 | String |
51+
| generics.kt:56:1:63:1 | Class1 | generics.kt:56:1:63:1 | Class1 | 0 | T1 |
52+
| generics.kt:58:9:60:9 | Local | generics.kt:58:9:60:9 | Local | 0 | T3 |
53+
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 0 | Integer |
54+
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 1 | T2 |
55+
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | generics.kt:58:9:60:9 | Local | 2 | T1 |
2956
function
3057
| generics.kt:3:1:5:1 | f0 | f0(int,java.lang.Object) |
3158
| generics.kt:7:1:9:1 | f1 | f1(int,java.lang.Object) |
@@ -56,6 +83,26 @@ function
5683
| generics.kt:36:1:40:1 | <obinit> | <obinit>() |
5784
| generics.kt:36:1:40:1 | BoundedTest | BoundedTest() |
5885
| generics.kt:38:5:38:25 | m | m(java.lang.CharSequence,java.lang.CharSequence) |
86+
| generics.kt:42:1:54:1 | <obinit> | <obinit>() |
87+
| generics.kt:42:1:54:1 | Outer | Outer() |
88+
| generics.kt:43:5:47:5 | <obinit> | <obinit>() |
89+
| generics.kt:43:11:47:5 | Inner1 | Inner1() |
90+
| generics.kt:43:11:47:5 | Inner1<Integer,String,T1,T2> | Inner1<Integer,String,T1,T2>() |
91+
| generics.kt:44:9:46:9 | fn1 | fn1(java.lang.Object,java.lang.Object,int,java.lang.String) |
92+
| generics.kt:44:9:46:9 | fn1 | fn1(java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object) |
93+
| generics.kt:49:5:53:5 | <obinit> | <obinit>() |
94+
| generics.kt:49:5:53:5 | Nested1 | Nested1() |
95+
| generics.kt:49:5:53:5 | Nested1<Integer,String> | Nested1<Integer,String>() |
96+
| generics.kt:50:9:52:9 | fn2 | fn2(int,java.lang.String) |
97+
| generics.kt:50:9:52:9 | fn2 | fn2(java.lang.Object,java.lang.Object) |
98+
| generics.kt:56:1:63:1 | <obinit> | <obinit>() |
99+
| generics.kt:56:1:63:1 | Class1 | Class1() |
100+
| generics.kt:57:5:62:5 | fn1 | fn1(java.lang.Object) |
101+
| generics.kt:58:9:60:9 | <obinit> | <obinit>() |
102+
| generics.kt:58:9:60:9 | Local | Local() |
103+
| generics.kt:58:9:60:9 | Local<Integer,T2,T1> | Local<Integer,T2,T1>() |
104+
| generics.kt:59:13:59:43 | fn2 | fn2(java.lang.Object,java.lang.Object) |
105+
| generics.kt:59:13:59:43 | fn2 | fn2(java.lang.Object,java.lang.Object) |
59106
genericFunction
60107
| generics.kt:3:1:5:1 | f0 | generics.kt:0:0:0:0 | GenericsKt | generics.kt:3:6:3:6 | S | 0 |
61108
| 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
64111
| generics.kt:15:5:17:5 | f2 | generics.kt:13:1:18:1 | C1<String,Integer> | generics.kt:15:10:15:10 | U | 0 |
65112
| generics.kt:15:5:17:5 | f2 | generics.kt:13:1:18:1 | C1<U,U> | generics.kt:15:10:15:10 | U | 0 |
66113
| generics.kt:21:5:21:23 | f4 | generics.kt:20:1:22:1 | C2 | generics.kt:21:10:21:10 | P | 0 |
114+
| generics.kt:57:5:62:5 | fn1 | generics.kt:56:1:63:1 | Class1 | generics.kt:57:10:57:11 | T2 | 0 |
115+
| generics.kt:59:13:59:43 | fn2 | generics.kt:58:9:60:9 | Local | generics.kt:59:18:59:19 | T4 | 0 |
116+
| 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 |
67117
genericCall
68118
| generics.kt:27:17:27:22 | f2(...) | generics.kt:15:10:15:10 | U | String |
69119
| generics.kt:30:17:30:21 | f2(...) | generics.kt:15:10:15:10 | U | Integer |
70120
| generics.kt:32:8:32:12 | f4(...) | generics.kt:21:10:21:10 | P | Integer |
121+
| generics.kt:61:22:61:31 | fn2(...) | generics.kt:59:18:59:19 | T4 | String |
71122
genericCtor
72123
| generics.kt:16:16:16:26 | new C1<U,U>(...) | 0 | U |
73124
| generics.kt:16:16:16:26 | new C1<U,U>(...) | 1 | U |
@@ -76,3 +127,8 @@ genericCtor
76127
| generics.kt:28:14:28:32 | new C1<String,Integer>(...) | 0 | String |
77128
| generics.kt:28:14:28:32 | new C1<String,Integer>(...) | 1 | Integer |
78129
| generics.kt:33:21:33:29 | new C0<Integer>(...) | 0 | Integer |
130+
| generics.kt:45:21:45:41 | new Inner1<Integer,String,T1,T2>(...) | 0 | Integer |
131+
| generics.kt:45:21:45:41 | new Inner1<Integer,String,T1,T2>(...) | 1 | String |
132+
| generics.kt:51:21:51:42 | new Nested1<Integer,String>(...) | 0 | Integer |
133+
| generics.kt:51:21:51:42 | new Nested1<Integer,String>(...) | 1 | String |
134+
| generics.kt:61:9:61:20 | new Local<Integer,T2,T1>(...) | 0 | Integer |

java/ql/test/kotlin/library-tests/generics/generics.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,26 @@ class BoundedTest<T : CharSequence, S : T> {
3838
fun m(s: S, t: T) { }
3939

4040
}
41+
42+
class Outer<T1, T2> {
43+
inner class Inner1<T3, T4> {
44+
fun fn1(t1: T1, t2: T2, t3: T3, t4: T4) {
45+
val c = Inner1<Int, String>()
46+
}
47+
}
48+
49+
class Nested1<T3, T4> {
50+
fun fn2(t3: T3, t4: T4) {
51+
val c = Nested1<Int, String>()
52+
}
53+
}
54+
}
55+
56+
class Class1<T1> {
57+
fun <T2> fn1(t: T2) {
58+
class Local<T3> {
59+
fun <T4> fn2(t2: T2, t4: T4) {}
60+
}
61+
Local<Int>().fn2(t, "")
62+
}
63+
}

0 commit comments

Comments
 (0)