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

Skip to content

Commit a7e6ec9

Browse files
tamasvajkigfoo
authored andcommitted
Add test case for delegated properties initialized through provideDelegate operator
1 parent a399295 commit a7e6ec9

4 files changed

Lines changed: 199 additions & 147 deletions

File tree

java/ql/test/kotlin/library-tests/exprs/PrintAst.expected

Lines changed: 110 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,9 @@ delegatedProperties.kt:
6161
# 17| 5: [BlockStmt] { ... }
6262
# 17| 0: [SuperConstructorInvocationStmt] super(...)
6363
# 17| 1: [BlockStmt] { ... }
64-
# 40| 0: [ExprStmt] <Expr>;
65-
# 40| 0: [KtInitializerAssignExpr] ...=...
66-
# 40| 0: [VarAccess] varResource0$delegate
64+
# 42| 0: [ExprStmt] <Expr>;
65+
# 42| 0: [KtInitializerAssignExpr] ...=...
66+
# 42| 0: [VarAccess] varResource0$delegate
6767
# 18| 2: [Method] fn
6868
#-----| 4: (Parameters)
6969
# 18| 0: [Parameter] map
@@ -241,92 +241,122 @@ delegatedProperties.kt:
241241
# 37| 0: [MethodAccess] setVarResource0(...)
242242
# 37| -1: [ThisAccess] this
243243
# 37| 0: [IntegerLiteral] 3
244-
# 40| 3: [Method] getVarResource0
245-
# 40| 5: [BlockStmt] { ... }
246-
# 40| 0: [ReturnStmt] return ...
247-
# 40| 0: [MethodAccess] getValue(...)
248-
# 40| -1: [VarAccess] this.varResource0$delegate
249-
# 40| -1: [ThisAccess] this
244+
# 39| 9: [BlockStmt] { ... }
245+
# 39| 0: [LocalVariableDeclStmt] var ...;
246+
# 39| 1: [LocalVariableDeclExpr] varResource2$delegate
247+
# 39| 0: [MethodAccess] provideDelegate(...)
248+
# 39| -1: [ClassInstanceExpr] new DelegateProvider(...)
249+
# 39| -3: [TypeAccess] DelegateProvider
250+
# 1| 0: [NullLiteral] null
251+
# 39| 1: [LocalTypeDeclStmt] class ...
252+
# 39| 0: [LocalClass]
253+
# 39| 1: [Constructor]
254+
# 39| 5: [BlockStmt] { ... }
255+
# 39| 0: [SuperConstructorInvocationStmt] super(...)
256+
# 39| 1: [Method] <get-varResource2>
257+
# 39| 5: [BlockStmt] { ... }
258+
# 39| 0: [ReturnStmt] return ...
259+
# 39| 0: [MethodAccess] getValue(...)
260+
# 39| -1: [VarAccess] varResource2$delegate
261+
# 0| 0: [NullLiteral] null
262+
# 42| 3: [Method] getVarResource0
263+
# 42| 5: [BlockStmt] { ... }
264+
# 42| 0: [ReturnStmt] return ...
265+
# 42| 0: [MethodAccess] getValue(...)
266+
# 42| -1: [VarAccess] this.varResource0$delegate
267+
# 42| -1: [ThisAccess] this
250268
# 1| 0: [ThisAccess] this
251-
# 40| 1: [PropertyRefExpr] ...::...
252-
# 40| -4: [AnonymousClass] new KMutableProperty1<Owner,Integer>(...) { ... }
253-
# 40| 1: [Constructor]
254-
# 40| 5: [BlockStmt] { ... }
255-
# 40| 0: [SuperConstructorInvocationStmt] super(...)
256-
# 40| 1: [Method] get
269+
# 42| 1: [PropertyRefExpr] ...::...
270+
# 42| -4: [AnonymousClass] new KMutableProperty1<Owner,Integer>(...) { ... }
271+
# 42| 1: [Constructor]
272+
# 42| 5: [BlockStmt] { ... }
273+
# 42| 0: [SuperConstructorInvocationStmt] super(...)
274+
# 42| 1: [Method] get
257275
#-----| 4: (Parameters)
258-
# 40| 0: [Parameter] a0
259-
# 40| 5: [BlockStmt] { ... }
260-
# 40| 0: [ReturnStmt] return ...
261-
# 40| 0: [MethodAccess] getVarResource0(...)
262-
# 40| -1: [VarAccess] a0
263-
# 40| 1: [Method] set
276+
# 42| 0: [Parameter] a0
277+
# 42| 5: [BlockStmt] { ... }
278+
# 42| 0: [ReturnStmt] return ...
279+
# 42| 0: [MethodAccess] getVarResource0(...)
280+
# 42| -1: [VarAccess] a0
281+
# 42| 1: [Method] set
264282
#-----| 4: (Parameters)
265-
# 40| 0: [Parameter] a0
266-
# 40| 1: [Parameter] a1
267-
# 40| 5: [BlockStmt] { ... }
268-
# 40| 0: [ReturnStmt] return ...
269-
# 40| 0: [MethodAccess] setVarResource0(...)
270-
# 40| -1: [VarAccess] a0
271-
# 40| 0: [VarAccess] a1
272-
# 40| -3: [TypeAccess] KMutableProperty1<Owner,Integer>
273-
# 40| 0: [TypeAccess] Owner
274-
# 40| 1: [TypeAccess] Integer
275-
# 40| 3: [Method] setVarResource0
283+
# 42| 0: [Parameter] a0
284+
# 42| 1: [Parameter] a1
285+
# 42| 5: [BlockStmt] { ... }
286+
# 42| 0: [ReturnStmt] return ...
287+
# 42| 0: [MethodAccess] setVarResource0(...)
288+
# 42| -1: [VarAccess] a0
289+
# 42| 0: [VarAccess] a1
290+
# 42| -3: [TypeAccess] KMutableProperty1<Owner,Integer>
291+
# 42| 0: [TypeAccess] Owner
292+
# 42| 1: [TypeAccess] Integer
293+
# 42| 3: [Method] setVarResource0
276294
#-----| 4: (Parameters)
277-
# 40| 0: [Parameter] <set-?>
278-
# 40| 5: [BlockStmt] { ... }
279-
# 40| 0: [ReturnStmt] return ...
280-
# 40| 0: [MethodAccess] setValue(...)
281-
# 40| -1: [VarAccess] this.varResource0$delegate
282-
# 40| -1: [ThisAccess] this
295+
# 42| 0: [Parameter] <set-?>
296+
# 42| 5: [BlockStmt] { ... }
297+
# 42| 0: [ReturnStmt] return ...
298+
# 42| 0: [MethodAccess] setValue(...)
299+
# 42| -1: [VarAccess] this.varResource0$delegate
300+
# 42| -1: [ThisAccess] this
283301
# 1| 0: [ThisAccess] this
284-
# 40| 1: [PropertyRefExpr] ...::...
285-
# 40| -4: [AnonymousClass] new KMutableProperty1<Owner,Integer>(...) { ... }
286-
# 40| 1: [Constructor]
287-
# 40| 5: [BlockStmt] { ... }
288-
# 40| 0: [SuperConstructorInvocationStmt] super(...)
289-
# 40| 1: [Method] get
302+
# 42| 1: [PropertyRefExpr] ...::...
303+
# 42| -4: [AnonymousClass] new KMutableProperty1<Owner,Integer>(...) { ... }
304+
# 42| 1: [Constructor]
305+
# 42| 5: [BlockStmt] { ... }
306+
# 42| 0: [SuperConstructorInvocationStmt] super(...)
307+
# 42| 1: [Method] get
290308
#-----| 4: (Parameters)
291-
# 40| 0: [Parameter] a0
292-
# 40| 5: [BlockStmt] { ... }
293-
# 40| 0: [ReturnStmt] return ...
294-
# 40| 0: [MethodAccess] getVarResource0(...)
295-
# 40| -1: [VarAccess] a0
296-
# 40| 1: [Method] set
309+
# 42| 0: [Parameter] a0
310+
# 42| 5: [BlockStmt] { ... }
311+
# 42| 0: [ReturnStmt] return ...
312+
# 42| 0: [MethodAccess] getVarResource0(...)
313+
# 42| -1: [VarAccess] a0
314+
# 42| 1: [Method] set
297315
#-----| 4: (Parameters)
298-
# 40| 0: [Parameter] a0
299-
# 40| 1: [Parameter] a1
300-
# 40| 5: [BlockStmt] { ... }
301-
# 40| 0: [ReturnStmt] return ...
302-
# 40| 0: [MethodAccess] setVarResource0(...)
303-
# 40| -1: [VarAccess] a0
304-
# 40| 0: [VarAccess] a1
305-
# 40| -3: [TypeAccess] KMutableProperty1<Owner,Integer>
306-
# 40| 0: [TypeAccess] Owner
307-
# 40| 1: [TypeAccess] Integer
308-
# 40| 2: [VarAccess] <set-?>
309-
# 40| 3: [FieldDeclaration] ResourceDelegate varResource0$delegate;
310-
# 40| -1: [TypeAccess] ResourceDelegate
311-
# 40| 0: [ClassInstanceExpr] new ResourceDelegate(...)
312-
# 40| -3: [TypeAccess] ResourceDelegate
313-
# 43| 4: [Class] ResourceDelegate
314-
# 43| 1: [Constructor] ResourceDelegate
315-
# 43| 5: [BlockStmt] { ... }
316-
# 43| 0: [SuperConstructorInvocationStmt] super(...)
317-
# 44| 2: [Method] getValue
316+
# 42| 0: [Parameter] a0
317+
# 42| 1: [Parameter] a1
318+
# 42| 5: [BlockStmt] { ... }
319+
# 42| 0: [ReturnStmt] return ...
320+
# 42| 0: [MethodAccess] setVarResource0(...)
321+
# 42| -1: [VarAccess] a0
322+
# 42| 0: [VarAccess] a1
323+
# 42| -3: [TypeAccess] KMutableProperty1<Owner,Integer>
324+
# 42| 0: [TypeAccess] Owner
325+
# 42| 1: [TypeAccess] Integer
326+
# 42| 2: [VarAccess] <set-?>
327+
# 42| 3: [FieldDeclaration] ResourceDelegate varResource0$delegate;
328+
# 42| -1: [TypeAccess] ResourceDelegate
329+
# 42| 0: [ClassInstanceExpr] new ResourceDelegate(...)
330+
# 42| -3: [TypeAccess] ResourceDelegate
331+
# 45| 4: [Class] ResourceDelegate
332+
# 45| 1: [Constructor] ResourceDelegate
333+
# 45| 5: [BlockStmt] { ... }
334+
# 45| 0: [SuperConstructorInvocationStmt] super(...)
335+
# 46| 2: [Method] getValue
318336
#-----| 4: (Parameters)
319-
# 44| 0: [Parameter] thisRef
320-
# 44| 1: [Parameter] property
321-
# 44| 5: [BlockStmt] { ... }
322-
# 45| 0: [ReturnStmt] return ...
323-
# 45| 0: [IntegerLiteral] 1
324-
# 47| 3: [Method] setValue
337+
# 46| 0: [Parameter] thisRef
338+
# 46| 1: [Parameter] property
339+
# 46| 5: [BlockStmt] { ... }
340+
# 47| 0: [ReturnStmt] return ...
341+
# 47| 0: [IntegerLiteral] 1
342+
# 49| 3: [Method] setValue
343+
#-----| 4: (Parameters)
344+
# 49| 0: [Parameter] thisRef
345+
# 49| 1: [Parameter] property
346+
# 49| 2: [Parameter] value
347+
# 49| 5: [BlockStmt] { ... }
348+
# 53| 5: [Class] DelegateProvider
349+
# 53| 1: [Constructor] DelegateProvider
350+
# 53| 5: [BlockStmt] { ... }
351+
# 53| 0: [SuperConstructorInvocationStmt] super(...)
352+
# 54| 2: [Method] provideDelegate
325353
#-----| 4: (Parameters)
326-
# 47| 0: [Parameter] thisRef
327-
# 47| 1: [Parameter] property
328-
# 47| 2: [Parameter] value
329-
# 47| 5: [BlockStmt] { ... }
354+
# 54| 0: [Parameter] thisRef
355+
# 54| 1: [Parameter] prop
356+
# 54| 5: [BlockStmt] { ... }
357+
# 56| 0: [ReturnStmt] return ...
358+
# 56| 0: [ClassInstanceExpr] new ResourceDelegate(...)
359+
# 56| -3: [TypeAccess] ResourceDelegate
330360
exprs.kt:
331361
# 0| [CompilationUnit] exprs
332362
# 0| 1: [Class] ExprsKt

