Extract property references with only backing field

This commit is contained in:
Tamas Vajk
2022-03-11 12:57:42 +01:00
committed by Ian Lynagh
parent 90ca47a46b
commit a6f036d94e
7 changed files with 964 additions and 819 deletions

View File

@@ -845,6 +845,11 @@ propertyRefGetBinding(
int getter: @callable ref
);
propertyRefFieldBinding(
unique int id: @expr ref,
int field: @field ref
);
propertyRefSetBinding(
unique int id: @expr ref,
int setter: @callable ref

View File

@@ -1474,6 +1474,11 @@ class PropertyRefExpr extends ClassInstanceExpr, @propertyref {
*/
Callable getGetterCallable() { propertyRefGetBinding(this, result) }
/**
* Gets the field referenced by this property reference expression, if any.
*/
Field getField() { propertyRefFieldBinding(this, result) }
/**
* Gets the property setter referenced by this property reference expression, if any.
*/

File diff suppressed because it is too large Load Diff

View File

@@ -1,90 +1,110 @@
variableInitializerType
| reflection.kt:5:9:5:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:5:49:5:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<Ccc,Integer,Double> | true |
| reflection.kt:5:9:5:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:5:49:5:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:8:9:8:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:8:38:8:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | true |
| reflection.kt:8:9:8:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:8:38:8:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:11:9:11:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true |
| reflection.kt:11:9:11:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty$Getter.class:0:0:0:0 | Getter<Integer> | true |
| reflection.kt:12:9:12:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:12:38:12:44 | new Function1<C,Integer>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true |
| reflection.kt:12:9:12:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:12:38:12:44 | new Function1<C,Integer>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:13:9:13:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:13:35:13:41 | new KProperty0<Integer>(...) { ... } | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | true |
| reflection.kt:13:9:13:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:13:35:13:41 | new KProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:15:9:15:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:15:45:15:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | true |
| reflection.kt:15:9:15:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:15:45:15:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:18:9:18:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true |
| reflection.kt:18:9:18:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty$Setter.class:0:0:0:0 | Setter<Integer> | true |
| reflection.kt:19:9:19:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:19:44:19:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true |
| reflection.kt:19:9:19:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:19:44:19:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:20:9:20:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:20:42:20:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | true |
| reflection.kt:20:9:20:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:20:42:20:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:22:9:22:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Integer> | true |
| reflection.kt:22:9:22:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty.class:0:0:0:0 | KProperty<Integer> | true |
| reflection.kt:7:9:7:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<Ccc,Integer,Double> | true |
| reflection.kt:7:9:7:54 | KFunction<Double> ref | file://<external>/KFunction.class:0:0:0:0 | KFunction<Double> | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:10:9:10:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | true |
| reflection.kt:10:9:10:42 | KProperty1<C,Integer> x0 | file://<external>/KProperty1.class:0:0:0:0 | KProperty1<C,Integer> | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:13:9:13:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true |
| reflection.kt:13:9:13:53 | Getter<C,Integer> x3 | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty1$Getter.class:0:0:0:0 | Getter<C,Integer> | file://<external>/KProperty$Getter.class:0:0:0:0 | Getter<Integer> | true |
| reflection.kt:14:9:14:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/Function1.class:0:0:0:0 | Function1<C,Integer> | true |
| reflection.kt:14:9:14:44 | KFunction<Integer> x4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Integer> | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:15:9:15:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | true |
| reflection.kt:15:9:15:41 | KProperty0<Integer> x5 | file://<external>/KProperty0.class:0:0:0:0 | KProperty0<Integer> | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:17:9:17:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | true |
| reflection.kt:17:9:17:49 | KMutableProperty1<C,Integer> y0 | file://<external>/KMutableProperty1.class:0:0:0:0 | KMutableProperty1<C,Integer> | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:20:9:20:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true |
| reflection.kt:20:9:20:60 | Setter<C,Integer> y3 | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty1$Setter.class:0:0:0:0 | Setter<C,Integer> | file://<external>/KMutableProperty$Setter.class:0:0:0:0 | Setter<Integer> | true |
| reflection.kt:21:9:21:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Unit> | true |
| reflection.kt:21:9:21:50 | KFunction<Unit> y4 | file://<external>/KFunction.class:0:0:0:0 | KFunction<Unit> | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | file://<external>/FunctionReference.class:0:0:0:0 | FunctionReference | true |
| reflection.kt:22:9:22:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | true |
| reflection.kt:22:9:22:48 | KMutableProperty0<Integer> y5 | file://<external>/KMutableProperty0.class:0:0:0:0 | KMutableProperty0<Integer> | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | file://<external>/PropertyReference.class:0:0:0:0 | PropertyReference | true |
| reflection.kt:24:9:24:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/Function2.class:0:0:0:0 | Function2<C,Integer,Integer> | true |
| reflection.kt:24:9:24:91 | KProperty2<C,Integer,Integer> prop | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty2.class:0:0:0:0 | KProperty2<C,Integer,Integer> | file://<external>/KProperty.class:0:0:0:0 | KProperty<Integer> | true |
invocation
| reflection.kt:6:21:6:24 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:9:26:9:33 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:10:29:10:32 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:11:48:11:53 | getGetter(...) | file://<external>/KProperty1.class:0:0:0:0 | getGetter |
| reflection.kt:12:38:12:44 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:16:27:16:37 | set(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:17:29:17:32 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:18:55:18:60 | getSetter(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | getSetter |
| reflection.kt:19:44:19:50 | set(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:22:31:22:37 | getMembers(...) | file://<external>/KClass.class:0:0:0:0 | getMembers |
| reflection.kt:22:51:22:54 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:23:23:23:33 | get(...) | file://<external>/KProperty2.class:0:0:0:0 | get |
| reflection.kt:48:30:48:39 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:49:30:49:34 | get(...) | file://<external>/KProperty0.class:0:0:0:0 | get |
| reflection.kt:8:21:8:24 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:11:26:11:33 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:12:29:12:32 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:13:48:13:53 | getGetter(...) | file://<external>/KProperty1.class:0:0:0:0 | getGetter |
| reflection.kt:14:38:14:44 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:18:27:18:37 | set(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:19:29:19:32 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:20:55:20:60 | getSetter(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | getSetter |
| reflection.kt:21:44:21:50 | set(...) | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:24:31:24:37 | getMembers(...) | file://<external>/KClass.class:0:0:0:0 | getMembers |
| reflection.kt:24:51:24:54 | getName(...) | file://<external>/KCallable.class:0:0:0:0 | getName |
| reflection.kt:25:23:25:33 | get(...) | file://<external>/KProperty2.class:0:0:0:0 | get |
| reflection.kt:50:30:50:39 | get(...) | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:51:30:51:34 | get(...) | file://<external>/KProperty0.class:0:0:0:0 | get |
functionReferences
| reflection.kt:5:49:5:54 | ...::... | reflection.kt:5:49:5:54 | invoke | reflection.kt:27:9:27:33 | m |
| reflection.kt:12:38:12:44 | ...::... | reflection.kt:12:38:12:44 | invoke | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:19:44:19:50 | ...::... | reflection.kt:19:44:19:50 | invoke | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:58:17:58:32 | ...::... | reflection.kt:58:17:58:32 | invoke | reflection.kt:70:9:70:38 | m1 |
| reflection.kt:59:17:59:34 | ...::... | reflection.kt:59:17:59:34 | invoke | reflection.kt:70:9:70:38 | m1 |
| reflection.kt:60:17:60:34 | ...::... | reflection.kt:60:17:60:34 | invoke | reflection.kt:52:1:52:52 | ext1 |
| reflection.kt:61:17:61:36 | ...::... | reflection.kt:61:17:61:36 | invoke | reflection.kt:52:1:52:52 | ext1 |
| reflection.kt:62:17:62:34 | ...::... | reflection.kt:62:17:62:34 | invoke | reflection.kt:54:1:54:48 | ext2 |
| reflection.kt:63:17:63:36 | ...::... | reflection.kt:63:17:63:36 | invoke | reflection.kt:54:1:54:48 | ext2 |
| reflection.kt:84:18:84:24 | ...::... | reflection.kt:84:18:84:24 | invoke | reflection.kt:80:9:80:30 | Inner<String> |
| reflection.kt:91:14:91:21 | ...::... | reflection.kt:91:14:91:21 | invoke | reflection.kt:77:1:86:1 | Class2<String> |
| reflection.kt:92:14:92:17 | ...::... | reflection.kt:92:14:92:17 | invoke | reflection.kt:88:1:88:24 | fn |
| reflection.kt:93:14:93:29 | ...::... | reflection.kt:93:14:93:29 | invoke | reflection.kt:80:9:80:30 | Inner<String> |
| reflection.kt:7:49:7:54 | ...::... | reflection.kt:7:49:7:54 | invoke | reflection.kt:29:9:29:33 | m |
| reflection.kt:14:38:14:44 | ...::... | reflection.kt:14:38:14:44 | invoke | file://<external>/KProperty1.class:0:0:0:0 | get |
| reflection.kt:21:44:21:50 | ...::... | reflection.kt:21:44:21:50 | invoke | file://<external>/KMutableProperty1.class:0:0:0:0 | set |
| reflection.kt:60:17:60:32 | ...::... | reflection.kt:60:17:60:32 | invoke | reflection.kt:76:9:76:38 | m1 |
| reflection.kt:61:17:61:34 | ...::... | reflection.kt:61:17:61:34 | invoke | reflection.kt:76:9:76:38 | m1 |
| reflection.kt:62:17:62:34 | ...::... | reflection.kt:62:17:62:34 | invoke | reflection.kt:54:1:54:52 | ext1 |
| reflection.kt:63:17:63:36 | ...::... | reflection.kt:63:17:63:36 | invoke | reflection.kt:54:1:54:52 | ext1 |
| reflection.kt:64:17:64:34 | ...::... | reflection.kt:64:17:64:34 | invoke | reflection.kt:56:1:56:48 | ext2 |
| reflection.kt:65:17:65:36 | ...::... | reflection.kt:65:17:65:36 | invoke | reflection.kt:56:1:56:48 | ext2 |
| reflection.kt:90:18:90:24 | ...::... | reflection.kt:90:18:90:24 | invoke | reflection.kt:86:9:86:30 | Inner<String> |
| reflection.kt:97:14:97:21 | ...::... | reflection.kt:97:14:97:21 | invoke | reflection.kt:83:1:92:1 | Class2<String> |
| reflection.kt:98:14:98:17 | ...::... | reflection.kt:98:14:98:17 | invoke | reflection.kt:94:1:94:24 | fn |
| reflection.kt:99:14:99:29 | ...::... | reflection.kt:99:14:99:29 | invoke | reflection.kt:86:9:86:30 | Inner<String> |
propertyGetReferences
| reflection.kt:8:38:8:42 | ...::... | reflection.kt:8:38:8:42 | get | reflection.kt:31:9:31:23 | getP0 |
| reflection.kt:13:35:13:41 | ...::... | reflection.kt:13:35:13:41 | get | reflection.kt:31:9:31:23 | getP0 |
| reflection.kt:15:45:15:49 | ...::... | reflection.kt:15:45:15:49 | get | reflection.kt:32:9:32:23 | getP1 |
| reflection.kt:20:42:20:48 | ...::... | reflection.kt:20:42:20:48 | get | reflection.kt:32:9:32:23 | getP1 |
| reflection.kt:48:13:48:28 | ...::... | reflection.kt:48:13:48:28 | get | reflection.kt:45:5:45:28 | getLastChar |
| reflection.kt:49:13:49:28 | ...::... | reflection.kt:49:13:49:28 | get | reflection.kt:45:5:45:28 | getLastChar |
| reflection.kt:65:17:65:32 | ...::... | reflection.kt:65:17:65:32 | get | reflection.kt:72:13:72:24 | getP2 |
| reflection.kt:66:17:66:34 | ...::... | reflection.kt:66:17:66:34 | get | reflection.kt:72:13:72:24 | getP2 |
| reflection.kt:10:38:10:42 | ...::... | reflection.kt:10:38:10:42 | get | reflection.kt:33:9:33:23 | getP0 |
| reflection.kt:15:35:15:41 | ...::... | reflection.kt:15:35:15:41 | get | reflection.kt:33:9:33:23 | getP0 |
| reflection.kt:17:45:17:49 | ...::... | reflection.kt:17:45:17:49 | get | reflection.kt:34:9:34:23 | getP1 |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | get | reflection.kt:34:9:34:23 | getP1 |
| reflection.kt:50:13:50:28 | ...::... | reflection.kt:50:13:50:28 | get | reflection.kt:47:5:47:28 | getLastChar |
| reflection.kt:51:13:51:28 | ...::... | reflection.kt:51:13:51:28 | get | reflection.kt:47:5:47:28 | getLastChar |
| reflection.kt:67:17:67:32 | ...::... | reflection.kt:67:17:67:32 | get | reflection.kt:78:13:78:24 | getP2 |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | get | reflection.kt:78:13:78:24 | getP2 |
| reflection.kt:70:17:70:30 | ...::... | reflection.kt:70:17:70:30 | get | file://<external>/IntCompanionObject.class:0:0:0:0 | getMAX_VALUE |
propertySetReferences
| reflection.kt:15:45:15:49 | ...::... | reflection.kt:15:45:15:49 | set | reflection.kt:32:9:32:23 | setP1 |
| reflection.kt:20:42:20:48 | ...::... | reflection.kt:20:42:20:48 | set | reflection.kt:32:9:32:23 | setP1 |
| reflection.kt:65:17:65:32 | ...::... | reflection.kt:65:17:65:32 | set | reflection.kt:73:13:73:29 | setP2 |
| reflection.kt:66:17:66:34 | ...::... | reflection.kt:66:17:66:34 | set | reflection.kt:73:13:73:29 | setP2 |
| reflection.kt:17:45:17:49 | ...::... | reflection.kt:17:45:17:49 | set | reflection.kt:34:9:34:23 | setP1 |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | set | reflection.kt:34:9:34:23 | setP1 |
| reflection.kt:67:17:67:32 | ...::... | reflection.kt:67:17:67:32 | set | reflection.kt:79:13:79:29 | setP2 |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | set | reflection.kt:79:13:79:29 | setP2 |
callsInsideInvocationMethods
| reflection.kt:5:49:5:54 | ...::... | reflection.kt:5:49:5:54 | new Function2<Ccc,Integer,Double>(...) { ... } | reflection.kt:5:49:5:54 | invoke | reflection.kt:5:49:5:54 | m(...) | Ccc.m |
| reflection.kt:8:38:8:42 | ...::... | reflection.kt:8:38:8:42 | new KProperty1<C,Integer>(...) { ... } | reflection.kt:8:38:8:42 | get | reflection.kt:8:38:8:42 | getP0(...) | C.getP0 |
| reflection.kt:12:38:12:44 | ...::... | reflection.kt:12:38:12:44 | new Function1<C,Integer>(...) { ... } | reflection.kt:12:38:12:44 | invoke | reflection.kt:12:38:12:44 | get(...) | KProperty1<C,Integer>.get |
| reflection.kt:13:35:13:41 | ...::... | reflection.kt:13:35:13:41 | new KProperty0<Integer>(...) { ... } | reflection.kt:13:35:13:41 | get | reflection.kt:13:35:13:41 | getP0(...) | C.getP0 |
| reflection.kt:15:45:15:49 | ...::... | reflection.kt:15:45:15:49 | new KMutableProperty1<C,Integer>(...) { ... } | reflection.kt:15:45:15:49 | get | reflection.kt:15:45:15:49 | getP1(...) | C.getP1 |
| reflection.kt:15:45:15:49 | ...::... | reflection.kt:15:45:15:49 | new KMutableProperty1<C,Integer>(...) { ... } | reflection.kt:15:45:15:49 | set | reflection.kt:15:45:15:49 | setP1(...) | C.setP1 |
| reflection.kt:19:44:19:50 | ...::... | reflection.kt:19:44:19:50 | new Function2<C,Integer,Unit>(...) { ... } | reflection.kt:19:44:19:50 | invoke | reflection.kt:19:44:19:50 | set(...) | KMutableProperty1<C,Integer>.set |
| reflection.kt:20:42:20:48 | ...::... | reflection.kt:20:42:20:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:20:42:20:48 | get | reflection.kt:20:42:20:48 | getP1(...) | C.getP1 |
| reflection.kt:20:42:20:48 | ...::... | reflection.kt:20:42:20:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:20:42:20:48 | set | reflection.kt:20:42:20:48 | setP1(...) | C.setP1 |
| reflection.kt:48:13:48:28 | ...::... | reflection.kt:48:13:48:28 | new KProperty1<String,Character>(...) { ... } | reflection.kt:48:13:48:28 | get | reflection.kt:48:13:48:28 | getLastChar(...) | ReflectionKt.getLastChar |
| reflection.kt:49:13:49:28 | ...::... | reflection.kt:49:13:49:28 | new KProperty0<Character>(...) { ... } | reflection.kt:49:13:49:28 | get | reflection.kt:49:13:49:28 | getLastChar(...) | ReflectionKt.getLastChar |
| reflection.kt:58:17:58:32 | ...::... | reflection.kt:58:17:58:32 | new Function2<Generic<Integer>,Integer,String>(...) { ... } | reflection.kt:58:17:58:32 | invoke | reflection.kt:58:17:58:32 | m1(...) | Generic<Integer>.m1 |
| reflection.kt:59:17:59:34 | ...::... | reflection.kt:59:17:59:34 | new Function1<Integer,String>(...) { ... } | reflection.kt:59:17:59:34 | invoke | reflection.kt:59:17:59:34 | m1(...) | Generic<Integer>.m1 |
| reflection.kt:60:17:60:34 | ...::... | reflection.kt:60:17:60:34 | new Function1<Generic<Integer>,String>(...) { ... } | reflection.kt:60:17:60:34 | invoke | reflection.kt:60:17:60:34 | ext1(...) | ReflectionKt.ext1 |
| reflection.kt:61:17:61:36 | ...::... | reflection.kt:61:17:61:36 | new Function0<String>(...) { ... } | reflection.kt:61:17:61:36 | invoke | reflection.kt:61:17:61:36 | ext1(...) | ReflectionKt.ext1 |
| reflection.kt:62:17:62:34 | ...::... | reflection.kt:62:17:62:34 | new Function1<Generic<Integer>,String>(...) { ... } | reflection.kt:62:17:62:34 | invoke | reflection.kt:62:17:62:34 | ext2(...) | ReflectionKt.ext2 |
| reflection.kt:63:17:63:36 | ...::... | reflection.kt:63:17:63:36 | new Function0<String>(...) { ... } | reflection.kt:63:17:63:36 | invoke | reflection.kt:63:17:63:36 | ext2(...) | ReflectionKt.ext2 |
| reflection.kt:65:17:65:32 | ...::... | reflection.kt:65:17:65:32 | new KMutableProperty1<Generic<Integer>,Integer>(...) { ... } | reflection.kt:65:17:65:32 | get | reflection.kt:65:17:65:32 | getP2(...) | Generic<Integer>.getP2 |
| reflection.kt:65:17:65:32 | ...::... | reflection.kt:65:17:65:32 | new KMutableProperty1<Generic<Integer>,Integer>(...) { ... } | reflection.kt:65:17:65:32 | set | reflection.kt:65:17:65:32 | setP2(...) | Generic<Integer>.setP2 |
| reflection.kt:66:17:66:34 | ...::... | reflection.kt:66:17:66:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:66:17:66:34 | get | reflection.kt:66:17:66:34 | getP2(...) | Generic<Integer>.getP2 |
| reflection.kt:66:17:66:34 | ...::... | reflection.kt:66:17:66:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:66:17:66:34 | set | reflection.kt:66:17:66:34 | setP2(...) | Generic<Integer>.setP2 |
| reflection.kt:84:18:84:24 | ...::... | reflection.kt:84:18:84:24 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:84:18:84:24 | invoke | reflection.kt:84:18:84:24 | new Inner<String>(...) | Inner<String>.Inner<String> |
| reflection.kt:91:14:91:21 | ...::... | reflection.kt:91:14:91:21 | new Function1<String,Class2<String>>(...) { ... } | reflection.kt:91:14:91:21 | invoke | reflection.kt:91:14:91:21 | new Class2<String>(...) | Class2<String>.Class2<String> |
| reflection.kt:92:14:92:17 | ...::... | reflection.kt:92:14:92:17 | new Function1<String,Unit>(...) { ... } | reflection.kt:92:14:92:17 | invoke | reflection.kt:92:14:92:17 | fn(...) | ReflectionKt.fn |
| reflection.kt:93:14:93:29 | ...::... | reflection.kt:93:14:93:29 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:93:14:93:29 | invoke | reflection.kt:93:14:93:29 | new Inner<String>(...) | Inner<String>.Inner<String> |
| reflection.kt:7:49:7:54 | ...::... | reflection.kt:7:49:7:54 | new Function2<Ccc,Integer,Double>(...) { ... } | reflection.kt:7:49:7:54 | invoke | reflection.kt:7:49:7:54 | m(...) | Ccc.m |
| reflection.kt:10:38:10:42 | ...::... | reflection.kt:10:38:10:42 | new KProperty1<C,Integer>(...) { ... } | reflection.kt:10:38:10:42 | get | reflection.kt:10:38:10:42 | getP0(...) | C.getP0 |
| reflection.kt:14:38:14:44 | ...::... | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | reflection.kt:14:38:14:44 | invoke | reflection.kt:14:38:14:44 | get(...) | KProperty1<C,Integer>.get |
| reflection.kt:15:35:15:41 | ...::... | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | reflection.kt:15:35:15:41 | get | reflection.kt:15:35:15:41 | getP0(...) | C.getP0 |
| reflection.kt:17:45:17:49 | ...::... | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | reflection.kt:17:45:17:49 | get | reflection.kt:17:45:17:49 | getP1(...) | C.getP1 |
| reflection.kt:17:45:17:49 | ...::... | reflection.kt:17:45:17:49 | new KMutableProperty1<C,Integer>(...) { ... } | reflection.kt:17:45:17:49 | set | reflection.kt:17:45:17:49 | setP1(...) | C.setP1 |
| reflection.kt:21:44:21:50 | ...::... | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | reflection.kt:21:44:21:50 | invoke | reflection.kt:21:44:21:50 | set(...) | KMutableProperty1<C,Integer>.set |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:22:42:22:48 | get | reflection.kt:22:42:22:48 | getP1(...) | C.getP1 |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:22:42:22:48 | set | reflection.kt:22:42:22:48 | setP1(...) | C.setP1 |
| reflection.kt:50:13:50:28 | ...::... | reflection.kt:50:13:50:28 | new KProperty1<String,Character>(...) { ... } | reflection.kt:50:13:50:28 | get | reflection.kt:50:13:50:28 | getLastChar(...) | ReflectionKt.getLastChar |
| reflection.kt:51:13:51:28 | ...::... | reflection.kt:51:13:51:28 | new KProperty0<Character>(...) { ... } | reflection.kt:51:13:51:28 | get | reflection.kt:51:13:51:28 | getLastChar(...) | ReflectionKt.getLastChar |
| reflection.kt:60:17:60:32 | ...::... | reflection.kt:60:17:60:32 | new Function2<Generic<Integer>,Integer,String>(...) { ... } | reflection.kt:60:17:60:32 | invoke | reflection.kt:60:17:60:32 | m1(...) | Generic<Integer>.m1 |
| reflection.kt:61:17:61:34 | ...::... | reflection.kt:61:17:61:34 | new Function1<Integer,String>(...) { ... } | reflection.kt:61:17:61:34 | invoke | reflection.kt:61:17:61:34 | m1(...) | Generic<Integer>.m1 |
| reflection.kt:62:17:62:34 | ...::... | reflection.kt:62:17:62:34 | new Function1<Generic<Integer>,String>(...) { ... } | reflection.kt:62:17:62:34 | invoke | reflection.kt:62:17:62:34 | ext1(...) | ReflectionKt.ext1 |
| reflection.kt:63:17:63:36 | ...::... | reflection.kt:63:17:63:36 | new Function0<String>(...) { ... } | reflection.kt:63:17:63:36 | invoke | reflection.kt:63:17:63:36 | ext1(...) | ReflectionKt.ext1 |
| reflection.kt:64:17:64:34 | ...::... | reflection.kt:64:17:64:34 | new Function1<Generic<Integer>,String>(...) { ... } | reflection.kt:64:17:64:34 | invoke | reflection.kt:64:17:64:34 | ext2(...) | ReflectionKt.ext2 |
| reflection.kt:65:17:65:36 | ...::... | reflection.kt:65:17:65:36 | new Function0<String>(...) { ... } | reflection.kt:65:17:65:36 | invoke | reflection.kt:65:17:65:36 | ext2(...) | ReflectionKt.ext2 |
| reflection.kt:67:17:67:32 | ...::... | reflection.kt:67:17:67:32 | new KMutableProperty1<Generic<Integer>,Integer>(...) { ... } | reflection.kt:67:17:67:32 | get | reflection.kt:67:17:67:32 | getP2(...) | Generic<Integer>.getP2 |
| reflection.kt:67:17:67:32 | ...::... | reflection.kt:67:17:67:32 | new KMutableProperty1<Generic<Integer>,Integer>(...) { ... } | reflection.kt:67:17:67:32 | set | reflection.kt:67:17:67:32 | setP2(...) | Generic<Integer>.setP2 |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:68:17:68:34 | get | reflection.kt:68:17:68:34 | getP2(...) | Generic<Integer>.getP2 |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:68:17:68:34 | set | reflection.kt:68:17:68:34 | setP2(...) | Generic<Integer>.setP2 |
| reflection.kt:70:17:70:30 | ...::... | reflection.kt:70:17:70:30 | new KProperty0<Integer>(...) { ... } | reflection.kt:70:17:70:30 | get | reflection.kt:70:17:70:30 | getMAX_VALUE(...) | IntCompanionObject.getMAX_VALUE |
| reflection.kt:90:18:90:24 | ...::... | reflection.kt:90:18:90:24 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:90:18:90:24 | invoke | reflection.kt:90:18:90:24 | new Inner<String>(...) | Inner<String>.Inner<String> |
| reflection.kt:97:14:97:21 | ...::... | reflection.kt:97:14:97:21 | new Function1<String,Class2<String>>(...) { ... } | reflection.kt:97:14:97:21 | invoke | reflection.kt:97:14:97:21 | new Class2<String>(...) | Class2<String>.Class2<String> |
| reflection.kt:98:14:98:17 | ...::... | reflection.kt:98:14:98:17 | new Function1<String,Unit>(...) { ... } | reflection.kt:98:14:98:17 | invoke | reflection.kt:98:14:98:17 | fn(...) | ReflectionKt.fn |
| reflection.kt:99:14:99:29 | ...::... | reflection.kt:99:14:99:29 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:99:14:99:29 | invoke | reflection.kt:99:14:99:29 | new Inner<String>(...) | Inner<String>.Inner<String> |
fieldAccessInsideInvocationMethods
| reflection.kt:14:38:14:44 | ...::... | reflection.kt:14:38:14:44 | new Function1<C,Integer>(...) { ... } | reflection.kt:14:38:14:44 | invoke | reflection.kt:14:38:14:44 | this.<dispatchReceiver> |
| reflection.kt:15:35:15:41 | ...::... | reflection.kt:15:35:15:41 | new KProperty0<Integer>(...) { ... } | reflection.kt:15:35:15:41 | get | reflection.kt:15:35:15:41 | this.<dispatchReceiver> |
| reflection.kt:21:44:21:50 | ...::... | reflection.kt:21:44:21:50 | new Function2<C,Integer,Unit>(...) { ... } | reflection.kt:21:44:21:50 | invoke | reflection.kt:21:44:21:50 | this.<dispatchReceiver> |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:22:42:22:48 | get | reflection.kt:22:42:22:48 | this.<dispatchReceiver> |
| reflection.kt:22:42:22:48 | ...::... | reflection.kt:22:42:22:48 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:22:42:22:48 | set | reflection.kt:22:42:22:48 | this.<dispatchReceiver> |
| reflection.kt:51:13:51:28 | ...::... | reflection.kt:51:13:51:28 | new KProperty0<Character>(...) { ... } | reflection.kt:51:13:51:28 | get | reflection.kt:51:13:51:28 | this.<extensionReceiver> |
| reflection.kt:61:17:61:34 | ...::... | reflection.kt:61:17:61:34 | new Function1<Integer,String>(...) { ... } | reflection.kt:61:17:61:34 | invoke | reflection.kt:61:17:61:34 | this.<dispatchReceiver> |
| reflection.kt:63:17:63:36 | ...::... | reflection.kt:63:17:63:36 | new Function0<String>(...) { ... } | reflection.kt:63:17:63:36 | invoke | reflection.kt:63:17:63:36 | this.<extensionReceiver> |
| reflection.kt:65:17:65:36 | ...::... | reflection.kt:65:17:65:36 | new Function0<String>(...) { ... } | reflection.kt:65:17:65:36 | invoke | reflection.kt:65:17:65:36 | this.<extensionReceiver> |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:68:17:68:34 | get | reflection.kt:68:17:68:34 | this.<dispatchReceiver> |
| reflection.kt:68:17:68:34 | ...::... | reflection.kt:68:17:68:34 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:68:17:68:34 | set | reflection.kt:68:17:68:34 | this.<dispatchReceiver> |
| reflection.kt:70:17:70:30 | ...::... | reflection.kt:70:17:70:30 | new KProperty0<Integer>(...) { ... } | reflection.kt:70:17:70:30 | get | reflection.kt:70:17:70:30 | this.<dispatchReceiver> |
| reflection.kt:71:17:71:34 | ...::... | reflection.kt:71:17:71:34 | new KProperty0<Integer>(...) { ... } | reflection.kt:71:17:71:34 | get | reflection.kt:71:17:71:34 | MAX_VALUE |
| reflection.kt:72:17:72:35 | ...::... | reflection.kt:72:17:72:35 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:72:17:72:35 | get | reflection.kt:72:17:72:35 | this.<dispatchReceiver> |
| reflection.kt:72:17:72:35 | ...::... | reflection.kt:72:17:72:35 | new KMutableProperty0<Integer>(...) { ... } | reflection.kt:72:17:72:35 | get | reflection.kt:72:17:72:35 | this.<dispatchReceiver>.height |
| reflection.kt:90:18:90:24 | ...::... | reflection.kt:90:18:90:24 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:90:18:90:24 | invoke | reflection.kt:90:18:90:24 | this.<dispatchReceiver> |
| reflection.kt:99:14:99:29 | ...::... | reflection.kt:99:14:99:29 | new Function1<String,Inner<String>>(...) { ... } | reflection.kt:99:14:99:29 | invoke | reflection.kt:99:14:99:29 | this.<dispatchReceiver> |

View File

@@ -1,3 +1,5 @@
import java.awt.Rectangle
import kotlin.reflect.*
class Reflection {
@@ -64,6 +66,10 @@ class Class1 {
println(Generic<Int>::p2)
println(Generic<Int>()::p2)
println(Int::MAX_VALUE) // Companion object and property getter
println(Integer::MAX_VALUE) // Static field access, no getter
println(Rectangle()::height) // Field access, no getter, with dispatch receiver
}
class Generic<T1> {

View File

@@ -65,3 +65,13 @@ query predicate callsInsideInvocationMethods(
call.getEnclosingCallable() = m and
callee = call.getCallee().getQualifiedName()
}
query predicate fieldAccessInsideInvocationMethods(
ClassInstanceExpr e, AnonymousClass c, Method m, FieldAccess access
) {
(e instanceof MemberRefExpr or e instanceof PropertyRefExpr) and
e.getAnonymousClass() = c and
c.getAMethod() = m and
m.getName() = ["invoke", "get", "set"] and
access.getEnclosingCallable() = m
}