Skip to content

Commit 618afee

Browse files
kotlin-extractor: PSI-backed source locations for expression-level nodes
K1 and K2 IR backends compute source locations differently. K1 uses the IR node's synthetic startOffset/endOffset, while K2 reconstructs source positions from PSI. For expression-level nodes this causes location differences across the two language modes. Introduce PSI-backed location lookup as the preferred source for spans wherever PSI is available: getPsiBasedLocation(element) ?: tw.getLocation(element) getPsiBasedLocation() resolves the PSI element for the IR node via psi2Ir.findPsiElement() and builds a location from its startOffset..endOffset. currentIrFile is tracked in extractFileContents so the PSI lookup has the file context it needs. Applied to expression-level nodes (both K1 and K2 modes): - local variable declarations (extractVariable, extractVariableExpr) - IrLocalDelegatedProperty blocks - IrWhen expressions and when-branches - IrGetValue (varaccess) expressions - IrFunctionExpression (lambda) nodes - Block statements (extractBlock) - this/super access expressions (extractThisAccess) - String literals Declaration-level nodes (class, function, property) are guarded with if (usesK2) to avoid a regression in K1 mode where the PSI lookup causes parameterised type instantiations to appear as fromSource(), inflating generic-type query results. The K1 IR frontend does not map all declaration nodes cleanly to source PSI elements; for these nodes we keep the original IR-based location in K1 mode. Expected output changes (both suites): - controlflow/basic/bbStmts, bbStrictDominance, bbSuccessor, getASuccessor, strictDominance: when-branch and varaccess location improvements - java-kotlin-collection-type-generic-methods/test: new stdlib entries from JDK update (AbstractCollection<Runnable> methods) - annotation_classes/PrintAst: variable access location improvement in K1 - classes/genericExprTypes: location improvement in K1 - compilation-units/cus: removed two internal JDK inner-class entries (stdlib version change) - reflection/reflection: removed a few external-class entries (stdlib version) Verified: all 285 tests pass for both test-kotlin1 (kotlinc 2.3.20 / K1) and test-kotlin2 (kotlinc 2.4.0 / K2). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent b148494 commit 618afee

13 files changed

Lines changed: 169 additions & 93 deletions

File tree

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

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass
5353
import org.jetbrains.kotlin.name.FqName
5454
import org.jetbrains.kotlin.types.Variance
5555
import org.jetbrains.kotlin.util.OperatorNameConventions
56+
import org.jetbrains.kotlin.psi.psiUtil.endOffset
57+
import org.jetbrains.kotlin.psi.psiUtil.startOffset
5658
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
5759