java/ql/test/kotlin/library-tests/exprs/delegatedProperties.expected

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,25 @@ delegatedProperties
44
| delegatedProperties.kt:23:9:23:31 | name | name | local | delegatedProperties.kt:23:26:23:31 | Map<String,Object> name$delegate | delegatedProperties.kt:23:29:23:31 | map |
55
| delegatedProperties.kt:33:9:33:76 | readOnly | readOnly | local | delegatedProperties.kt:33:27:33:47 | ReadWriteProperty<Object,Integer> readOnly$delegate | delegatedProperties.kt:33:30:33:47 | resourceDelegate(...) |
66
| delegatedProperties.kt:34:9:34:48 | readWrite | readWrite | local | delegatedProperties.kt:34:28:34:48 | ReadWriteProperty<Object,Integer> readWrite$delegate | delegatedProperties.kt:34:31:34:48 | resourceDelegate(...) |
7-
| delegatedProperties.kt:40:5:40:47 | varResource0 | varResource0 | non-local | delegatedProperties.kt:40:27:40:47 | varResource0$delegate | delegatedProperties.kt:40:30:40:47 | new ResourceDelegate(...) |
7+
| delegatedProperties.kt:39:9:39:51 | varResource2 | varResource2 | local | delegatedProperties.kt:39:31:39:51 | ResourceDelegate varResource2$delegate | delegatedProperties.kt:39:31:39:51 | provideDelegate(...) |
8+
| delegatedProperties.kt:42:5:42:47 | varResource0 | varResource0 | non-local | delegatedProperties.kt:42:27:42:47 | varResource0$delegate | delegatedProperties.kt:42:30:42:47 | new ResourceDelegate(...) |
89
delegatedPropertyTypes
910
| delegatedProperties.kt:6:9:9:9 | prop1 | file://:0:0:0:0 | int | file://<external>/Lazy.class:0:0:0:0 | Lazy<Integer> |
10-
| delegatedProperties.kt:19:9:19:51 | varResource1 | file://:0:0:0:0 | int | delegatedProperties.kt:43:1:49:1 | ResourceDelegate |
11+
| delegatedProperties.kt:19:9:19:51 | varResource1 | file://:0:0:0:0 | int | delegatedProperties.kt:45:1:51:1 | ResourceDelegate |
1112
| delegatedProperties.kt:23:9:23:31 | name | file://<external>/String.class:0:0:0:0 | String | file://<external>/Map.class:0:0:0:0 | Map<String,Object> |
1213
| delegatedProperties.kt:33:9:33:76 | readOnly | file://:0:0:0:0 | int | file://<external>/ReadWriteProperty.class:0:0:0:0 | ReadWriteProperty<Object,Integer> |
1314
| delegatedProperties.kt:34:9:34:48 | readWrite | file://:0:0:0:0 | int | file://<external>/ReadWriteProperty.class:0:0:0:0 | ReadWriteProperty<Object,Integer> |
14-
| delegatedProperties.kt:40:5:40:47 | varResource0 | file://:0:0:0:0 | int | delegatedProperties.kt:43:1:49:1 | ResourceDelegate |
15+
| delegatedProperties.kt:39:9:39:51 | varResource2 | file://:0:0:0:0 | int | delegatedProperties.kt:45:1:51:1 | ResourceDelegate |
16+
| delegatedProperties.kt:42:5:42:47 | varResource0 | file://:0:0:0:0 | int | delegatedProperties.kt:45:1:51:1 | ResourceDelegate |
1517
delegatedPropertyGetters
1618
| delegatedProperties.kt:6:9:9:9 | prop1 | delegatedProperties.kt:6:24:9:9 | <get-prop1> |
1719
| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:31:19:51 | <get-varResource1> |
1820
| delegatedProperties.kt:23:9:23:31 | name | delegatedProperties.kt:23:26:23:31 | <get-name> |
1921
| delegatedProperties.kt:33:9:33:76 | readOnly | delegatedProperties.kt:33:27:33:47 | <get-readOnly> |
2022
| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:28:34:48 | <get-readWrite> |
21-
| delegatedProperties.kt:40:5:40:47 | varResource0 | delegatedProperties.kt:40:27:40:47 | getVarResource0 |
23+
| delegatedProperties.kt:39:9:39:51 | varResource2 | delegatedProperties.kt:39:31:39:51 | <get-varResource2> |
24+
| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:27:42:47 | getVarResource0 |
2225
delegatedPropertySetters
2326
| delegatedProperties.kt:19:9:19:51 | varResource1 | delegatedProperties.kt:19:31:19:51 | <set-varResource1> |
2427
| delegatedProperties.kt:34:9:34:48 | readWrite | delegatedProperties.kt:34:28:34:48 | <set-readWrite> |
25-
| delegatedProperties.kt:40:5:40:47 | varResource0 | delegatedProperties.kt:40:27:40:47 | setVarResource0 |
28+
| delegatedProperties.kt:42:5:42:47 | varResource0 | delegatedProperties.kt:42:27:42:47 | setVarResource0 |

java/ql/test/kotlin/library-tests/exprs/delegatedProperties.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class Owner {
3535

3636
println(varResource0)
3737
varResource0 = 3
38+
39+
val varResource2: Int by DelegateProvider()
3840
}
3941

4042
var varResource0: Int by ResourceDelegate()
@@ -47,3 +49,10 @@ class ResourceDelegate {
4749
operator fun setValue(thisRef: Owner?, property: KProperty<*>, value: Int?) {
4850
}
4951
}
52+
53+
class DelegateProvider {
54+
operator fun provideDelegate(thisRef: Owner?, prop: KProperty<*>): ResourceDelegate {
55+
// ... some logic
56+
return ResourceDelegate()
57+
}
58+
}

0 commit comments

Comments
 (0)