mirror of
https://github.com/github/codeql.git
synced 2026-07-26 21:44:02 +02:00
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>