mirror of
https://github.com/github/codeql.git
synced 2026-07-15 08:18:18 +02:00
Kotlin: converge synthetic value-parameter locations onto their owning declaration
Two compiler-synthesised value parameters that carry no source token of their
own were located differently by the K1 and K2 frontends:
- the `<set-?>` parameter of a delegated property's synthesised setter: K1
anchored it at the delegate expression (`delegates.kt:8:32:11:5`) while K2
spans the whole property declaration (`8:5:11:5`); and
- the `value` parameter of the synthetic enum `valueOf` member: K1 has no
offsets and emitted the null `0:0:0:0` location while K2 attributes it to
the enum-class declaration (`1:1:4:1`).
In both cases the parameter is synthesised, so the K2 span (the owning
declaration) is a real, navigable location and strictly more useful than either
the delegate-expression fragment or K1's null `0:0`. We therefore converge K1
onto the K2-native span, consistent with how the other synthesised members
(accessors, implicit constructors, super calls, `$delegate` fields) are already
being anchored on their owning declaration.
`getPsiBasedSyntheticParameterLocation` recovers the span from the PSI under K1
and returns null under K2 (where `getKtFile` is unavailable and the raw offsets
already carry the owning-declaration span) and for every ordinary, source-backed
parameter, so the canonical K2 output is untouched.
Relearn (both suites, CPUS=5): all 3333 tests pass. Only test-kotlin1 changes;
methods/parameters is now byte-identical across suites (6 -> 0 divergent rows),
and the same setter/valueOf parameter rows converge in the PrintAst/exprs
projections that reference them (annotation_classes/PrintAst 88->84,
classes/PrintAst 18->10, exprs/PrintAst 75->67, exprs/exprs 189->171,
exprs_typeaccess/PrintAst 9->5, methods/exprs 36->30). Every touched file's
divergence strictly decreases; no new divergence is introduced.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -1383,6 +1383,7 @@ open class KotlinFileExtractor(
|
||||
val location =
|
||||
locOverride
|
||||
?: getGeneratedDataClassCopyParamLocation(vp, idx)
|
||||
?: getPsiBasedSyntheticParameterLocation(vp)
|
||||
?: getPsiBasedValueParameterLocation(vp)
|
||||
?: getLocation(vp, classTypeArgsIncludingOuterClasses)
|
||||
val maybeAlteredType =
|
||||
@@ -3166,6 +3167,55 @@ open class KotlinFileExtractor(
|
||||
return tw.getLocation(keyword.startOffset, vp.endOffset)
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the PSI-based location for a *synthesised* value parameter that has no source
|
||||
* token of its own, matching the span the K2 frontend emits natively, or null to leave the
|
||||
* raw IR offset in place.
|
||||
*
|
||||
* Two synthetic members carry such parameters:
|
||||
* - the compiler-generated setter of a *delegated* property (its `<set-?>` parameter): the
|
||||
* K1 frontend anchors it at the delegate expression (`8:32:11:5`) while K2 spans the whole
|
||||
* property declaration (`8:5:11:5`); and
|
||||
* - the enum `valueOf` special member (its `value` parameter): the K1 frontend has no offsets
|
||||
* at all and emits the null `0:0:0:0` location while K2 attributes it to the enum-class
|
||||
* declaration (`1:1:4:1`).
|
||||
*
|
||||
* In both cases the parameter is compiler-synthesised, so the K2 span (the owning declaration)
|
||||
* is a real, navigable location and strictly more useful than either the delegate-expression
|
||||
* fragment or the null `0:0` K1 records. As with the other convergence helpers we recover that
|
||||
* span from the PSI under K1; the method returns null under K2 (where [getKtFile] is
|
||||
* unavailable and the raw offsets already carry the owning-declaration span) and for every
|
||||
* ordinary, source-backed parameter.
|
||||
*/
|
||||
private fun getPsiBasedSyntheticParameterLocation(vp: IrValueParameter): Label<DbLocation>? {
|
||||
val file = currentIrFile ?: return null
|
||||
val ktFile = getPsi2Ir()?.getKtFile(file) ?: return null
|
||||
val fn = vp.parent as? IrSimpleFunction ?: return null
|
||||
|
||||
val property = fn.correspondingPropertySymbol?.owner
|
||||
if (property != null && property.isDelegated && property.setter?.symbol == fn.symbol) {
|
||||
val ktProperty = getEnclosingKtProperty(property) ?: return null
|
||||
return tw.getLocation(ktProperty.startOffset, ktProperty.endOffset)
|
||||
}
|
||||
|
||||
if (
|
||||
fn.origin == IrDeclarationOrigin.ENUM_CLASS_SPECIAL_MEMBER &&
|
||||
fn.name.asString() == "valueOf"
|
||||
) {
|
||||
val enumClass = fn.parentClassOrNull ?: return null
|
||||
if (enumClass.startOffset < 0) return null
|
||||
val ktClass = ktFile.findElementAt(enumClass.startOffset)
|
||||
?.let { leaf ->
|
||||
generateSequence(leaf) { it.parent }
|
||||
.filterIsInstance<KtClassOrObject>()
|
||||
.firstOrNull()
|
||||
}
|
||||
?: return null
|
||||
return tw.getLocation(ktClass.startOffset, ktClass.endOffset)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the PSI-based location for a synthesised (`DEFAULT_PROPERTY_ACCESSOR`)
|
||||
* getter or setter, matching the span the K2 frontend emits natively.
|
||||
|
||||
@@ -175,8 +175,8 @@ def.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Y
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 34| 0: [Parameter] value
|
||||
# 34| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Y[]
|
||||
# 0| 0: [TypeAccess] Y
|
||||
|
||||
@@ -166,8 +166,8 @@ classes.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Direction
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 49| 0: [Parameter] value
|
||||
# 49| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Direction[]
|
||||
# 0| 0: [TypeAccess] Direction
|
||||
@@ -203,8 +203,8 @@ classes.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Color
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 53| 0: [Parameter] value
|
||||
# 53| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Color[]
|
||||
# 0| 0: [TypeAccess] Color
|
||||
|
||||
@@ -3350,8 +3350,8 @@ exprs.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Direction
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 174| 0: [Parameter] value
|
||||
# 174| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Direction[]
|
||||
# 0| 0: [TypeAccess] Direction
|
||||
@@ -3387,8 +3387,8 @@ exprs.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Color
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 178| 0: [Parameter] value
|
||||
# 178| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Color[]
|
||||
# 0| 0: [TypeAccess] Color
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
| delegatedProperties.kt:39:34:39:51 | varResource2$delegate | delegatedProperties.kt:39:9:39:51 | <get-varResource2> | VarAccess |
|
||||
| delegatedProperties.kt:42:5:42:47 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:42:5:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:42:27:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:42:5:42:47 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:5:42:47 | getVarResource0 | PropertyRefExpr |
|
||||
| delegatedProperties.kt:42:30:42:47 | ...::... | delegatedProperties.kt:42:5:42:47 | setVarResource0 | PropertyRefExpr |
|
||||
| delegatedProperties.kt:42:30:42:47 | ...=... | delegatedProperties.kt:17:1:43:1 | Owner | KtInitializerAssignExpr |
|
||||
@@ -336,7 +336,7 @@
|
||||
| delegatedProperties.kt:65:87:65:95 | memberInt | delegatedProperties.kt:65:14:65:78 | MyClass | VarAccess |
|
||||
| delegatedProperties.kt:66:5:66:50 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:66:5:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:66:33:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:66:5:66:50 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:66:36:66:39 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess |
|
||||
| delegatedProperties.kt:66:36:66:39 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess |
|
||||
| delegatedProperties.kt:66:36:66:50 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr |
|
||||
@@ -399,7 +399,7 @@
|
||||
| delegatedProperties.kt:66:36:66:50 | this.delegatedToMember1$delegate | delegatedProperties.kt:66:5:66:50 | setDelegatedToMember1 | VarAccess |
|
||||
| delegatedProperties.kt:67:5:67:53 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:67:5:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:67:33:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:67:5:67:53 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr |
|
||||
| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:5:67:53 | getDelegatedToMember2 | PropertyRefExpr |
|
||||
| delegatedProperties.kt:67:36:67:53 | ...::... | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | PropertyRefExpr |
|
||||
@@ -458,7 +458,7 @@
|
||||
| delegatedProperties.kt:67:36:67:53 | this.delegatedToMember2$delegate | delegatedProperties.kt:67:5:67:53 | setDelegatedToMember2 | VarAccess |
|
||||
| delegatedProperties.kt:69:5:69:56 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:69:5:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:69:36:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:69:5:69:56 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:69:39:69:42 | MyClass | delegatedProperties.kt:65:14:65:78 | MyClass | TypeAccess |
|
||||
| delegatedProperties.kt:69:39:69:42 | MyClass.this | delegatedProperties.kt:65:14:65:78 | MyClass | ThisAccess |
|
||||
| delegatedProperties.kt:69:39:69:56 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr |
|
||||
@@ -523,7 +523,7 @@
|
||||
| delegatedProperties.kt:69:39:69:56 | this.delegatedToExtMember1$delegate | delegatedProperties.kt:69:5:69:56 | setDelegatedToExtMember1 | VarAccess |
|
||||
| delegatedProperties.kt:70:5:70:59 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:70:5:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:70:36:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:70:5:70:59 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr |
|
||||
| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:5:70:59 | getDelegatedToExtMember2 | PropertyRefExpr |
|
||||
| delegatedProperties.kt:70:39:70:59 | ...::... | delegatedProperties.kt:70:5:70:59 | setDelegatedToExtMember2 | PropertyRefExpr |
|
||||
@@ -686,7 +686,7 @@
|
||||
| delegatedProperties.kt:75:42:75:78 | this.delegatedToAnotherClass1$delegate | delegatedProperties.kt:75:5:75:78 | getDelegatedToAnotherClass1 | VarAccess |
|
||||
| delegatedProperties.kt:77:5:77:49 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:77:5:77:49 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:77:34:77:49 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:77:5:77:49 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:77:37:77:49 | ...::... | delegatedProperties.kt:65:14:65:78 | MyClass | PropertyRefExpr |
|
||||
| delegatedProperties.kt:77:37:77:49 | ...::... | delegatedProperties.kt:77:5:77:49 | getDelegatedToTopLevel | PropertyRefExpr |
|
||||
| delegatedProperties.kt:77:37:77:49 | ...::... | delegatedProperties.kt:77:5:77:49 | setDelegatedToTopLevel | PropertyRefExpr |
|
||||
@@ -826,7 +826,7 @@
|
||||
| delegatedProperties.kt:87:1:87:46 | MyClass | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:87:1:87:46 | Unit | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:87:1:87:46 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:87:31:87:46 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:87:1:87:46 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| delegatedProperties.kt:87:34:87:46 | ...::... | delegatedProperties.kt:0:0:0:0 | <clinit> | PropertyRefExpr |
|
||||
| delegatedProperties.kt:87:34:87:46 | ...::... | delegatedProperties.kt:87:1:87:46 | getExtDelegated | PropertyRefExpr |
|
||||
| delegatedProperties.kt:87:34:87:46 | ...::... | delegatedProperties.kt:87:1:87:46 | setExtDelegated | PropertyRefExpr |
|
||||
@@ -893,8 +893,6 @@
|
||||
| exprs.kt:0:0:0:0 | Direction[] | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:0:0:0:0 | EnumEntries<Color> | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:0:0:0:0 | EnumEntries<Direction> | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:0:0:0:0 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:4:1:142:1 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:4:20:4:25 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:4:28:4:33 | int | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
@@ -1477,6 +1475,7 @@
|
||||
| exprs.kt:174:1:176:1 | 0 | exprs.kt:174:1:176:1 | Direction | IntegerLiteral |
|
||||
| exprs.kt:174:1:176:1 | Direction | exprs.kt:174:1:176:1 | Direction | TypeAccess |
|
||||
| exprs.kt:174:1:176:1 | Enum<Direction> | exprs.kt:174:1:176:1 | Direction | TypeAccess |
|
||||
| exprs.kt:174:1:176:1 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:174:1:176:1 | new Enum(...) | exprs.kt:174:1:176:1 | Direction | ClassInstanceExpr |
|
||||
| exprs.kt:174:1:176:1 | null | exprs.kt:174:1:176:1 | Direction | NullLiteral |
|
||||
| exprs.kt:175:5:175:10 | ...=... | exprs.kt:0:0:0:0 | <clinit> | KtInitializerAssignExpr |
|
||||
@@ -1506,6 +1505,7 @@
|
||||
| exprs.kt:178:1:182:1 | 0 | exprs.kt:178:17:178:30 | Color | IntegerLiteral |
|
||||
| exprs.kt:178:1:182:1 | Color | exprs.kt:178:17:178:30 | Color | TypeAccess |
|
||||
| exprs.kt:178:1:182:1 | Enum<Color> | exprs.kt:178:17:178:30 | Color | TypeAccess |
|
||||
| exprs.kt:178:1:182:1 | String | file://:0:0:0:0 | <none> | TypeAccess |
|
||||
| exprs.kt:178:1:182:1 | new Enum(...) | exprs.kt:178:17:178:30 | Color | ClassInstanceExpr |
|
||||
| exprs.kt:178:1:182:1 | null | exprs.kt:178:17:178:30 | Color | NullLiteral |
|
||||
| exprs.kt:178:18:178:29 | ...=... | exprs.kt:178:17:178:30 | Color | KtInitializerAssignExpr |
|
||||
|
||||
@@ -80,8 +80,8 @@ A.kt:
|
||||
# 0| 3: [Method] valueOf
|
||||
# 0| 3: [TypeAccess] Enu
|
||||
#-----| 4: (Parameters)
|
||||
# 0| 0: [Parameter] value
|
||||
# 0| 0: [TypeAccess] String
|
||||
# 23| 0: [Parameter] value
|
||||
# 23| 0: [TypeAccess] String
|
||||
# 0| 4: [Method] values
|
||||
# 0| 3: [TypeAccess] Enu[]
|
||||
# 0| 0: [TypeAccess] Enu
|
||||
|
||||
@@ -161,8 +161,8 @@
|
||||
| delegates.kt:4:26:6:5 | int | TypeAccess |
|
||||
| delegates.kt:5:9:5:9 | 5 | IntegerLiteral |
|
||||
| delegates.kt:8:5:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:5:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:5:11:5 | Unit | TypeAccess |
|
||||
| delegates.kt:8:32:11:5 | String | TypeAccess |
|
||||
| delegates.kt:8:35:8:43 | INSTANCE | VarAccess |
|
||||
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
|
||||
| delegates.kt:8:35:11:5 | ...::... | PropertyRefExpr |
|
||||
@@ -233,11 +233,10 @@
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | EnumWithFunctions[] | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| enumClass.kt:0:0:0:0 | String | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | 0 | IntegerLiteral |
|
||||
| enumClass.kt:1:1:4:1 | Enum<EnumClass> | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | EnumClass | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | String | TypeAccess |
|
||||
| enumClass.kt:1:1:4:1 | new Enum(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:1:1:4:1 | null | NullLiteral |
|
||||
| enumClass.kt:1:22:1:31 | ...=... | KtInitializerAssignExpr |
|
||||
@@ -265,6 +264,7 @@
|
||||
| enumClass.kt:6:1:16:1 | 0 | IntegerLiteral |
|
||||
| enumClass.kt:6:1:16:1 | Enum<EnumWithFunctions> | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | EnumWithFunctions | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | String | TypeAccess |
|
||||
| enumClass.kt:6:1:16:1 | new Enum(...) | ClassInstanceExpr |
|
||||
| enumClass.kt:6:1:16:1 | null | NullLiteral |
|
||||
| enumClass.kt:8:3:11:4 | ...=... | KtInitializerAssignExpr |
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
| dataClass.kt:1:34:1:46 | setY | dataClass.kt:1:34:1:46 | <set-?> | 0 |
|
||||
| delegates.kt:4:21:6:5 | get | delegates.kt:4:21:6:5 | a0 | 0 |
|
||||
| delegates.kt:4:21:6:5 | invoke | delegates.kt:4:21:6:5 | a0 | 0 |
|
||||
| delegates.kt:8:5:11:5 | setObservableProp | delegates.kt:8:32:11:5 | <set-?> | 0 |
|
||||
| delegates.kt:8:5:11:5 | setObservableProp | delegates.kt:8:5:11:5 | <set-?> | 0 |
|
||||
| delegates.kt:8:35:11:5 | get | delegates.kt:8:35:11:5 | a0 | 0 |
|
||||
| delegates.kt:8:35:11:5 | get | delegates.kt:8:35:11:5 | a0 | 0 |
|
||||
| delegates.kt:8:35:11:5 | invoke | delegates.kt:8:35:11:5 | a0 | 0 |
|
||||
@@ -22,8 +22,8 @@
|
||||
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:9:9:12 | prop | 0 |
|
||||
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:15:9:17 | old | 1 |
|
||||
| delegates.kt:8:66:11:5 | invoke | delegates.kt:9:20:9:22 | new | 2 |
|
||||
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:0:0:0:0 | value | 0 |
|
||||
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:0:0:0:0 | value | 0 |
|
||||
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:1:1:4:1 | value | 0 |
|
||||
| enumClass.kt:0:0:0:0 | valueOf | enumClass.kt:6:1:16:1 | value | 0 |
|
||||
| enumClass.kt:9:14:9:30 | f | enumClass.kt:9:20:9:25 | i | 0 |
|
||||
| enumClass.kt:10:14:10:42 | g | enumClass.kt:10:20:10:25 | i | 0 |
|
||||
| enumClass.kt:13:12:13:29 | f | enumClass.kt:13:18:13:23 | i | 0 |
|
||||
|
||||
Reference in New Issue
Block a user