Skip to content

Commit 3543864

Browse files
authored
Merge pull request #9723 from igfoo/igfoo/delegates
Kotlin: Mark DELEGATED_PROPERTY_ACCESSORs as compiler-generated
2 parents dfe276a + 7dc490f commit 3543864

File tree

5 files changed

+145
-1
lines changed

5 files changed

+145
-1
lines changed

java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,9 @@ open class KotlinFileExtractor(
881881
val getterId = extractFunction(getter, parentId, extractBody = extractFunctionBodies, extractMethodAndParameterTypeAccesses = extractFunctionBodies, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
882882
if (getterId != null) {
883883
tw.writeKtPropertyGetters(id, getterId)
884+
if (getter.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR) {
885+
tw.writeCompiler_generated(getterId, CompilerGeneratedKinds.DELEGATED_PROPERTY_GETTER.kind)
886+
}
884887
}
885888
} else {
886889
if (p.modality != Modality.FINAL || !isExternalDeclaration(p)) {
@@ -895,6 +898,9 @@ open class KotlinFileExtractor(
895898
val setterId = extractFunction(setter, parentId, extractBody = extractFunctionBodies, extractMethodAndParameterTypeAccesses = extractFunctionBodies, typeSubstitution, classTypeArgsIncludingOuterClasses)?.cast<DbMethod>()
896899
if (setterId != null) {
897900
tw.writeKtPropertySetters(id, setterId)
901+
if (setter.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR) {
902+
tw.writeCompiler_generated(setterId, CompilerGeneratedKinds.DELEGATED_PROPERTY_SETTER.kind)
903+
}
898904
}
899905
} else {
900906
if (p.isVar && !isExternalDeclaration(p)) {
@@ -4383,6 +4389,8 @@ open class KotlinFileExtractor(
43834389
GENERATED_DATA_CLASS_MEMBER(2),
43844390
DEFAULT_PROPERTY_ACCESSOR(3),
43854391
CLASS_INITIALISATION_METHOD(4),
4386-
ENUM_CLASS_SPECIAL_MEMBER(5)
4392+
ENUM_CLASS_SPECIAL_MEMBER(5),
4393+
DELEGATED_PROPERTY_GETTER(6),
4394+
DELEGATED_PROPERTY_SETTER(7),
43874395
}
43884396
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import kotlin.properties.Delegates
2+
3+
class MyClass {
4+
val lazyProp by lazy {
5+
5
6+
}
7+
8+
var observableProp: String by Delegates.observable("<none>") {
9+
prop, old, new ->
10+
println("Was $old, now $new")
11+
}
12+
}

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

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,97 @@
104104
| dataClass.kt:1:34:1:46 | this.y | VarAccess |
105105
| dataClass.kt:1:34:1:46 | y | VarAccess |
106106
| dataClass.kt:1:34:1:46 | y | VarAccess |
107+
| delegates.kt:1:9:1:12 | this | ThisAccess |
108+
| delegates.kt:1:9:1:12 | this | ThisAccess |
109+
| delegates.kt:1:9:1:12 | this | ThisAccess |
110+
| delegates.kt:4:18:6:5 | ...::... | PropertyRefExpr |
111+
| delegates.kt:4:18:6:5 | ...=... | KtInitializerAssignExpr |
112+
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
113+
| delegates.kt:4:18:6:5 | Integer | TypeAccess |
114+
| delegates.kt:4:18:6:5 | KProperty1<MyClass,Integer> | TypeAccess |
115+
| delegates.kt:4:18:6:5 | Lazy<Integer> | TypeAccess |
116+
| delegates.kt:4:18:6:5 | MyClass | TypeAccess |
117+
| delegates.kt:4:18:6:5 | a0 | VarAccess |
118+
| delegates.kt:4:18:6:5 | a0 | VarAccess |
119+
| delegates.kt:4:18:6:5 | get(...) | MethodAccess |
120+
| delegates.kt:4:18:6:5 | getLazyProp(...) | MethodAccess |
121+
| delegates.kt:4:18:6:5 | int | TypeAccess |
122+
| delegates.kt:4:18:6:5 | lazyProp$delegate | VarAccess |
123+
| delegates.kt:4:18:6:5 | this | ThisAccess |
124+
| delegates.kt:4:18:6:5 | this | ThisAccess |
125+
| delegates.kt:4:18:6:5 | this.lazyProp$delegate | VarAccess |
126+
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
127+
| delegates.kt:4:21:6:5 | Integer | TypeAccess |
128+
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
129+
| delegates.kt:4:21:6:5 | LazyKt | TypeAccess |
130+
| delegates.kt:4:21:6:5 | getValue(...) | MethodAccess |
131+
| delegates.kt:4:21:6:5 | lazy(...) | MethodAccess |
132+
| delegates.kt:4:26:6:5 | ...->... | LambdaExpr |
133+
| delegates.kt:4:26:6:5 | Function0<Integer> | TypeAccess |
134+
| delegates.kt:4:26:6:5 | Integer | TypeAccess |
135+
| delegates.kt:4:26:6:5 | int | TypeAccess |
136+
| delegates.kt:5:9:5:9 | 5 | IntegerLiteral |
137+
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
138+
| delegates.kt:8:32:11:5 | ...::... | PropertyRefExpr |
139+
| delegates.kt:8:32:11:5 | ...=... | KtInitializerAssignExpr |
140+
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
141+
| delegates.kt:8:32:11:5 | KMutableProperty1<MyClass,String> | TypeAccess |
142+
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
143+
| delegates.kt:8:32:11:5 | MyClass | TypeAccess |
144+
| delegates.kt:8:32:11:5 | Object | TypeAccess |
145+
| delegates.kt:8:32:11:5 | ReadWriteProperty<Object,String> | TypeAccess |
146+
| delegates.kt:8:32:11:5 | String | TypeAccess |
147+
| delegates.kt:8:32:11:5 | String | TypeAccess |
148+
| delegates.kt:8:32:11:5 | String | TypeAccess |
149+
| delegates.kt:8:32:11:5 | String | TypeAccess |
150+
| delegates.kt:8:32:11:5 | String | TypeAccess |
151+
| delegates.kt:8:32:11:5 | Unit | TypeAccess |
152+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
153+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
154+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
155+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
156+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
157+
| delegates.kt:8:32:11:5 | a0 | VarAccess |
158+
| delegates.kt:8:32:11:5 | a1 | VarAccess |
159+
| delegates.kt:8:32:11:5 | a1 | VarAccess |
160+
| delegates.kt:8:32:11:5 | get(...) | MethodAccess |
161+
| delegates.kt:8:32:11:5 | get(...) | MethodAccess |
162+
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodAccess |
163+
| delegates.kt:8:32:11:5 | getObservableProp(...) | MethodAccess |
164+
| delegates.kt:8:32:11:5 | observableProp$delegate | VarAccess |
165+
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodAccess |
166+
| delegates.kt:8:32:11:5 | setObservableProp(...) | MethodAccess |
167+
| delegates.kt:8:32:11:5 | this | ThisAccess |
168+
| delegates.kt:8:32:11:5 | this | ThisAccess |
169+
| delegates.kt:8:32:11:5 | this | ThisAccess |
170+
| delegates.kt:8:32:11:5 | this | ThisAccess |
171+
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
172+
| delegates.kt:8:32:11:5 | this.observableProp$delegate | VarAccess |
173+
| delegates.kt:8:35:8:43 | INSTANCE | VarAccess |
174+
| delegates.kt:8:35:11:5 | <set-?> | VarAccess |
175+
| delegates.kt:8:35:11:5 | getValue(...) | MethodAccess |
176+
| delegates.kt:8:35:11:5 | setValue(...) | MethodAccess |
177+
| delegates.kt:8:45:11:5 | String | TypeAccess |
178+
| delegates.kt:8:45:11:5 | observable(...) | MethodAccess |
179+
| delegates.kt:8:57:8:62 | <none> | StringLiteral |
180+
| delegates.kt:8:66:11:5 | ...->... | LambdaExpr |
181+
| delegates.kt:8:66:11:5 | Function3<KProperty<?>,String,String,Unit> | TypeAccess |
182+
| delegates.kt:8:66:11:5 | KProperty<?> | TypeAccess |
183+
| delegates.kt:8:66:11:5 | String | TypeAccess |
184+
| delegates.kt:8:66:11:5 | String | TypeAccess |
185+
| delegates.kt:8:66:11:5 | Unit | TypeAccess |
186+
| delegates.kt:8:66:11:5 | Unit | TypeAccess |
187+
| delegates.kt:9:9:9:12 | ? ... | WildcardTypeAccess |
188+
| delegates.kt:9:9:9:12 | KProperty<?> | TypeAccess |
189+
| delegates.kt:9:15:9:17 | String | TypeAccess |
190+
| delegates.kt:9:20:9:22 | String | TypeAccess |
191+
| delegates.kt:10:9:10:37 | ConsoleKt | TypeAccess |
192+
| delegates.kt:10:9:10:37 | println(...) | MethodAccess |
193+
| delegates.kt:10:17:10:36 | "..." | StringTemplateExpr |
194+
| delegates.kt:10:18:10:21 | Was | StringLiteral |
195+
| delegates.kt:10:23:10:25 | old | VarAccess |
196+
| delegates.kt:10:26:10:31 | , now | StringLiteral |
197+
| delegates.kt:10:33:10:35 | new | VarAccess |
107198
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
108199
| enumClass.kt:0:0:0:0 | EnumClass | TypeAccess |
109200
| enumClass.kt:0:0:0:0 | EnumClass[] | TypeAccess |

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@ methods
1111
| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:22:1:31 | getX | getX() | public | Compiler generated |
1212
| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | getY | getY() | public | Compiler generated |
1313
| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:34:1:46 | setY | setY(java.lang.String) | public | Compiler generated |
14+
| delegates.kt:3:1:12:1 | MyClass | delegates.kt:4:18:6:5 | getLazyProp | getLazyProp() | public | Compiler generated |
15+
| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:32:11:5 | getObservableProp | getObservableProp() | public | Compiler generated |
16+
| delegates.kt:3:1:12:1 | MyClass | delegates.kt:8:32:11:5 | setObservableProp | setObservableProp(java.lang.String) | public | Compiler generated |
17+
| delegates.kt:4:18:6:5 | new KProperty1<MyClass,Integer>(...) { ... } | delegates.kt:4:18:6:5 | get | get(MyClass) | override, public | |
18+
| delegates.kt:4:18:6:5 | new KProperty1<MyClass,Integer>(...) { ... } | delegates.kt:4:18:6:5 | invoke | invoke(MyClass) | override, public | |
19+
| delegates.kt:4:26:6:5 | new Function0<Integer>(...) { ... } | delegates.kt:4:26:6:5 | invoke | invoke() | override, public | |
20+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | get | get(MyClass) | override, public | |
21+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | get | get(MyClass) | override, public | |
22+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | invoke | invoke(MyClass) | override, public | |
23+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | invoke | invoke(MyClass) | override, public | |
24+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | set | set(MyClass,java.lang.String) | override, public | |
25+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | set | set(MyClass,java.lang.String) | override, public | |
26+
| delegates.kt:8:66:11:5 | new Function3<KProperty<?>,String,String,Unit>(...) { ... } | delegates.kt:8:66:11:5 | invoke | invoke(kotlin.reflect.KProperty,java.lang.String,java.lang.String) | override, public | |
1427
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:0:0:0:0 | <clinit> | <clinit>() | | Compiler generated |
1528
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:0:0:0:0 | valueOf | valueOf(java.lang.String) | public, static | Compiler generated |
1629
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:0:0:0:0 | values | values() | public, static | Compiler generated |
@@ -33,6 +46,12 @@ methods
3346
| methods.kt:5:1:19:1 | Class | methods.kt:18:5:18:36 | noExplicitVisibilityFun | noExplicitVisibilityFun() | public | |
3447
constructors
3548
| dataClass.kt:1:1:1:47 | DataClass | dataClass.kt:1:6:1:47 | DataClass | DataClass(int,java.lang.String) |
49+
| delegates.kt:3:1:12:1 | MyClass | delegates.kt:3:1:12:1 | MyClass | MyClass() |
50+
| delegates.kt:4:18:6:5 | new KProperty1<MyClass,Integer>(...) { ... } | delegates.kt:4:18:6:5 | | |
51+
| delegates.kt:4:26:6:5 | new Function0<Integer>(...) { ... } | delegates.kt:4:26:6:5 | | |
52+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | | |
53+
| delegates.kt:8:32:11:5 | new KMutableProperty1<MyClass,String>(...) { ... } | delegates.kt:8:32:11:5 | | |
54+
| delegates.kt:8:66:11:5 | new Function3<KProperty<?>,String,String,Unit>(...) { ... } | delegates.kt:8:66:11:5 | | |
3655
| enumClass.kt:1:1:4:1 | EnumClass | enumClass.kt:1:6:4:1 | EnumClass | EnumClass(int) |
3756
| methods2.kt:7:1:10:1 | Class2 | methods2.kt:7:1:10:1 | Class2 | Class2() |
3857
| methods3.kt:5:1:7:1 | Class3 | methods3.kt:5:1:7:1 | Class3 | Class3() |

java/ql/test/kotlin/library-tests/methods/parameters.expected

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,20 @@
33
| dataClass.kt:0:0:0:0 | copy | dataClass.kt:1:34:1:46 | y | 1 |
44
| dataClass.kt:0:0:0:0 | equals | dataClass.kt:0:0:0:0 | other | 0 |
55
| dataClass.kt:1:34:1:46 | setY | dataClass.kt:1:34:1:46 | <set-?> | 0 |
6+
| delegates.kt:4:18:6:5 | get | delegates.kt:4:18:6:5 | a0 | 0 |
7+
| delegates.kt:4:18:6:5 | invoke | delegates.kt:4:18:6:5 | a0 | 0 |
8+
| delegates.kt:8:32:11:5 | get | delegates.kt:8:32:11:5 | a0 | 0 |
9+
| delegates.kt:8:32:11:5 | get | delegates.kt:8:32:11:5 | a0 | 0 |
10+
| delegates.kt:8:32:11:5 | invoke | delegates.kt:8:32:11:5 | a0 | 0 |
11+
| delegates.kt:8:32:11:5 | invoke | delegates.kt:8:32:11:5 | a0 | 0 |
12+
| delegates.kt:8:32:11:5 | set | delegates.kt:8:32:11:5 | a0 | 0 |
13+
| delegates.kt:8:32:11:5 | set | delegates.kt:8:32:11:5 | a0 | 0 |
14+
| delegates.kt:8:32:11:5 | set | delegates.kt:8:32:11:5 | a1 | 1 |
15+
| delegates.kt:8:32:11:5 | set | delegates.kt:8:32:11:5 | a1 | 1 |
16+
| delegates.kt:8:32:11:5 | setObservableProp | delegates.kt:8:32:11:5 | <set-?> | 0 |
17+
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:9:9:12 | prop | 0 |
18+
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:15:9:17 | old | 1 |
19+
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:20:9:22 | new | 2 |
620
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:0:0:0:0 | value | 0 |
721
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:26:4:31 | x | 0 |
822
| methods2.kt:4:1:5:1 | fooBarTopLevelMethod | methods2.kt:4:34:4:39 | y | 1 |

0 commit comments

Comments
 (0)