mirror of
https://github.com/github/codeql.git
synced 2026-07-27 05:51:56 +02:00
Kotlin: converge synthetic property-access locations to the K2 signature span
For a property such as `val prop: Int = 1`, the compiler generates synthetic `this.prop` accesses (inside the default getter and the primary-constructor field initialiser). The K1 and K2 frontends give these synthetic accesses different source spans: * K1 runs the span through the initialiser: `variables.kt:3:5:3:21` * K2 stops at the end of the type signature: `variables.kt:3:5:3:17` The property *declaration* location is `3:21` under both frontends and is left untouched; only these synthetic *access* expressions diverged. The K2 signature span (val/var keyword to the end of the type, or to the end of the name when the type is inferred) is the more intuitive location: it points at the property's signature rather than incidentally swallowing the initialiser expression, so a `this.prop` read is not reported as spanning code it does not evaluate. We adopt the K2 span and reproduce it under K1 from PSI. New helper `getPsiBasedPropertySignatureAccessLocation` returns the signature span only when the access resolves (via `findPsiElement`) to the enclosing `KtProperty`, which is true exactly for these synthetic property-declaration-anchored accesses. It returns null under K2 (no PSI is available there, and the raw IR offset already gives the signature span) and for every ordinary source-written access (whose PSI is the reference expression, not the whole declaration), so canonical K2 output and normal accesses are unaffected. It is wired into the `IrGetField` read path and into `extractThisAccess`. Effect: tk1 `variables/variables.expected` becomes byte-identical to tk2; `variables/variableAccesses.expected` drops to only the separate implicit-`this` call-receiver span divergence; genericExprTypes/exprs/methods synthetic property-access rows all move from the through-initialiser span onto the K2 signature span. All 3333 tests pass in both suites; test-kotlin2 is unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -7,22 +7,22 @@
|
||||
| generic_anonymous.kt:1:26:1:33 | this | Generic |
|
||||
| generic_anonymous.kt:1:26:1:33 | this.t | T |
|
||||
| generic_anonymous.kt:3:3:5:3 | ...=... | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:3:5:3 | this | Generic |
|
||||
| generic_anonymous.kt:3:3:5:3 | x | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:11:3:15 | T | T |
|
||||
| generic_anonymous.kt:3:11:3:15 | new Object(...) { ... } | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:11:3:15 | this | Generic |
|
||||
| generic_anonymous.kt:3:11:3:15 | this.x | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:11:5:3 | T | T |
|
||||
| generic_anonymous.kt:3:11:5:3 | new Object(...) { ... } | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:11:5:3 | this.x | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:19:5:3 | <Stmt> | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:3:19:5:3 | Object | Object |
|
||||
| generic_anonymous.kt:3:19:5:3 | new (...) | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:4:7:4:16 | T | T |
|
||||
| generic_anonymous.kt:4:7:4:16 | this | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:4:7:4:16 | this.member | T |
|
||||
| generic_anonymous.kt:4:7:4:20 | ...=... | T |
|
||||
| generic_anonymous.kt:4:7:4:20 | T | T |
|
||||
| generic_anonymous.kt:4:7:4:20 | member | T |
|
||||
| generic_anonymous.kt:4:7:4:20 | this | new Object(...) { ... } |
|
||||
| generic_anonymous.kt:4:7:4:20 | this.member | T |
|
||||
| generic_anonymous.kt:4:20:4:20 | Generic | Generic |
|
||||
| generic_anonymous.kt:4:20:4:20 | Generic.this | Generic |
|
||||
| generic_anonymous.kt:4:20:4:20 | getT(...) | T |
|
||||
|
||||
@@ -119,14 +119,14 @@
|
||||
| delegatedProperties.kt:26:13:26:24 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:26:13:26:24 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:26:13:26:24 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:26:13:26:24 | this | delegatedProperties.kt:26:13:26:24 | getCurValue | ThisAccess |
|
||||
| delegatedProperties.kt:26:13:26:24 | this | delegatedProperties.kt:26:13:26:24 | setCurValue | ThisAccess |
|
||||
| delegatedProperties.kt:26:13:26:24 | this.curValue | delegatedProperties.kt:26:13:26:24 | getCurValue | VarAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | ...=... | delegatedProperties.kt:25:64:31:9 | | KtInitializerAssignExpr |
|
||||
| delegatedProperties.kt:26:13:26:28 | ...=... | delegatedProperties.kt:26:13:26:24 | setCurValue | AssignExpr |
|
||||
| delegatedProperties.kt:26:13:26:28 | <set-?> | delegatedProperties.kt:26:13:26:24 | setCurValue | VarAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | curValue | delegatedProperties.kt:25:64:31:9 | | VarAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | this | delegatedProperties.kt:26:13:26:24 | getCurValue | ThisAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | this | delegatedProperties.kt:26:13:26:24 | setCurValue | ThisAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | this.curValue | delegatedProperties.kt:26:13:26:24 | getCurValue | VarAccess |
|
||||
| delegatedProperties.kt:26:13:26:28 | this.curValue | delegatedProperties.kt:26:13:26:24 | setCurValue | VarAccess |
|
||||
| delegatedProperties.kt:26:28:26:28 | 0 | delegatedProperties.kt:25:64:31:9 | | IntegerLiteral |
|
||||
| delegatedProperties.kt:27:22:27:88 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
@@ -281,6 +281,8 @@
|
||||
| delegatedProperties.kt:54:51:54:68 | KProperty<?> | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:56:16:56:33 | ResourceDelegate | delegatedProperties.kt:54:14:57:5 | provideDelegate | TypeAccess |
|
||||
| delegatedProperties.kt:56:16:56:33 | new ResourceDelegate(...) | delegatedProperties.kt:54:14:57:5 | provideDelegate | ClassInstanceExpr |
|
||||
| delegatedProperties.kt:60:1:60:20 | DelegatedPropertiesKt | delegatedProperties.kt:60:1:60:20 | getTopLevelInt | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:20 | DelegatedPropertiesKt.topLevelInt | delegatedProperties.kt:60:1:60:20 | getTopLevelInt | VarAccess |
|
||||
| delegatedProperties.kt:60:1:60:20 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:20 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:20 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
@@ -288,10 +290,8 @@
|
||||
| delegatedProperties.kt:60:1:60:24 | ...=... | delegatedProperties.kt:60:1:60:20 | setTopLevelInt | AssignExpr |
|
||||
| delegatedProperties.kt:60:1:60:24 | <set-?> | delegatedProperties.kt:60:1:60:20 | setTopLevelInt | VarAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt | delegatedProperties.kt:0:0:0:0 | <clinit> | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt | delegatedProperties.kt:60:1:60:20 | getTopLevelInt | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt | delegatedProperties.kt:60:1:60:20 | setTopLevelInt | TypeAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt.topLevelInt | delegatedProperties.kt:0:0:0:0 | <clinit> | VarAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt.topLevelInt | delegatedProperties.kt:60:1:60:20 | getTopLevelInt | VarAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | DelegatedPropertiesKt.topLevelInt | delegatedProperties.kt:60:1:60:20 | setTopLevelInt | VarAccess |
|
||||
| delegatedProperties.kt:60:1:60:24 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:60:24:60:24 | 0 | delegatedProperties.kt:0:0:0:0 | <clinit> | IntegerLiteral |
|
||||
@@ -1545,11 +1545,11 @@
|
||||
| exprs.kt:186:23:186:27 | Color | exprs.kt:184:1:187:1 | enums | TypeAccess |
|
||||
| exprs.kt:186:23:186:27 | Color.GREEN | exprs.kt:184:1:187:1 | enums | VarAccess |
|
||||
| exprs.kt:192:5:192:10 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:192:5:192:10 | this | exprs.kt:192:5:192:10 | getA1 | ThisAccess |
|
||||
| exprs.kt:192:5:192:10 | this.a1 | exprs.kt:192:5:192:10 | getA1 | VarAccess |
|
||||
| exprs.kt:192:5:192:14 | ...=... | exprs.kt:191:1:199:1 | Class1 | KtInitializerAssignExpr |
|
||||
| exprs.kt:192:5:192:14 | a1 | exprs.kt:191:1:199:1 | Class1 | VarAccess |
|
||||
| exprs.kt:192:5:192:14 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:192:5:192:14 | this | exprs.kt:192:5:192:10 | getA1 | ThisAccess |
|
||||
| exprs.kt:192:5:192:14 | this.a1 | exprs.kt:192:5:192:10 | getA1 | VarAccess |
|
||||
| exprs.kt:192:14:192:14 | 1 | exprs.kt:191:1:199:1 | Class1 | IntegerLiteral |
|
||||
| exprs.kt:193:13:198:5 | Object | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:194:9:194:18 | a2 | exprs.kt:193:13:198:5 | getObject | LocalVariableDeclExpr |
|
||||
@@ -1558,11 +1558,11 @@
|
||||
| exprs.kt:195:16:197:9 | Interface1 | exprs.kt:193:13:198:5 | getObject | TypeAccess |
|
||||
| exprs.kt:195:16:197:9 | new (...) | exprs.kt:193:13:198:5 | getObject | ClassInstanceExpr |
|
||||
| exprs.kt:196:13:196:26 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:196:13:196:26 | this | exprs.kt:196:13:196:26 | getA3 | ThisAccess |
|
||||
| exprs.kt:196:13:196:26 | this.a3 | exprs.kt:196:13:196:26 | getA3 | VarAccess |
|
||||
| exprs.kt:196:13:196:49 | ...=... | exprs.kt:195:16:197:9 | | KtInitializerAssignExpr |
|
||||
| exprs.kt:196:13:196:49 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:196:13:196:49 | a3 | exprs.kt:195:16:197:9 | | VarAccess |
|
||||
| exprs.kt:196:13:196:49 | this | exprs.kt:196:13:196:26 | getA3 | ThisAccess |
|
||||
| exprs.kt:196:13:196:49 | this.a3 | exprs.kt:196:13:196:26 | getA3 | VarAccess |
|
||||
| exprs.kt:196:31:196:32 | getA1(...) | exprs.kt:195:16:197:9 | | MethodCall |
|
||||
| exprs.kt:196:31:196:32 | this | exprs.kt:195:16:197:9 | | ThisAccess |
|
||||
| exprs.kt:196:31:196:37 | ... + ... | exprs.kt:195:16:197:9 | | AddExpr |
|
||||
@@ -4295,10 +4295,10 @@
|
||||
| samConversion.kt:59:12:59:12 | 1 | samConversion.kt:57:9:60:1 | test | IntegerLiteral |
|
||||
| samConversion.kt:59:14:59:14 | 2 | samConversion.kt:57:9:60:1 | test | IntegerLiteral |
|
||||
| samConversion.kt:63:5:63:9 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| samConversion.kt:63:5:63:9 | this | samConversion.kt:63:5:63:9 | getX | ThisAccess |
|
||||
| samConversion.kt:63:5:63:9 | this.x | samConversion.kt:63:5:63:9 | getX | VarAccess |
|
||||
| samConversion.kt:63:5:63:13 | ...=... | samConversion.kt:62:1:64:1 | PropertyRefsTest | KtInitializerAssignExpr |
|
||||
| samConversion.kt:63:5:63:13 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| samConversion.kt:63:5:63:13 | this | samConversion.kt:63:5:63:9 | getX | ThisAccess |
|
||||
| samConversion.kt:63:5:63:13 | this.x | samConversion.kt:63:5:63:9 | getX | VarAccess |
|
||||
| samConversion.kt:63:5:63:13 | x | samConversion.kt:62:1:64:1 | PropertyRefsTest | VarAccess |
|
||||
| samConversion.kt:63:13:63:13 | 1 | samConversion.kt:62:1:64:1 | PropertyRefsTest | IntegerLiteral |
|
||||
| samConversion.kt:67:5:67:37 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
| clinit.kt:3:1:3:20 | ClinitKt | TypeAccess |
|
||||
| clinit.kt:3:1:3:20 | ClinitKt.topLevelInt | VarAccess |
|
||||
| clinit.kt:3:1:3:20 | Unit | TypeAccess |
|
||||
| clinit.kt:3:1:3:20 | int | TypeAccess |
|
||||
| clinit.kt:3:1:3:20 | int | TypeAccess |
|
||||
@@ -6,8 +8,6 @@
|
||||
| clinit.kt:3:1:3:24 | <set-?> | VarAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt | TypeAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt | TypeAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt | TypeAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt.topLevelInt | VarAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt.topLevelInt | VarAccess |
|
||||
| clinit.kt:3:1:3:24 | ClinitKt.topLevelInt | VarAccess |
|
||||
| clinit.kt:3:1:3:24 | int | TypeAccess |
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
varAcc
|
||||
| variables.kt:3:5:3:17 | this.prop |
|
||||
| variables.kt:3:5:3:21 | prop |
|
||||
| variables.kt:3:5:3:21 | this.prop |
|
||||
| variables.kt:7:17:7:22 | local1 |
|
||||
| variables.kt:9:17:9:22 | local2 |
|
||||
| variables.kt:10:22:10:26 | param |
|
||||
| variables.kt:11:17:11:22 | local3 |
|
||||
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
|
||||
| variables.kt:15:1:15:17 | VariablesKt.topLevel |
|
||||
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
|
||||
| variables.kt:21:11:21:18 | o |
|
||||
| variables.kt:21:11:21:18 | o |
|
||||
@@ -20,7 +20,7 @@ extensionReceiverAcc
|
||||
| variables.kt:32:9:32:12 | this |
|
||||
| variables.kt:33:9:33:12 | this |
|
||||
instAcc
|
||||
| variables.kt:3:5:3:21 | this |
|
||||
| variables.kt:3:5:3:17 | this |
|
||||
| variables.kt:21:11:21:18 | this |
|
||||
| variables.kt:26:9:26:9 | this |
|
||||
| variables.kt:26:11:26:15 | this |
|
||||
|
||||
@@ -13,8 +13,8 @@ isFinal
|
||||
| variables.kt:8:9:8:26 | int local2 | non-final |
|
||||
| variables.kt:10:9:10:26 | int local3 | final |
|
||||
compileTimeConstant
|
||||
| variables.kt:3:5:3:17 | this.prop |
|
||||
| variables.kt:3:5:3:21 | prop |
|
||||
| variables.kt:3:5:3:21 | this.prop |
|
||||
| variables.kt:7:17:7:22 | local1 |
|
||||
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
|
||||
| variables.kt:15:1:15:17 | VariablesKt.topLevel |
|
||||
| variables.kt:15:1:15:21 | VariablesKt.topLevel |
|
||||
|
||||
Reference in New Issue
Block a user