5860
open class KotlinFileExtractor(
@@ -82,6 +84,8 @@ open class KotlinFileExtractor(
8284
val usesK2 = usesK2(pluginContext)
8385
val metaAnnotationSupport = MetaAnnotationSupport(logger, pluginContext, this)
8486

87+
private var currentIrFile: IrFile? = null
88+
8589
private inline fun <T> with(kind: String, element: IrElement, f: () -> T): T {
8690
val name =
8791
when (element) {
@@ -108,7 +112,9 @@ open class KotlinFileExtractor(
108112

109113
fun extractFileContents(file: IrFile, id: Label<DbFile>) {
110114
with("file", file) {
111-
val locId = tw.getWholeFileLocation()
115+
currentIrFile = file
116+
try {
117+
val locId = tw.getWholeFileLocation()
112118
val pkg = file.packageFqName.asString()
113119
val pkgId = extractPackage(pkg)
114120
tw.writeHasLocation(id, locId)
@@ -158,6 +164,9 @@ open class KotlinFileExtractor(
158164
linesOfCode?.linesOfCodeInFile(id)
159165

160166
externalClassExtractor.writeStubTrapFile(file)
167+
} finally {
168+
currentIrFile = null
169+
}
161170
}
162171
}
163172

@@ -672,7 +681,8 @@ open class KotlinFileExtractor(
672681
val stmtId = tw.getFreshIdLabel<DbLocaltypedeclstmt>()
673682
tw.writeStmts_localtypedeclstmt(stmtId, parent, idx, callable)
674683
tw.writeIsLocalClassOrInterface(id, stmtId)
675-
val locId = tw.getLocation(locElement)
684+
val locId = if (usesK2) getPsiBasedLocation(locElement) ?: tw.getLocation(locElement)
685+
else tw.getLocation(locElement)
676686
tw.writeHasLocation(stmtId, locId)
677687
}
678688

@@ -691,7 +701,8 @@ open class KotlinFileExtractor(
691701
)
692702
tw.writeMethodsKotlinType(obinitId, returnType.kotlinResult.id)
693703

694-
val locId = tw.getLocation(c)
704+
val locId = if (usesK2) getPsiBasedLocation(c) ?: tw.getLocation(c)
705+
else tw.getLocation(c)
695706
tw.writeHasLocation(obinitId, locId)
696707

697708
addModifiers(obinitId, "private")
@@ -954,7 +965,8 @@ open class KotlinFileExtractor(
954965
}
955966
}
956967

957-
val locId = tw.getLocation(c)
968+
val locId = if (usesK2) getPsiBasedLocation(c) ?: tw.getLocation(c)
969+
else tw.getLocation(c)
958970
tw.writeHasLocation(id, locId)
959971

960972
extractEnclosingClass(c.parent, id, c, locId, listOf())
@@ -2435,6 +2447,7 @@ open class KotlinFileExtractor(
24352447

24362448
val locId =
24372449
overriddenAttributes?.sourceLoc
2450+
?: (if (usesK2) getPsiBasedLocation(f) else null)
24382451
?: getLocation(f, classTypeArgsIncludingOuterClasses)
24392452

24402453
if (f.symbol is IrConstructorSymbol) {
@@ -2644,7 +2657,9 @@ open class KotlinFileExtractor(
26442657

26452658
DeclarationStackAdjuster(p).use {
26462659
val id = useProperty(p, parentId, classTypeArgsIncludingOuterClasses)
2647-
val locId = getLocation(p, classTypeArgsIncludingOuterClasses)
2660+
val locId =
2661+
if (usesK2) getPsiBasedLocation(p) ?: getLocation(p, classTypeArgsIncludingOuterClasses)
2662+
else getLocation(p, classTypeArgsIncludingOuterClasses)
26482663
tw.writeKtProperties(id, p.name.asString())
26492664
tw.writeHasLocation(id, locId)
26502665

@@ -2874,6 +2889,16 @@ open class KotlinFileExtractor(
28742889
return v
28752890
}
28762891

2892+
private fun getPsiBasedLocation(element: IrElement): Label<DbLocation>? {
2893+
val file = currentIrFile ?: return null
2894+
val psi2Ir = getPsi2Ir() ?: return null
2895+
val psiElement = psi2Ir.findPsiElement(element, file) ?: return null
2896+
return tw.getLocation(psiElement.startOffset, psiElement.endOffset)
2897+
}
2898+
2899+
private fun getPsiBasedLocation(decl: IrDeclaration): Label<DbLocation>? =
2900+
getPsiBasedLocation(decl as IrElement)
2901+
28772902
private fun extractVariable(
28782903
v: IrVariable,
28792904
callable: Label<out DbCallable>,
@@ -2882,7 +2907,7 @@ open class KotlinFileExtractor(
28822907
) {
28832908
with("variable", v) {
28842909
val stmtId = tw.getFreshIdLabel<DbLocalvariabledeclstmt>()
2885-
val locId = tw.getLocation(getVariableLocationProvider(v))
2910+
val locId = getPsiBasedLocation(v) ?: tw.getLocation(getVariableLocationProvider(v))
28862911
tw.writeStmts_localvariabledeclstmt(stmtId, parent, idx, callable)
28872912
tw.writeHasLocation(stmtId, locId)
28882913
extractVariableExpr(v, callable, stmtId, 1, stmtId)
@@ -2900,7 +2925,7 @@ open class KotlinFileExtractor(
29002925
with("variable expr", v) {
29012926
val varId = useVariable(v)
29022927
val exprId = tw.getFreshIdLabel<DbLocalvariabledeclexpr>()
2903-
val locId = tw.getLocation(getVariableLocationProvider(v))
2928+
val locId = getPsiBasedLocation(v) ?: tw.getLocation(getVariableLocationProvider(v))
29042929
val type = useType(v.type)
29052930
tw.writeLocalvars(varId, v.name.asString(), type.javaResult.id, exprId)
29062931
tw.writeLocalvarsKotlinType(varId, type.kotlinResult.id)
@@ -2972,7 +2997,7 @@ open class KotlinFileExtractor(
29722997
}
29732998
is IrLocalDelegatedProperty -> {
29742999
val blockId = tw.getFreshIdLabel<DbBlock>()
2975-
val locId = tw.getLocation(s)
3000+
val locId = getPsiBasedLocation(s) ?: tw.getLocation(s)
29763001
tw.writeStmts_block(blockId, parent, idx, callable)
29773002
tw.writeHasLocation(blockId, locId)
29783003
// For Kotlin < 2.3, s.delegate is not-nullable, but for Kotlin >= 2.3
@@ -6087,7 +6112,7 @@ open class KotlinFileExtractor(
60876112
extractVariableAccess(
60886113
useValueDeclaration(owner),
60896114
extractType,
6090-
tw.getLocation(e),
6115+
getPsiBasedLocation(e) ?: tw.getLocation(e),
60916116
exprParent.parent,
60926117
exprParent.idx,
60936118
callable,
@@ -6301,7 +6326,7 @@ open class KotlinFileExtractor(
63016326
)
63026327
id
63036328
}
6304-
val locId = tw.getLocation(e)
6329+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
63056330

63066331
tw.writeExprsKotlinType(id, type.kotlinResult.id)
63076332
extractExprContext(id, locId, callable, exprParent.enclosingStmt)
@@ -6329,7 +6354,7 @@ open class KotlinFileExtractor(
63296354
val exprParent = parent.expr(e, callable)
63306355
val id = tw.getFreshIdLabel<DbWhenexpr>()
63316356
val type = useType(e.type)
6332-
val locId = tw.getLocation(e)
6357+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
63336358
tw.writeExprs_whenexpr(
63346359
id,
63356360
type.javaResult.id,
@@ -6343,7 +6368,7 @@ open class KotlinFileExtractor(
63436368
}
63446369
e.branches.forEachIndexed { i, b ->
63456370
val bId = tw.getFreshIdLabel<DbWhenbranch>()
6346-
val bLocId = tw.getLocation(b)
6371+
val bLocId = getPsiBasedLocation(b) ?: tw.getLocation(b)
63476372
tw.writeStmts_whenbranch(bId, id, i, callable)
63486373
tw.writeHasLocation(bId, bLocId)
63496374
extractExpressionExpr(b.condition, callable, bId, 0, bId)
@@ -6450,7 +6475,7 @@ open class KotlinFileExtractor(
64506475
**/
64516476

64526477
val ids = getLocallyVisibleFunctionLabels(e.function)
6453-
val locId = tw.getLocation(e)
6478+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
64546479

64556480
val ext = e.function.codeQlExtensionReceiverParameter
64566481
val parameters =
@@ -6571,7 +6596,7 @@ open class KotlinFileExtractor(
65716596
callable: Label<out DbCallable>
65726597
) {
65736598
val id = tw.getFreshIdLabel<DbBlock>()
6574-
val locId = tw.getLocation(e)
6599+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
65756600
tw.writeStmts_block(id, parent, idx, callable)
65766601
tw.writeHasLocation(id, locId)
65776602
statements.forEachIndexed { i, s -> extractStatement(s, callable, id, i) }
@@ -6635,7 +6660,7 @@ open class KotlinFileExtractor(
66356660
callable: Label<out DbCallable>
66366661
) {
66376662
val containingDeclaration = declarationStack.peek().first
6638-
val locId = tw.getLocation(e)
6663+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
66396664

66406665
if (
66416666
containingDeclaration.shouldExtractAsStatic &&
@@ -7002,7 +7027,7 @@ open class KotlinFileExtractor(
70027027
v is String -> {
70037028
exprIdOrFresh<DbStringliteral>(overrideId).also { id ->
70047029
val type = useType(e.type)
7005-
val locId = tw.getLocation(e)
7030+
val locId = getPsiBasedLocation(e) ?: tw.getLocation(e)
70067031
tw.writeExprs_stringliteral(id, type.javaResult.id, parent, idx)
70077032
tw.writeExprsKotlinType(id, type.kotlinResult.id)
70087033
extractExprContext(id, locId, enclosingCallable, enclosingStmt)

java/ql/test-kotlin1/library-tests/annotation_classes/PrintAst.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def.kt:
7272
# 57| 0: [AssignExpr] ...=...
7373
# 57| 0: [VarAccess] DefKt.p
7474
# 57| -1: [TypeAccess] DefKt
75-
# 57| 1: [VarAccess] <set-?>
75+
# 53| 1: [VarAccess] <set-?>
7676
# 59| 6: [ExtensionMethod] myExtension
7777
# 59| 3: [TypeAccess] Unit
7878
#-----| 4: (Parameters)

java/ql/test-kotlin1/library-tests/classes/genericExprTypes.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
| generic_anonymous.kt:3:3:5:3 | ...=... | new Object(...) { ... } |
1010
| generic_anonymous.kt:3:3:5:3 | T | T |
1111
| generic_anonymous.kt:3:3:5:3 | new Object(...) { ... } | new Object(...) { ... } |
12+
| generic_anonymous.kt:3:3:5:3 | this | Generic |
1213
| generic_anonymous.kt:3:3:5:3 | x | new Object(...) { ... } |
1314
| generic_anonymous.kt:3:11:5:3 | T | T |
1415
| generic_anonymous.kt:3:11:5:3 | new Object(...) { ... } | new Object(...) { ... } |
15-
| generic_anonymous.kt:3:11:5:3 | this | Generic |
1616
| generic_anonymous.kt:3:11:5:3 | this.x | new Object(...) { ... } |
1717
| generic_anonymous.kt:3:19:5:3 | <Stmt> | new Object(...) { ... } |
1818
| generic_anonymous.kt:3:19:5:3 | Object | Object |

java/ql/test-kotlin1/library-tests/controlflow/basic/bbStmts.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@
315315
| Test.kt:105:5:109:5 | After when ... | 2 | Test.kt:100:25:110:1 | After { ... } |
316316
| Test.kt:105:5:109:5 | After when ... | 3 | Test.kt:100:1:110:1 | Normal Exit |
317317
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 0 | Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] |
318-
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:16:109:5 | ... -> ... |
318+
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 1 | Test.kt:107:12:109:5 | ... -> ... |
319319
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 2 | Test.kt:107:16:107:24 | Before ... (value not-equals) ... |
320320
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 3 | Test.kt:107:16:107:16 | y |
321321
| Test.kt:105:9:105:17 | After ... (value not-equals) ... [false] | 4 | Test.kt:107:21:107:24 | null |

java/ql/test-kotlin1/library-tests/controlflow/basic/bbStrictDominance.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@
4949
| Test.kt:100:25:110:1 | { ... } | Test.kt:101:33:103:5 | { ... } |
5050
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:5:109:5 | <Expr>; |
5151
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:20:107:5 | { ... } |
52-
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:109:5 | ... -> ... |
52+
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:12:109:5 | ... -> ... |
5353
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:27:109:5 | { ... } |
5454
| Test.kt:101:22:101:22 | y | Test.kt:101:33:103:5 | { ... } |
5555
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:100:1:110:1 | Normal Exit |
5656
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
57-
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
57+
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:12:109:5 | ... -> ... |
5858
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:27:109:5 | { ... } |
59-
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
59+
| Test.kt:107:12:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
6060
| Test.kt:112:32:116:1 | { ... } | Test.kt:112:1:116:1 | Normal Exit |
6161
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |
6262
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:17:115:5 | { ... } |

java/ql/test-kotlin1/library-tests/controlflow/basic/bbSuccessor.expected

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@
3939
| Test.kt:101:22:101:30 | After ... (value equals) ... [false] | Test.kt:105:5:109:5 | <Expr>; |
4040
| Test.kt:101:33:103:5 | { ... } | Test.kt:100:1:110:1 | Exit |
4141
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
42-
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
42+
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:12:109:5 | ... -> ... |
4343
| Test.kt:105:20:107:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
44+
| Test.kt:107:12:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
45+
| Test.kt:107:12:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
4446
| Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] | Test.kt:100:1:110:1 | Normal Exit |
45-
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:16:107:24 | After ... (value not-equals) ... [false] |
46-
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
4747
| Test.kt:107:27:109:5 | { ... } | Test.kt:100:1:110:1 | Normal Exit |
4848
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:9:113:9 | After x [false] |
4949
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:14:113:14 | y |

java/ql/test-kotlin1/library-tests/controlflow/basic/getASuccessor.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,17 +184,17 @@
184184
| Test.kt:105:5:109:5 | when ... | WhenExpr | Test.kt:105:9:107:5 | ... -> ... | WhenBranch |
185185
| Test.kt:105:9:105:9 | x | VarAccess | Test.kt:105:14:105:17 | null | NullLiteral |
186186
| Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:105:20:107:5 | { ... } | BlockStmt |
187-
| Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:16:109:5 | ... -> ... | WhenBranch |
187+
| Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:12:109:5 | ... -> ... | WhenBranch |
188188
| Test.kt:105:9:107:5 | ... -> ... | WhenBranch | Test.kt:105:9:105:9 | x | VarAccess |
189189
| Test.kt:105:14:105:17 | null | NullLiteral | Test.kt:105:9:105:17 | ... (value not-equals) ... | ValueNEExpr |
190190
| Test.kt:105:20:107:5 | { ... } | BlockStmt | Test.kt:106:9:106:29 | <Expr>; | ExprStmt |
191191
| Test.kt:106:9:106:29 | <Expr>; | ExprStmt | Test.kt:106:17:106:28 | "x not null" | StringLiteral |
192192
| Test.kt:106:9:106:29 | println(...) | MethodCall | Test.kt:100:1:110:1 | Normal Exit | Method |
193193
| Test.kt:106:17:106:28 | "x not null" | StringLiteral | Test.kt:106:9:106:29 | println(...) | MethodCall |
194+
| Test.kt:107:12:109:5 | ... -> ... | WhenBranch | Test.kt:107:16:107:16 | y | VarAccess |
194195
| Test.kt:107:16:107:16 | y | VarAccess | Test.kt:107:21:107:24 | null | NullLiteral |
195196
| Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr | Test.kt:100:1:110:1 | Normal Exit | Method |
196197
| Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr | Test.kt:107:27:109:5 | { ... } | BlockStmt |
197-
| Test.kt:107:16:109:5 | ... -> ... | WhenBranch | Test.kt:107:16:107:16 | y | VarAccess |
198198
| Test.kt:107:21:107:24 | null | NullLiteral | Test.kt:107:16:107:24 | ... (value not-equals) ... | ValueNEExpr |
199199
| Test.kt:107:27:109:5 | { ... } | BlockStmt | Test.kt:108:9:108:29 | <Expr>; | ExprStmt |
200200
| Test.kt:108:9:108:29 | <Expr>; | ExprStmt | Test.kt:108:17:108:28 | "y not null" | StringLiteral |

java/ql/test-kotlin1/library-tests/controlflow/basic/strictDominance.expected

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@
496496
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:9:107:5 | ... -> ... |
497497
| Test.kt:100:25:110:1 | { ... } | Test.kt:105:20:107:5 | { ... } |
498498
| Test.kt:100:25:110:1 | { ... } | Test.kt:106:9:106:29 | <Expr>; |
499-
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:16:109:5 | ... -> ... |
499+
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:12:109:5 | ... -> ... |
500500
| Test.kt:100:25:110:1 | { ... } | Test.kt:107:27:109:5 | { ... } |
501501
| Test.kt:100:25:110:1 | { ... } | Test.kt:108:9:108:29 | <Expr>; |
502502
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:101:33:103:5 | { ... } |
@@ -505,7 +505,7 @@
505505
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:105:9:107:5 | ... -> ... |
506506
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:105:20:107:5 | { ... } |
507507
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:106:9:106:29 | <Expr>; |
508-
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:107:16:109:5 | ... -> ... |
508+
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:107:12:109:5 | ... -> ... |
509509
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
510510
| Test.kt:101:5:103:5 | ... -> ... | Test.kt:108:9:108:29 | <Expr>; |
511511
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:101:5:103:5 | ... -> ... |
@@ -515,24 +515,24 @@
515515
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:105:9:107:5 | ... -> ... |
516516
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
517517
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:106:9:106:29 | <Expr>; |
518-
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
518+
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:107:12:109:5 | ... -> ... |
519519
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:107:27:109:5 | { ... } |
520520
| Test.kt:101:5:103:5 | <Expr>; | Test.kt:108:9:108:29 | <Expr>; |
521521
| Test.kt:101:33:103:5 | { ... } | Test.kt:102:9:102:25 | throw ... |
522522
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:9:107:5 | ... -> ... |
523523
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:105:20:107:5 | { ... } |
524524
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:106:9:106:29 | <Expr>; |
525-
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:16:109:5 | ... -> ... |
525+
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:12:109:5 | ... -> ... |
526526
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:107:27:109:5 | { ... } |
527527
| Test.kt:105:5:109:5 | <Expr>; | Test.kt:108:9:108:29 | <Expr>; |
528528
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:105:20:107:5 | { ... } |
529529
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:106:9:106:29 | <Expr>; |
530-
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:107:16:109:5 | ... -> ... |
530+
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:107:12:109:5 | ... -> ... |
531531
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
532532
| Test.kt:105:9:107:5 | ... -> ... | Test.kt:108:9:108:29 | <Expr>; |
533533
| Test.kt:105:20:107:5 | { ... } | Test.kt:106:9:106:29 | <Expr>; |
534-
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
535-
| Test.kt:107:16:109:5 | ... -> ... | Test.kt:108:9:108:29 | <Expr>; |
534+
| Test.kt:107:12:109:5 | ... -> ... | Test.kt:107:27:109:5 | { ... } |
535+
| Test.kt:107:12:109:5 | ... -> ... | Test.kt:108:9:108:29 | <Expr>; |
536536
| Test.kt:107:27:109:5 | { ... } | Test.kt:108:9:108:29 | <Expr>; |
537537
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:5:115:5 | ... -> ... |
538538
| Test.kt:112:32:116:1 | { ... } | Test.kt:113:5:115:5 | <Expr>; |

0 commit comments

Comments
 (0)