rra/zhelenskiy/flattening_impl
[IR] Remove unused MFVC getters
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>
#KT-1179
[IR] Add context receivers test, fix a flattening fields bug
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>
#KT-1179
[IR] Support `try` for MFVC
#KT-1179
[IR] Support `if` and `when` for MFVC, fix several bugs, refactor
#KT-1179
[IR] Rename MFVC tests + Add test for get-field optimization
#KT-1179
[IR] Suppress temporary test failing on Android
Bug is fixed in https://jetbrains.team/p/kt/reviews/6452
#KT-1179
[IR] Document the new MFVC lowering classes when necessary
#KT-1179
[IR] Correct work of the new MFVC lowering classes
#KT-1179
[IR] Prepare MFVC-lowering for the new MFVC classes
#KT-1179
[IR] Fix MFVC with type arguments/parameters
#KT-1179
[IR] Support MFVC with type parameters
#KT-1179
[IR] Integrate MFVC with Inline classes
#KT-1179
[IR] Fix compilation of MFVC in different module
#KT-1179
[IR] Add MFVC generation tests
#KT-1179
[IR] Implement equals call correct generation for MFVC
#KT-1179
[IR] Implement bridges generation for MFVC
#KT-1179
[IR] Implement MFVC basic flattening
#KT-1179
Merge-request: KT-MR-6213
Merged-by: Evgeniy Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt
index 5b18f7b..816ac95 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/optimization/boxing/BoxingInterpreter.kt
@@ -301,14 +301,16 @@
if (name != KotlinTypeMapper.BOX_JVM_METHOD_NAME) return false
val ownerType = Type.getObjectType(owner)
- return desc == Type.getMethodDescriptor(ownerType, unboxedTypeOfInlineClass(ownerType, state))
+ val unboxedType = unboxedTypeOfInlineClass(ownerType, state) ?: return false
+ return desc == Type.getMethodDescriptor(ownerType, unboxedType)
}
private fun MethodInsnNode.isInlineClassUnboxingMethodDescriptor(state: GenerationState): Boolean {
if (name != KotlinTypeMapper.UNBOX_JVM_METHOD_NAME) return false
val ownerType = Type.getObjectType(owner)
- return desc == Type.getMethodDescriptor(unboxedTypeOfInlineClass(ownerType, state))
+ val unboxedType = unboxedTypeOfInlineClass(ownerType, state) ?: return false
+ return desc == Type.getMethodDescriptor(unboxedType)
}
fun AbstractInsnNode.isNextMethodCallOfProgressionIterator(values: List<BasicValue>) =
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
index 9e44140..b473a20 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java
@@ -50172,10 +50172,70 @@
}
@Test
+ @TestMetadata("complex.kt")
+ public void testComplex() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/complex.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("conditionalExpressions.kt")
+ public void testConditionalExpressions() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/conditionalExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
@TestMetadata("equality.kt")
public void testEquality() throws Exception {
runTest("compiler/testData/codegen/box/valueClasses/equality.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
}
+
+ @Test
+ @TestMetadata("forStatement.kt")
+ public void testForStatement() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/forStatement.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcFieldInitializationOrder.kt")
+ public void testMfvcFieldInitializationOrder() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides.kt")
+ public void testOverrides() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides_inlineClass.kt")
+ public void testOverrides_inlineClass() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides_inlineClass.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides_typeParameters.kt")
+ public void testOverrides_typeParameters() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides_typeParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("throwingMFVCReassignments.kt")
+ public void testThrowingMFVCReassignments() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("tryExpressions.kt")
+ public void testTryExpressions() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/tryExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("visibility.kt")
+ public void testVisibility() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/visibility.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
}
@Nested
diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
index ce3303b..c4bd88a 100644
--- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
+++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBytecodeTextTestGenerated.java
@@ -8,6 +8,7 @@
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TargetBackend;
+import org.jetbrains.kotlin.test.utils.TransformersFunctions;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@@ -5780,6 +5781,58 @@
}
@Nested
+ @TestMetadata("compiler/testData/codegen/bytecodeText/valueClasses")
+ @TestDataPath("$PROJECT_ROOT")
+ public class ValueClasses {
+ @Test
+ public void testAllFilesPresentInValueClasses() throws Exception {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeText/valueClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
+ }
+
+ @Test
+ @TestMetadata("conditionalExpressions.kt")
+ public void testConditionalExpressions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/conditionalExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("equalsBoxTest.kt")
+ public void testEqualsBoxTest() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/equalsBoxTest.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcDeclaration.kt")
+ public void testMfvcDeclaration() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcReassignments.kt")
+ public void testMfvcReassignments() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/mfvcReassignments.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("passingMFVC2Functions.kt")
+ public void testPassingMFVC2Functions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/passingMFVC2Functions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("regularClassWithMFVC.kt")
+ public void testRegularClassWithMFVC() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/regularClassWithMFVC.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("tryExpressions.kt")
+ public void testTryExpressions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/tryExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/testData/codegen/bytecodeText/varargs")
@TestDataPath("$PROJECT_ROOT")
public class Varargs {
diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt
index b3a89cf..caf15c4 100644
--- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt
+++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/AnnotationCodegen.kt
@@ -346,6 +346,7 @@
declaration.origin.isSynthetic ->
true
declaration.origin == JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD ||
+ declaration.origin == JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD ||
declaration.origin == IrDeclarationOrigin.GENERATED_SAM_IMPLEMENTATION ->
true
else ->
diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
index 3e2253e..cae3d0a 100644
--- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
+++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt
@@ -294,6 +294,7 @@
(irFunction is IrConstructor && irFunction.parentAsClass.isAnonymousObject) ||
// TODO: Implement this as a lowering, so that we can more easily exclude generated methods.
irFunction.origin == JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD ||
+ irFunction.origin == JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD ||
// Although these are accessible from Java, the functions they bridge to already have the assertions.
irFunction.origin == IrDeclarationOrigin.BRIDGE_SPECIAL ||
irFunction.origin == JvmLoweredDeclarationOrigin.SUPER_INTERFACE_METHOD_BRIDGE ||
diff --git a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/intrinsics/HashCode.kt b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/intrinsics/HashCode.kt
index 4233c25..1333b22 100644
--- a/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/intrinsics/HashCode.kt
+++ b/compiler/ir/backend.jvm/codegen/src/org/jetbrains/kotlin/backend/jvm/intrinsics/HashCode.kt
@@ -37,9 +37,10 @@
val target = context.state.target
when {
irFunction.origin == JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD ||
+ irFunction.origin == JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD ||
irFunction.origin == IrDeclarationOrigin.GENERATED_DATA_CLASS_MEMBER ||
irFunction.origin == IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER -> {
- // TODO generate or lower IR for data class / inline class 'hashCode'?
+ // TODO generate or lower IR for data class / value class 'hashCode'?
DescriptorAsmUtil.genHashCode(mv, mv, receiverType, target)
}
target >= JvmTarget.JVM_1_8 && AsmUtil.isPrimitive(receiverJvmType) -> {
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
index d7ffe0f..ca0fbf7 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/JvmLower.kt
@@ -309,6 +309,7 @@
forLoopsPhase,
collectionStubMethodLowering,
singleAbstractMethodPhase,
+ jvmMultiFieldValueClassPhase,
jvmInlineClassPhase,
tailrecPhase,
// makePatchParentsPhase(),
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt
index eb09972..a1cd62c 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt
@@ -11,9 +11,9 @@
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irNot
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
-import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
-import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
-import org.jetbrains.kotlin.backend.jvm.SpecialBridge
+import org.jetbrains.kotlin.backend.jvm.*
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.MultiFieldValueClassMapping
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.RegularMapping
import org.jetbrains.kotlin.backend.jvm.ir.*
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
@@ -32,6 +32,7 @@
import org.jetbrains.kotlin.utils.SmartList
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.Method
+import kotlin.collections.set
/*
* Generate bridge methods to fix virtual dispatch after type erasure and to adapt Kotlin collections to
@@ -112,7 +113,7 @@
::BridgeLowering,
name = "Bridge",
description = "Generate bridges",
- prerequisite = setOf(jvmInlineClassPhase)
+ prerequisite = setOf(jvmInlineClassPhase, jvmMultiFieldValueClassPhase, inheritedDefaultMethodsOnClassesPhase)
)
internal class BridgeLowering(val context: JvmBackendContext) : FileLoweringPass, IrElementTransformerVoid() {
@@ -234,6 +235,7 @@
irClass.declarations.remove(irFunction)
irClass.addAbstractMethodStub(irFunction)
}
+
irFunction.modality != Modality.FINAL -> {
// If we have a non-abstract, non-final fake-override we need to put in an additional bridge which uses
// INVOKESPECIAL to call the special bridge implementation in the superclass.
@@ -262,6 +264,7 @@
irClass.addSpecialBridge(superBridge, superTarget)
}
}
+
else -> {
// If the method is final,
// then we will not override it in a subclass and we do not need to generate an additional stub method.
@@ -431,6 +434,11 @@
}.apply {
copyAttributes(target)
copyParametersWithErasure(this@addBridge, bridge.overridden)
+ with(context.multiFieldValueClassReplacements) {
+ bindingNewFunctionToParameterTemplateStructure[bridge.overridden]?.also {
+ bindingNewFunctionToParameterTemplateStructure[this@apply] = it
+ }
+ }
// If target is a throwing stub, bridge also should just throw UnsupportedOperationException.
// Otherwise, it might throw ClassCastException when downcasting bridge argument to expected type.
@@ -486,6 +494,11 @@
context.functionsWithSpecialBridges.add(target)
copyParametersWithErasure(this@addSpecialBridge, specialBridge.overridden, specialBridge.substitutedParameterTypes)
+ with(context.multiFieldValueClassReplacements) {
+ bindingNewFunctionToParameterTemplateStructure[specialBridge.overridden]?.also {
+ bindingNewFunctionToParameterTemplateStructure[this@apply] = it
+ }
+ }
body = context.createIrBuilder(symbol, startOffset, endOffset).irBlockBody {
specialBridge.methodInfo?.let { info ->
@@ -610,22 +623,132 @@
target: IrSimpleFunction,
superQualifierSymbol: IrClassSymbol? = null
) =
- irCastIfNeeded(
- irCall(target, origin = IrStatementOrigin.BRIDGE_DELEGATION, superQualifierSymbol = superQualifierSymbol).apply {
- for ((param, targetParam) in bridge.explicitParameters.zip(target.explicitParameters)) {
- putArgument(
- targetParam,
- irGet(param).let { argument ->
- if (param == bridge.dispatchReceiverParameter)
- argument
- else
- irCastIfNeeded(argument, targetParam.type.upperBound)
- }
- )
+ irCastIfNeeded(irBlock {
+ +irReturn(irCall(target, origin = IrStatementOrigin.BRIDGE_DELEGATION, superQualifierSymbol = superQualifierSymbol).apply {
+
+ val targetStructure = getStructure(target)
+ val bridgeStructure = getStructure(bridge)
+
+ if (targetStructure == null && bridgeStructure == null) {
+ for ((param, targetParam) in bridge.explicitParameters.zip(target.explicitParameters)) {
+ putArgument(targetParam, irGetOrCast(bridge, param, targetParam))
+ }
+ } else {
+ this@irBlock.addBoxedAndUnboxedMfvcArguments(targetStructure, bridgeStructure, target, bridge, this)
}
- },
- bridge.returnType.upperBound
- )
+ })
+ }.unwrapBlock(), bridge.returnType.upperBound)
+
+ private fun getStructure(function: IrSimpleFunction): List<MemoizedMultiFieldValueClassReplacements.RemappedParameter>? {
+ val mfvcOrOriginal = context.inlineClassReplacements.originalFunctionForMethodReplacement[function]
+ ?: context.inlineClassReplacements.originalFunctionForStaticReplacement[function]
+ ?: function
+ val structure = context.multiFieldValueClassReplacements
+ .bindingNewFunctionToParameterTemplateStructure[mfvcOrOriginal] ?: return null
+ require(structure.sumOf { it.valueParameters.size } == function.explicitParametersCount) {
+ "Bad parameters structure: $structure"
+ }
+
+ return structure
+ }
+
+ private fun IrBlockBuilder.addBoxedAndUnboxedMfvcArguments(
+ targetStructure: List<MemoizedMultiFieldValueClassReplacements.RemappedParameter>?,
+ bridgeStructure: List<MemoizedMultiFieldValueClassReplacements.RemappedParameter>?,
+ target: IrSimpleFunction,
+ bridge: IrSimpleFunction,
+ irCall: IrCall
+ ) {
+ require(
+ targetStructure == null || bridgeStructure == null ||
+ bridgeStructure.size == targetStructure.size &&
+ (targetStructure zip bridgeStructure).none { (targetParameter, bridgeParameter) ->
+ targetParameter is MultiFieldValueClassMapping && bridgeParameter is MultiFieldValueClassMapping &&
+ targetParameter.rootMfvcNode != bridgeParameter.rootMfvcNode
+ }
+ ) { "Incompatible structures: $bridgeStructure and $targetStructure" }
+
+ val targetExplicitParameters = target.explicitParameters
+ val bridgeExplicitParameters = bridge.explicitParameters
+ var targetIndex = 0
+ var bridgeIndex = 0
+ var structureIndex = 0
+ while (targetIndex < targetExplicitParameters.size && bridgeIndex < bridgeExplicitParameters.size) {
+ val targetRemappedParameter = targetStructure?.get(structureIndex)
+ val bridgeRemappedParameter = bridgeStructure?.get(structureIndex)
+ when (targetRemappedParameter) {
+ is MultiFieldValueClassMapping -> when (bridgeRemappedParameter) {
+ is MultiFieldValueClassMapping -> {
+ require(bridgeRemappedParameter.rootMfvcNode == targetRemappedParameter.rootMfvcNode) {
+ "Incompatible parameters: $bridgeRemappedParameter, $targetRemappedParameter"
+ }
+ repeat(bridgeRemappedParameter.valueParameters.size) {
+ val bridgeParameter = bridgeExplicitParameters[bridgeIndex++]
+ val targetParameter = targetExplicitParameters[targetIndex++]
+ irCall.putArgument(targetParameter, irGetOrCast(bridge, bridgeParameter, targetParameter))
+ }
+ }
+
+ is RegularMapping, null -> {
+ val bridgeParameter = bridgeExplicitParameters[bridgeIndex++]
+ val targetParameterType = targetRemappedParameter.rootMfvcNode.mfvc.defaultType
+ val instance = targetRemappedParameter.rootMfvcNode.createInstanceFromBox(
+ this,
+ irCastIfNeeded(irGet(bridgeParameter), targetParameterType),
+ getOptimizedPublicAccess(target, targetRemappedParameter.rootMfvcNode.mfvc)
+ ) { error("Not applicable") }
+ val newArguments = instance.makeFlattenedGetterExpressions(this)
+ for (newArgument in newArguments) {
+ irCall.putArgument(targetExplicitParameters[targetIndex++], newArgument)
+ }
+ }
+ }
+
+ is RegularMapping, null -> {
+ val targetParameter = targetExplicitParameters[targetIndex]
+ when (bridgeRemappedParameter) {
+ is MultiFieldValueClassMapping -> {
+ val valueArguments = List(bridgeRemappedParameter.rootMfvcNode.leavesCount) {
+ irGet(bridgeExplicitParameters[bridgeIndex++])
+ }
+ val boxCall = bridgeRemappedParameter.rootMfvcNode.makeBoxedExpression(
+ this, bridgeRemappedParameter.typeArguments, valueArguments
+ )
+ irCall.putArgument(targetParameter, irCastIfNeeded(boxCall, targetParameter.type.upperBound))
+ }
+
+ is RegularMapping, null -> {
+ val bridgeParameter = bridgeExplicitParameters[bridgeIndex++]
+ irCall.putArgument(targetParameter, irGetOrCast(bridge, bridgeParameter, targetParameter))
+ }
+ }
+ targetIndex++
+ }
+ }
+ structureIndex++
+ }
+ require(targetIndex == targetExplicitParameters.size && bridgeIndex == bridgeExplicitParameters.size) {
+ "Incorrect bridge:\n${bridge.dump()}\n\nfor target\n${target.dump()}"
+ }
+ require((targetStructure == null || structureIndex == targetStructure.size)) {
+ "Invalid structure index $structureIndex for $targetStructure"
+ }
+ require((bridgeStructure == null || structureIndex == bridgeStructure.size)) {
+ "Invalid structure index $structureIndex for $bridgeStructure"
+ }
+ }
+
+ private fun IrBuilderWithScope.irGetOrCast(
+ bridge: IrSimpleFunction,
+ bridgeParameter: IrValueParameter,
+ targetParameter: IrValueParameter
+ ) =
+ irGet(bridgeParameter).let { argument ->
+ if (bridgeParameter == bridge.dispatchReceiverParameter)
+ argument
+ else
+ irCastIfNeeded(argument, targetParameter.type.upperBound)
+ }
private fun IrBuilderWithScope.irCastIfNeeded(expression: IrExpression, to: IrType): IrExpression =
if (expression.type == to || to.isAny() || to.isNullableAny()) expression else irImplicitCast(expression, to)
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
index 120cae2..c82836a 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt
@@ -12,7 +12,11 @@
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.MultiFieldValueClassMapping
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.RegularMapping
+import org.jetbrains.kotlin.backend.jvm.fullValueParameterList
import org.jetbrains.kotlin.backend.jvm.ir.*
+import org.jetbrains.kotlin.backend.jvm.makeBoxedExpression
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
@@ -91,6 +95,7 @@
val superClassType = superMethod.parentAsClass.defaultType
val defaultImplFun = context.cachedDeclarations.getDefaultImplsFunction(superMethod)
val classStartOffset = classOverride.parentAsClass.startOffset
+ val backendContext = context
context.createIrBuilder(irFunction.symbol, classStartOffset, classStartOffset).apply {
irFunction.body = irBlockBody {
+irReturn(
@@ -100,15 +105,50 @@
}
passTypeArgumentsFrom(irFunction, offset = superMethod.parentAsClass.typeParameters.size)
- var offset = 0
irFunction.dispatchReceiverParameter?.let {
- putValueArgument(
- offset++,
- irGet(it).reinterpretAsDispatchReceiverOfType(superClassType)
- )
+ putValueArgument(0, irGet(it).reinterpretAsDispatchReceiverOfType(superClassType))
}
- irFunction.extensionReceiverParameter?.let { putValueArgument(offset++, irGet(it)) }
- irFunction.valueParameters.mapIndexed { i, parameter -> putValueArgument(i + offset, irGet(parameter)) }
+ val mfvcOrOriginal = backendContext.inlineClassReplacements.originalFunctionForMethodReplacement[classOverride]
+ ?: classOverride
+ val bindingNewFunctionToParameterTemplateStructure = backendContext.multiFieldValueClassReplacements
+ .bindingNewFunctionToParameterTemplateStructure
+ val structure = bindingNewFunctionToParameterTemplateStructure[mfvcOrOriginal]?.let { structure ->
+ require(structure.sumOf { it.valueParameters.size } == classOverride.explicitParametersCount) {
+ "Bad parameters structure: $structure"
+ }
+ if (defaultImplFun.explicitParametersCount == irFunction.explicitParametersCount) {
+ null
+ } else {
+ require(structure.size == defaultImplFun.explicitParametersCount) { "Bad parameters structure: $structure" }
+ structure
+ }
+ }
+ require(structure == null || structure.first() is RegularMapping) {
+ "Dispatch receiver for method replacement cannot be flattened"
+ }
+ val sourceFullValueParameterList = irFunction.fullValueParameterList
+ if (structure == null) {
+ for ((index, parameter) in sourceFullValueParameterList.withIndex()) {
+ putValueArgument(1 + index, irGet(parameter))
+ }
+ } else {
+ var flattenedIndex = 0
+ for (i in 1 until structure.size) {
+ when (val remappedParameter = structure[i]) {
+ is MultiFieldValueClassMapping -> {
+ val valueArguments = remappedParameter.valueParameters.indices.map {
+ irGet(sourceFullValueParameterList[flattenedIndex++])
+ }
+ val boxedExpression = remappedParameter.rootMfvcNode.makeBoxedExpression(
+ this@irBlockBody, remappedParameter.typeArguments, valueArguments
+ )
+ putValueArgument(i, boxedExpression)
+ }
+
+ is RegularMapping -> putValueArgument(i, irGet(sourceFullValueParameterList[flattenedIndex++]))
+ }
+ }
+ }
}
)
}
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmDefaultConstructorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmDefaultConstructorLowering.kt
index f7abcb4..75f87f0a 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmDefaultConstructorLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmDefaultConstructorLowering.kt
@@ -47,7 +47,7 @@
if (DescriptorVisibilities.isPrivate(primaryConstructor.visibility))
return
- if (primaryConstructor.hasMangledParameters)
+ if (primaryConstructor.hasMangledParameters())
return
if (primaryConstructor.valueParameters.isEmpty() || !primaryConstructor.valueParameters.all { it.hasDefaultValue() })
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
index 500a8c6..7855228 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmInlineClassLowering.kt
@@ -9,8 +9,6 @@
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
import org.jetbrains.kotlin.backend.common.lower.loops.forLoopsPhase
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
-import org.jetbrains.kotlin.backend.common.pop
-import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.backend.jvm.*
import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
import org.jetbrains.kotlin.builtins.StandardNames
@@ -24,6 +22,7 @@
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
+import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.transformStatement
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classOrNull
@@ -31,7 +30,6 @@
import org.jetbrains.kotlin.ir.types.makeNotNull
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
-import org.jetbrains.kotlin.load.java.JvmAbi
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.JVM_INLINE_ANNOTATION_FQ_NAME
@@ -43,7 +41,9 @@
// Standard library replacements are done on the unmangled names for UInt and ULong classes.
// Collection stubs may require mangling by inline class rules.
// SAM wrappers may require mangling for fun interfaces with inline class parameters
- prerequisite = setOf(forLoopsPhase, jvmBuiltInsPhase, collectionStubMethodLowering, singleAbstractMethodPhase),
+ prerequisite = setOf(
+ forLoopsPhase, jvmBuiltInsPhase, collectionStubMethodLowering, singleAbstractMethodPhase, jvmMultiFieldValueClassPhase
+ ),
)
/**
@@ -58,73 +58,15 @@
override val replacements: MemoizedValueClassAbstractReplacements
get() = context.inlineClassReplacements
- override fun IrClass.isSpecificLoweringLogicApplicable(): Boolean = isSingleFieldValueClass
+ private val valueMap = mutableMapOf<IrValueSymbol, IrValueDeclaration>()
- override fun IrFunction.isSpecificFieldGetter(): Boolean = isInlineClassFieldGetter
-
- override fun addJvmInlineAnnotation(valueClass: IrClass) {
- if (valueClass.hasAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)) return
- val constructor = context.ir.symbols.jvmInlineAnnotation.constructors.first()
- valueClass.annotations = valueClass.annotations + IrConstructorCallImpl.fromSymbolOwner(
- constructor.owner.returnType,
- constructor
- )
+ override fun addBindingsFor(original: IrFunction, replacement: IrFunction) {
+ for ((param, newParam) in original.explicitParameters.zip(replacement.explicitParameters)) {
+ valueMap[param.symbol] = newParam
+ }
}
- override fun transformSimpleFunctionFlat(function: IrSimpleFunction, replacement: IrSimpleFunction): List<IrDeclaration> {
- replacement.valueParameters.forEach {
- it.transformChildrenVoid()
- it.defaultValue?.patchDeclarationParents(replacement)
- }
- allScopes.push(createScope(function))
- replacement.body = function.body?.transform(this, null)?.patchDeclarationParents(replacement)
- allScopes.pop()
- replacement.copyAttributes(function)
-
- // Don't create a wrapper for functions which are only used in an unboxed context
- if (function.overriddenSymbols.isEmpty() || replacement.dispatchReceiverParameter != null)
- return listOf(replacement)
-
- val bridgeFunction = createBridgeDeclaration(
- function,
- when {
- // If the original function has signature which need mangling we still need to replace it with a mangled version.
- (!function.isFakeOverride || function.findInterfaceImplementation(context.state.jvmDefaultMode) != null) &&
- function.signatureRequiresMangling() ->
- replacement.name
- // Since we remove the corresponding property symbol from the bridge we need to resolve getter/setter
- // names at this point.
- replacement.isGetter ->
- Name.identifier(JvmAbi.getterName(replacement.correspondingPropertySymbol!!.owner.name.asString()))
- replacement.isSetter ->
- Name.identifier(JvmAbi.setterName(replacement.correspondingPropertySymbol!!.owner.name.asString()))
- else ->
- function.name
- }
- )
-
- // Update the overridden symbols to point to their inline class replacements
- bridgeFunction.overriddenSymbols = replacement.overriddenSymbols
-
- // Replace the function body with a wrapper
- if (bridgeFunction.isFakeOverride && bridgeFunction.parentAsClass.isSingleFieldValueClass) {
- // Fake overrides redirect from the replacement to the original function, which is in turn replaced during interfacePhase.
- createBridgeBody(replacement, bridgeFunction)
- } else {
- createBridgeBody(bridgeFunction, replacement)
- }
-
- return listOf(replacement, bridgeFunction)
- }
-
- private fun IrSimpleFunction.signatureRequiresMangling() =
- fullValueParameterList.any { it.type.requiresMangling } ||
- context.state.functionsWithInlineClassReturnTypesMangled && returnType.requiresMangling
-
- // We may need to add a bridge method for inline class methods with static replacements. Ideally, we'd do this in BridgeLowering,
- // but unfortunately this is a special case in the old backend. The bridge method is not marked as such and does not follow the normal
- // visibility rules for bridge methods.
- private fun createBridgeDeclaration(source: IrSimpleFunction, mangledName: Name) =
+ override fun createBridgeDeclaration(source: IrSimpleFunction, replacement: IrSimpleFunction, mangledName: Name): IrSimpleFunction =
context.irFactory.buildFun {
updateFrom(source)
name = mangledName
@@ -139,7 +81,59 @@
copyAttributes(source)
}
- private fun createBridgeBody(source: IrSimpleFunction, target: IrSimpleFunction) {
+ override fun IrClass.isSpecificLoweringLogicApplicable(): Boolean = isSingleFieldValueClass
+
+ override val specificMangle: SpecificMangle
+ get() = SpecificMangle.Inline
+
+ override fun visitClassNew(declaration: IrClass): IrStatement {
+ // The arguments to the primary constructor are in scope in the initializers of IrFields.
+
+ declaration.primaryConstructor?.let {
+ replacements.getReplacementFunction(it)?.let { replacement -> addBindingsFor(it, replacement) }
+ }
+
+ declaration.transformDeclarationsFlat { memberDeclaration ->
+ if (memberDeclaration is IrFunction) {
+ withinScope(memberDeclaration) {
+ transformFunctionFlat(memberDeclaration)
+ }
+ } else {
+ memberDeclaration.accept(this, null)
+ null
+ }
+ }
+
+ if (declaration.isSpecificLoweringLogicApplicable()) {
+ handleSpecificNewClass(declaration)
+ }
+
+ return declaration
+ }
+
+ override fun handleSpecificNewClass(declaration: IrClass) {
+ val irConstructor = declaration.primaryConstructor!!
+ // The field getter is used by reflection and cannot be removed here unless it is internal.
+ declaration.declarations.removeIf {
+ it == irConstructor || (it is IrFunction && it.isInlineClassFieldGetter && !it.visibility.isPublicAPI)
+ }
+ buildPrimaryInlineClassConstructor(declaration, irConstructor)
+ buildBoxFunction(declaration)
+ buildUnboxFunction(declaration)
+ buildSpecializedEqualsMethod(declaration)
+ addJvmInlineAnnotation(declaration)
+ }
+
+ fun addJvmInlineAnnotation(valueClass: IrClass) {
+ if (valueClass.hasAnnotation(JVM_INLINE_ANNOTATION_FQ_NAME)) return
+ val constructor = context.ir.symbols.jvmInlineAnnotation.constructors.first()
+ valueClass.annotations = valueClass.annotations + IrConstructorCallImpl.fromSymbolOwner(
+ constructor.owner.returnType,
+ constructor
+ )
+ }
+
+ override fun createBridgeBody(source: IrSimpleFunction, target: IrSimpleFunction, original: IrFunction, inverted: Boolean) {
source.body = context.createIrBuilder(source.symbol, source.startOffset, source.endOffset).run {
irExprBody(irCall(target).apply {
passTypeArgumentsFrom(source)
@@ -153,7 +147,7 @@
// Secondary constructors for boxed types get translated to static functions returning
// unboxed arguments. We remove the original constructor.
// Primary constructors' case is handled at the start of transformFunctionFlat
- override fun transformConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration> {
+ override fun transformSecondaryConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration> {
replacement.valueParameters.forEach { it.transformChildrenVoid() }
replacement.body = context.createIrBuilder(replacement.symbol, replacement.startOffset, replacement.endOffset).irBlockBody(
replacement
@@ -211,12 +205,6 @@
return listOf(replacement)
}
- private fun typedArgumentList(function: IrFunction, expression: IrMemberAccessExpression<*>) =
- listOfNotNull(
- function.dispatchReceiverParameter?.let { it to expression.dispatchReceiver },
- function.extensionReceiverParameter?.let { it to expression.extensionReceiver }
- ) + function.valueParameters.map { it to expression.getValueArgument(it.index) }
-
private fun IrMemberAccessExpression<*>.buildReplacement(
originalFunction: IrFunction,
original: IrMemberAccessExpression<*>,
@@ -287,6 +275,8 @@
private fun IrExpression.coerceToUnboxed() =
coerceInlineClasses(this, this.type, this.type.unboxInlineClass())
+ override fun keepOldFunctionInsteadOfNew(function: IrFunction): Boolean = false
+
// Precondition: left has an inline class type, but may not be unboxed
private fun IrBuilderWithScope.specializeEqualsCall(left: IrExpression, right: IrExpression): IrExpression? {
// There's already special handling for null-comparisons in the Equals intrinsic.
@@ -363,6 +353,7 @@
.specializeEqualsCall(expression.getValueArgument(0)!!, expression.getValueArgument(1)!!)
?: expression
}
+
else ->
super.visitCall(expression)
}
@@ -420,7 +411,7 @@
return super.visitSetValue(expression)
}
- override fun buildPrimaryValueClassConstructor(valueClass: IrClass, irConstructor: IrConstructor) {
+ fun buildPrimaryInlineClassConstructor(valueClass: IrClass, irConstructor: IrConstructor) {
// Add the default primary constructor
valueClass.addConstructor {
updateFrom(irConstructor)
@@ -465,7 +456,7 @@
valueClass.declarations += function
}
- override fun buildBoxFunction(valueClass: IrClass) {
+ fun buildBoxFunction(valueClass: IrClass) {
val function = context.inlineClassReplacements.getBoxFunction(valueClass)
with(context.createIrBuilder(function.symbol)) {
function.body = irExprBody(
@@ -478,10 +469,6 @@
valueClass.declarations += function
}
- override fun buildUnboxFunctions(valueClass: IrClass) {
- buildUnboxFunction(valueClass)
- }
-
private fun buildUnboxFunction(irClass: IrClass) {
val function = context.inlineClassReplacements.getUnboxFunction(irClass)
val field = getInlineClassBackingField(irClass)
@@ -494,7 +481,7 @@
irClass.declarations += function
}
- override fun buildSpecializedEqualsMethod(valueClass: IrClass) {
+ fun buildSpecializedEqualsMethod(valueClass: IrClass) {
val function = context.inlineClassReplacements.getSpecializedEqualsMethod(valueClass, context.irBuiltIns)
val left = function.valueParameters[0]
val right = function.valueParameters[1]
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
index 3342d36..28d7122 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmMultiFieldValueClassLowering.kt
@@ -5,45 +5,646 @@
package org.jetbrains.kotlin.backend.jvm.lower
-import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
-import org.jetbrains.kotlin.backend.jvm.MemoizedValueClassAbstractReplacements
-import org.jetbrains.kotlin.backend.jvm.isMultiFieldValueClassFieldGetter
+import org.jetbrains.kotlin.backend.common.lower.MethodsFromAnyGeneratorForLowerings.Companion.isEquals
+import org.jetbrains.kotlin.backend.common.lower.MethodsFromAnyGeneratorForLowerings.Companion.isToString
+import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
+import org.jetbrains.kotlin.backend.common.lower.irCatch
+import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
+import org.jetbrains.kotlin.backend.common.pop
+import org.jetbrains.kotlin.backend.common.push
+import org.jetbrains.kotlin.backend.jvm.*
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.MultiFieldValueClassMapping
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.RegularMapping
+import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
+import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
+import org.jetbrains.kotlin.backend.jvm.lower.BlockOrBody.Block
+import org.jetbrains.kotlin.ir.IrElement
+import org.jetbrains.kotlin.ir.IrStatement
+import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
+import org.jetbrains.kotlin.ir.builders.*
+import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
+import org.jetbrains.kotlin.ir.symbols.IrSymbol
+import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
+import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
+import org.jetbrains.kotlin.ir.transformStatement
+import org.jetbrains.kotlin.ir.types.*
+import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.ir.visitors.*
+import org.jetbrains.kotlin.name.Name
+
+val jvmMultiFieldValueClassPhase = makeIrFilePhase(
+ ::JvmMultiFieldValueClassLowering,
+ name = "Multi-field Value Classes",
+ description = "Lower multi-field value classes",
+ // Collection stubs may require mangling by multi-field value class rules.
+ // SAM wrappers may require mangling for fun interfaces with multi-field value class parameters
+ prerequisite = setOf(collectionStubMethodLowering, singleAbstractMethodPhase),
+)
private class JvmMultiFieldValueClassLowering(context: JvmBackendContext) : JvmValueClassAbstractLowering(context) {
- override val replacements: MemoizedValueClassAbstractReplacements
+ private sealed class MfvcNodeInstanceAccessor {
+ abstract val instance: MfvcNodeInstance
+ abstract operator fun get(name: Name): MfvcNodeInstanceAccessor?
+ data class Getter(override val instance: MfvcNodeInstance) : MfvcNodeInstanceAccessor() {
+ override operator fun get(name: Name): Getter? = instance[name]?.let { Getter(it) }
+ }
+
+ data class Setter(override val instance: MfvcNodeInstance, val values: List<IrExpression>) : MfvcNodeInstanceAccessor() {
+ override operator fun get(name: Name): Setter? = instance[name]?.let {
+ val indices = (instance as MfvcNodeWithSubnodes).subnodeIndices[it.node]!!
+ Setter(it, values.slice(indices))
+ }
+ }
+ }
+
+ /**
+ * The class is used to get replacing expression and MFVC instance if present for the given old value declaration.
+ */
+ private inner class ValueDeclarationRemapper {
+
+ private val expression2MfvcNodeInstanceAccessor = mutableMapOf<IrExpression, MfvcNodeInstanceAccessor>()
+ private val oldSymbol2MfvcNodeInstance = mutableMapOf<IrValueSymbol, ValueDeclarationMfvcNodeInstance>()
+ private val oldValueSymbol2NewValueSymbol = mutableMapOf<IrValueSymbol, IrValueSymbol>()
+
+ /**
+ * Registers one-to-one replacement
+ */
+ fun registerReplacement(original: IrValueDeclaration, replacement: IrValueDeclaration) {
+ oldValueSymbol2NewValueSymbol[original.symbol] = replacement.symbol
+ }
+
+ /**
+ * Registers replacement of a simple expression with flattened MFVC instance
+ */
+ fun registerReplacement(original: IrValueDeclaration, replacement: ValueDeclarationMfvcNodeInstance) {
+ oldSymbol2MfvcNodeInstance[original.symbol] = replacement
+ }
+
+ fun IrBuilderWithScope.makeReplacement(expression: IrGetValue): IrExpression? {
+ oldValueSymbol2NewValueSymbol[expression.symbol]?.let { return irGet(it.owner) }
+ val instance = oldSymbol2MfvcNodeInstance[expression.symbol] ?: return null
+ val res = instance.makeGetterExpression(this)
+ expression2MfvcNodeInstanceAccessor[res] = MfvcNodeInstanceAccessor.Getter(instance)
+ return res
+ }
+
+ private fun splitExpressions(expressions: List<IrExpression>): Pair<List<IrExpression>, List<IrExpression>> {
+ val repeatable = expressions.takeLastWhile { it.isRepeatableGetter() }
+ return expressions.subList(0, expressions.size - repeatable.size) to repeatable
+ }
+
+ fun IrBlockBuilder.addReplacement(expression: IrSetValue, safe: Boolean): IrExpression? {
+ oldValueSymbol2NewValueSymbol[expression.symbol]?.let { return irSet(it.owner, expression.value) }
+ val instance = oldSymbol2MfvcNodeInstance[expression.symbol] ?: return null
+ val values: List<IrExpression> = makeFlattenedExpressionsWithGivenSafety(instance.node, safe, expression.value)
+ val setterExpressions = instance.makeSetterExpressions(this, values)
+ expression2MfvcNodeInstanceAccessor[setterExpressions] = MfvcNodeInstanceAccessor.Setter(instance, values)
+ +setterExpressions
+ return setterExpressions
+ }
+
+ /**
+ * @param safe whether protect from partial (because of a potential exception) initialization or not
+ */
+ private fun IrBlockBuilder.makeFlattenedExpressionsWithGivenSafety(
+ node: MfvcNode, safe: Boolean, expression: IrExpression
+ ) = if (safe) {
+ val (forVariables, rest) = splitExpressions(flattenExpression(expression))
+ val variables = when (node) {
+ is LeafMfvcNode -> forVariables.map { expr -> irTemporary(expr) }
+ is MfvcNodeWithSubnodes -> forVariables.zip(node.leaves) { expr, leaf ->
+ irTemporary(expr, nameHint = leaf.fullFieldName.asString())
+ }
+ }
+ variables.map { irGet(it) } + rest
+ } else {
+ flattenExpression(expression)
+ }
+
+ private val IrFieldAccessExpression.field: IrField
+ get() = this.symbol.owner
+
+ fun IrBlockBuilder.addReplacement(expression: IrGetField): IrExpression? {
+ val property = expression.field.property ?: return null
+ expression.receiver?.get(this, property.name)?.let { +it; return it }
+ val node = replacements.getMfvcPropertyNode(property) ?: return null
+ val typeArguments = makeTypeArgumentsFromField(expression)
+ val instance: ReceiverBasedMfvcNodeInstance =
+ node.createInstanceFromBox(this, typeArguments, expression.receiver, AccessType.AlwaysPrivate, ::variablesSaver)
+ val getterExpression = instance.makeGetterExpression(this)
+ expression2MfvcNodeInstanceAccessor[getterExpression] = MfvcNodeInstanceAccessor.Getter(instance)
+ +getterExpression
+ return getterExpression
+ }
+
+ fun IrBlockBuilder.addReplacement(expression: IrSetField, safe: Boolean): IrExpression? {
+ val property = expression.field.property ?: return null
+ expression.receiver?.get(this, property.name)?.let { +it; return it }
+ val node = replacements.getMfvcPropertyNode(property) ?: return null
+ val typeArguments = makeTypeArgumentsFromField(expression)
+ val instance: ReceiverBasedMfvcNodeInstance =
+ node.createInstanceFromBox(this, typeArguments, expression.receiver, AccessType.AlwaysPrivate, ::variablesSaver)
+ val values: List<IrExpression> = makeFlattenedExpressionsWithGivenSafety(node, safe, expression.value)
+ val setterExpressions = instance.makeSetterExpressions(this, values)
+ expression2MfvcNodeInstanceAccessor[setterExpressions] = MfvcNodeInstanceAccessor.Setter(instance, values)
+ +setterExpressions
+ return setterExpressions
+ }
+
+ fun IrBlockBuilder.addReplacement(expression: IrCall): IrExpression? {
+ val function = expression.symbol.owner
+ val property = function.property?.takeIf { function.isGetter } ?: return null
+ val dispatchReceiver = expression.dispatchReceiver
+ dispatchReceiver?.get(this, property.name)?.let { +it; return it }
+ val node = replacements.getMfvcPropertyNode(property) ?: return null
+ val typeArguments = makeTypeArgumentsFromFunction(expression)
+ // Optimization: pure function access to leaf can be replaced with field access if the field itself is accessible
+ val accessType = when {
+ !node.hasPureUnboxMethod -> AccessType.AlwaysPublic
+ dispatchReceiver == null -> AccessType.PrivateWhenNoBox
+ else -> getOptimizedPublicAccess(dispatchReceiver.type.erasedUpperBound)
+ }
+ val instance: ReceiverBasedMfvcNodeInstance =
+ node.createInstanceFromBox(this, typeArguments, dispatchReceiver, accessType, ::variablesSaver)
+ val getterExpression = instance.makeGetterExpression(this)
+ expression2MfvcNodeInstanceAccessor[getterExpression] = MfvcNodeInstanceAccessor.Getter(instance)
+ +getterExpression
+ return getterExpression
+ }
+
+ private fun makeTypeArgumentsFromField(expression: IrFieldAccessExpression) = buildMap {
+ val field = expression.symbol.owner
+ putAll(makeTypeArgumentsFromType(field.type as IrSimpleType))
+ expression.receiver?.type?.let { putAll(makeTypeArgumentsFromType(it as IrSimpleType)) }
+ }
+
+ private fun makeTypeArgumentsFromFunction(expression: IrCall) = buildMap {
+ val function = expression.symbol.owner
+ putAll(makeTypeArgumentsFromType(function.returnType as IrSimpleType))
+ expression.dispatchReceiver?.type?.let { putAll(makeTypeArgumentsFromType(it as IrSimpleType)) }
+ }
+
+ private inline fun IrBuilderWithScope.irContainer(oldBlock: IrContainerExpression, builder: IrBlockBuilder.() -> Unit) =
+ oldBlock.run {
+ if (isTransparentScope) irComposite(startOffset, endOffset, origin, body = builder)
+ else irBlock(startOffset, endOffset, origin, body = builder)
+ }
+
+ private fun IrBuilderWithScope.handleSavedExpression(
+ expression: IrExpression, handler: IrBuilderWithScope.(accessor: MfvcNodeInstanceAccessor) -> IrExpression?
+ ): IrExpression? {
+ val accessor = expression2MfvcNodeInstanceAccessor[expression]
+ return when {
+ accessor != null -> handler(accessor) ?: return null
+ expression !is IrContainerExpression -> null
+ else -> when (val lastExpression = expression.statements.lastOrNull()) {
+ is IrExpression -> irContainer(expression) {
+ val inner = handleSavedExpression(lastExpression, handler) ?: return null
+ for (oldStatement in expression.statements.dropLast(1)) {
+ +oldStatement
+ }
+ +inner
+ }
+
+ else -> null
+ }
+ }
+ }
+
+ fun IrExpression.get(scope: IrBuilderWithScope, name: Name): IrExpression? = scope.handleSavedExpression(this) { accessor ->
+ val newAccessor = accessor[name] ?: return@handleSavedExpression null
+ val expression = when (newAccessor) {
+ is MfvcNodeInstanceAccessor.Getter -> newAccessor.instance.makeGetterExpression(scope)
+ is MfvcNodeInstanceAccessor.Setter -> newAccessor.instance.makeSetterExpressions(scope, newAccessor.values)
+ }
+ expression2MfvcNodeInstanceAccessor[expression] = newAccessor
+ expression
+ }
+
+ fun handleFlattenedGetterExpressions(
+ scope: IrBuilderWithScope,
+ expression: IrExpression,
+ handler: IrBlockBuilder.(values: List<IrExpression>) -> IrExpression
+ ): IrExpression? =
+ scope.handleSavedExpression(expression) { irBlock { +handler(it.instance.makeFlattenedGetterExpressions(this)) } }
+
+ fun registerReplacement(expression: IrExpression, instance: MfvcNodeInstance) {
+ expression2MfvcNodeInstanceAccessor[expression] = MfvcNodeInstanceAccessor.Getter(instance)
+ }
+ }
+
+ private val IrField.property
+ get() = correspondingPropertySymbol?.owner
+ private val IrSimpleFunction.property
+ get() = correspondingPropertySymbol?.owner
+
+ private val valueDeclarationsRemapper = ValueDeclarationRemapper()
+
+ override val replacements
get() = context.multiFieldValueClassReplacements
override fun IrClass.isSpecificLoweringLogicApplicable(): Boolean = isMultiFieldValueClass
- override fun IrFunction.isSpecificFieldGetter(): Boolean = isMultiFieldValueClassFieldGetter
+ override val specificMangle: SpecificMangle
+ get() = SpecificMangle.MultiField
- override fun transformSimpleFunctionFlat(function: IrSimpleFunction, replacement: IrSimpleFunction): List<IrDeclaration> {
- TODO()
+ override fun keepOldFunctionInsteadOfNew(function: IrFunction): Boolean =
+ function.isMultiFieldValueClassFieldGetter
+
+ private val variablesToAdd = mutableMapOf<IrDeclarationParent, MutableSet<IrVariable>>()
+
+ private fun variablesSaver(variable: IrVariable) {
+ variablesToAdd.getOrPut(variable.parent) { mutableSetOf() }.add(variable)
}
- override fun buildPrimaryValueClassConstructor(valueClass: IrClass, irConstructor: IrConstructor) {
- TODO("Not yet implemented")
+ override fun visitClassNew(declaration: IrClass): IrStatement {
+
+ if (declaration.isSpecificLoweringLogicApplicable()) {
+ handleSpecificNewClass(declaration)
+ } else {
+ handleNonSpecificNewClass(declaration)
+ }
+
+ declaration.transformDeclarationsFlat { memberDeclaration ->
+ (if (memberDeclaration is IrFunction) withinScope(memberDeclaration) {
+ transformFunctionFlat(memberDeclaration)
+ } else {
+ memberDeclaration.accept(this, null)
+ null
+ }).also { declarations ->
+ for (replacingDeclaration in declarations ?: listOf(memberDeclaration)) {
+ when (replacingDeclaration) {
+ is IrFunction -> replacingDeclaration.body = replacingDeclaration.body?.makeBodyWithAddedVariables(
+ context, variablesToAdd[replacingDeclaration] ?: emptySet(), replacingDeclaration.symbol
+ )?.apply { removeAllExtraBoxes() }
+
+ is IrAnonymousInitializer -> replacingDeclaration.body = replacingDeclaration.body.makeBodyWithAddedVariables(
+ context, variablesToAdd[replacingDeclaration.parent] ?: emptySet(), replacingDeclaration.symbol
+ ).apply { removeAllExtraBoxes() } as IrBlockBody
+
+ else -> Unit
+ }
+ }
+ }
+ }
+
+ return declaration
}
- override fun buildBoxFunction(valueClass: IrClass) {
- TODO("Not yet implemented")
+ private fun handleNonSpecificNewClass(irClass: IrClass) {
+ irClass.primaryConstructor?.let {
+ replacements.getReplacementForRegularClassConstructor(it)?.let { replacement -> addBindingsFor(it, replacement) }
+ }
+ val properties = collectPropertiesAfterLowering(irClass)
+ val oldBackingFields = properties.mapNotNull { property -> property.backingField?.let { property to it } }.toMap()
+ val propertiesReplacement = collectRegularClassMfvcPropertiesReplacement(properties) // resets backing fields
+
+ val fieldsToRemove = propertiesReplacement.keys.mapNotNull { oldBackingFields[it] }.toSet()
+
+ val newDeclarations = makeNewDeclarationsForRegularClass(fieldsToRemove, propertiesReplacement, irClass)
+ irClass.declarations.replaceAll(newDeclarations)
}
- override fun buildUnboxFunctions(valueClass: IrClass) {
- TODO("Not yet implemented")
+ private fun collectRegularClassMfvcPropertiesReplacement(properties: LinkedHashSet<IrProperty>) =
+ LinkedHashMap<IrProperty, IntermediateMfvcNode>().apply {
+ for (property in properties) {
+ val node = replacements.getRegularClassMfvcPropertyNode(property) ?: continue
+ put(property, node)
+ }
+ }
+
+ private fun makeNewDeclarationsForRegularClass(
+ fieldsToRemove: Set<IrField>,
+ propertiesReplacement: Map<IrProperty, IntermediateMfvcNode>,
+ irClass: IrClass,
+ ) = buildList {
+ for (element in irClass.declarations) {
+ when (element) {
+ !is IrField, !in fieldsToRemove -> add(element)
+ else -> {
+ val replacement = propertiesReplacement[element.property!!]!!
+ addAll(replacement.fields!!)
+ element.initializer?.let { initializer -> add(makeInitializerReplacement(irClass, element, initializer)) }
+ }
+ }
+ }
+
+ for (node in propertiesReplacement.values) {
+ addAll(node.allInnerUnboxMethods.filter { it.parent == irClass })
+ }
}
- override fun buildSpecializedEqualsMethod(valueClass: IrClass) {
- TODO("Not yet implemented")
+ private fun makeInitializerReplacement(irClass: IrClass, element: IrField, initializer: IrExpressionBody): IrAnonymousInitializer =
+ context.irFactory.createAnonymousInitializer(
+ startOffset = UNDEFINED_OFFSET,
+ endOffset = UNDEFINED_OFFSET, origin = IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER,
+ symbol = IrAnonymousInitializerSymbolImpl()
+ ).apply {
+ parent = irClass
+ body = context.createIrBuilder(symbol).irBlockBody {
+ +irSetField(
+ irClass.thisReceiver!!.takeUnless { element.isStatic }?.let { irGet(it) }, element, initializer.expression,
+ origin = UNSAFE_MFVC_SET_ORIGIN
+ )
+ }
+ element.initializer = null
+ }
+
+ override fun handleSpecificNewClass(declaration: IrClass) {
+ val rootNode = replacements.getRootMfvcNode(declaration)!!
+ rootNode.replaceFields()
+ declaration.declarations.removeIf { it is IrSimpleFunction && it.isMultiFieldValueClassFieldGetter && it.overriddenSymbols.isEmpty() }
+ declaration.declarations += rootNode.run { allUnboxMethods + listOf(boxMethod, specializedEqualsMethod) }
+ rootNode.replacePrimaryMultiFieldValueClassConstructor()
}
- override fun addJvmInlineAnnotation(valueClass: IrClass) = Unit
+ override fun transformSecondaryConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration> {
+ for (param in replacement.valueParameters) {
+ param.transformChildrenVoid()
+ }
- @Suppress("UNUSED_PARAMETER")
- override fun transformConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration> {
- TODO()
+ allScopes.push(createScope(replacement))
+ replacement.body = context.createIrBuilder(replacement.symbol).irBlockBody {
+ val thisVar = irTemporary(irType = replacement.returnType, nameHint = "\$this")
+ constructor.body?.statements?.forEach { statement ->
+ +statement.transformStatement(object : IrElementTransformerVoid() {
+ override fun visitClass(declaration: IrClass): IrStatement = declaration
+
+ override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression {
+ val oldPrimaryConstructor = replacements.getRootMfvcNode(constructor.constructedClass)!!.oldPrimaryConstructor
+ thisVar.initializer = irCall(oldPrimaryConstructor).apply {
+ copyTypeAndValueArgumentsFrom(expression)
+ }
+ return irBlock {}
+ }
+
+ override fun visitGetValue(expression: IrGetValue): IrExpression = when (expression.symbol.owner) {
+ constructor.constructedClass.thisReceiver!! -> irGet(thisVar)
+ else -> super.visitGetValue(expression)
+ }
+
+ override fun visitReturn(expression: IrReturn): IrExpression {
+ expression.transformChildrenVoid()
+ if (expression.returnTargetSymbol != constructor.symbol)
+ return expression
+
+ return irReturn(irBlock(expression.startOffset, expression.endOffset) {
+ +expression.value
+ +irGet(thisVar)
+ })
+ }
+ })
+ }
+ +irReturn(irGet(thisVar))
+ }
+ .also { addBindingsFor(constructor, replacement) }
+ .transform(this@JvmMultiFieldValueClassLowering, null)
+ .patchDeclarationParents(replacement)
+ allScopes.pop()
+ return listOf(replacement)
+ }
+
+ private object UNSAFE_MFVC_SET_ORIGIN : IrStatementOrigin
+
+ private fun RootMfvcNode.replaceFields() {
+ mfvc.declarations.removeIf { it is IrField && (!it.isStatic || it.type.needsMfvcFlattening()) }
+ mfvc.declarations += fields
+ }
+
+ override fun createBridgeDeclaration(source: IrSimpleFunction, replacement: IrSimpleFunction, mangledName: Name): IrSimpleFunction =
+ context.irFactory.buildFun {
+ updateFrom(source)
+ name = mangledName
+ returnType = source.returnType
+ }.apply {
+ val isAnyOverriddenReplaced = replacement.overriddenSymbols.any {
+ it.owner in replacements.bindingNewFunctionToParameterTemplateStructure
+ }
+ if (source.parentAsClass.isMultiFieldValueClass && isAnyOverriddenReplaced) {
+ copyTypeParametersFrom(source) // without static type parameters
+ val substitutionMap = makeTypeParameterSubstitutionMap(source, this)
+ dispatchReceiverParameter = source.dispatchReceiverParameter!!.let { // source!!!
+ it.copyTo(this, type = it.type.substitute(substitutionMap))
+ }
+ require(replacement.dispatchReceiverParameter == null) {
+ """
+ Ambiguous receivers:
+ ${source.dispatchReceiverParameter!!.render()}
+ ${replacement.dispatchReceiverParameter!!.render()}
+ """.trimIndent()
+ }
+ require(replacement.extensionReceiverParameter == null) {
+ "Static replacement must have no extension receiver but ${replacement.extensionReceiverParameter!!.render()} found"
+ }
+ val replacementStructure = replacements.bindingNewFunctionToParameterTemplateStructure[replacement]!!
+ val offset = replacementStructure[0].valueParameters.size
+ valueParameters = replacement.valueParameters.drop(offset).map {
+ it.copyTo(this, type = it.type.substitute(substitutionMap), index = it.index - offset)
+ }
+ val bridgeStructure = replacementStructure.toMutableList().apply {
+ set(0, RegularMapping(dispatchReceiverParameter!!))
+ }
+ replacements.bindingNewFunctionToParameterTemplateStructure[this] = bridgeStructure
+ } else {
+ copyParameterDeclarationsFrom(source)
+ }
+ annotations = source.annotations
+ parent = source.parent
+ // We need to ensure that this bridge has the same attribute owner as its static inline class replacement, since this
+ // is used in [CoroutineCodegen.isStaticInlineClassReplacementDelegatingCall] to identify the bridge and avoid generating
+ // a continuation class.
+ copyAttributes(source)
+ }
+
+ override fun createBridgeBody(source: IrSimpleFunction, target: IrSimpleFunction, original: IrFunction, inverted: Boolean) {
+ allScopes.push(createScope(source))
+ source.body = context.createIrBuilder(source.symbol, source.startOffset, source.endOffset).run {
+ val sourceExplicitParameters = source.explicitParameters
+ val targetExplicitParameters = target.explicitParameters
+ irExprBody(irBlock {
+ +irReturn(irCall(target).apply {
+ passTypeArgumentsWithOffsets(target, source) { source.typeParameters[it].defaultType }
+ val sourceStructure: List<RemappedParameter>? = replacements.bindingNewFunctionToParameterTemplateStructure[source]
+ val targetStructure: List<RemappedParameter>? = replacements.bindingNewFunctionToParameterTemplateStructure[target]
+ val errorMessage = {
+ """
+ Incompatible structures for
+ Source: $sourceStructure
+ ${source.render()}
+ Target: $targetStructure
+ ${target.render()}
+ """.trimIndent()
+ }
+ when (targetStructure) {
+ null -> when (sourceStructure) {
+ null -> require(targetExplicitParameters.size == sourceExplicitParameters.size, errorMessage)
+ else -> {
+ require(targetExplicitParameters.size == sourceStructure.size, errorMessage)
+ require(sourceExplicitParameters.size == sourceStructure.sumOf { it.valueParameters.size }, errorMessage)
+ }
+ }
+
+ else -> when (sourceStructure) {
+ null -> {
+ require(targetStructure.size == sourceExplicitParameters.size, errorMessage)
+ require(targetStructure.sumOf { it.valueParameters.size } == targetExplicitParameters.size, errorMessage)
+ }
+
+ else -> {
+ require(targetStructure.size == sourceStructure.size, errorMessage)
+ require(sourceStructure.sumOf { it.valueParameters.size } == sourceExplicitParameters.size, errorMessage)
+ require(targetStructure.sumOf { it.valueParameters.size } == targetExplicitParameters.size, errorMessage)
+ require((targetStructure zip sourceStructure).none { (t, s) ->
+ t is MultiFieldValueClassMapping && s is MultiFieldValueClassMapping && t.rootMfvcNode != s.rootMfvcNode
+ }, errorMessage)
+ }
+ }
+ }
+ val structuresSizes = sourceStructure?.size ?: targetStructure?.size ?: targetExplicitParameters.size
+ var flattenedSourceIndex = 0
+ var flattenedTargetIndex = 0
+ for (i in 0 until structuresSizes) {
+ val remappedSourceParameter = sourceStructure?.get(i)
+ val remappedTargetParameter = targetStructure?.get(i)
+ when (remappedSourceParameter) {
+ is MultiFieldValueClassMapping -> {
+ when (remappedTargetParameter) {
+ is MultiFieldValueClassMapping -> {
+ require(remappedTargetParameter.valueParameters.size == remappedSourceParameter.valueParameters.size) {
+ "Incompatible structures: $remappedTargetParameter, $remappedSourceParameter"
+ }
+ repeat(remappedTargetParameter.valueParameters.size) {
+ putArgument(
+ targetExplicitParameters[flattenedTargetIndex++],
+ irGet(sourceExplicitParameters[flattenedSourceIndex++])
+ )
+ }
+ }
+
+ is RegularMapping, null -> {
+ val valueArguments = sourceExplicitParameters
+ .slice(flattenedSourceIndex until flattenedSourceIndex + remappedSourceParameter.valueParameters.size)
+ .map { irGet(it) }
+ val targetParameter = targetExplicitParameters[flattenedTargetIndex++]
+ val boxedExpression = remappedSourceParameter.rootMfvcNode.makeBoxedExpression(
+ this@irBlock, remappedSourceParameter.typeArguments, valueArguments
+ )
+ putArgument(targetParameter, boxedExpression)
+ .also { flattenedSourceIndex += remappedSourceParameter.valueParameters.size }
+ }
+ }
+ }
+
+ is RegularMapping, null -> when (remappedTargetParameter) {
+ is MultiFieldValueClassMapping -> {
+ val receiver = sourceExplicitParameters[flattenedSourceIndex++]
+ val rootNode = remappedTargetParameter.rootMfvcNode
+ val instance = rootNode.createInstanceFromBox(
+ this@irBlock, irGet(receiver), getOptimizedPublicAccess(rootNode.mfvc), ::variablesSaver,
+ )
+ val flattenedExpressions = instance.makeFlattenedGetterExpressions(this@irBlock)
+ for (expression in flattenedExpressions) {
+ putArgument(targetExplicitParameters[flattenedTargetIndex++], expression)
+ }
+ }
+
+ else -> putArgument(
+ targetExplicitParameters[flattenedTargetIndex++],
+ irGet(sourceExplicitParameters[flattenedSourceIndex++])
+ )
+ }
+ }
+ }
+ require(flattenedTargetIndex == targetExplicitParameters.size && flattenedSourceIndex == sourceExplicitParameters.size) {
+ "Incorrect source:\n${source.dump()}\n\nfor target\n${target.dump()}"
+ }
+ })
+ })
+ }
+ allScopes.pop()
+ }
+
+ private fun IrFunctionAccessExpression.passTypeArgumentsWithOffsets(
+ target: IrFunction, source: IrFunction, forCommonTypeParameters: (targetIndex: Int) -> IrType
+ ) {
+ val passedTypeParametersSize = minOf(target.typeParameters.size, source.typeParameters.size)
+ val targetOffset = target.typeParameters.size - passedTypeParametersSize
+ val sourceOffset = source.typeParameters.size - passedTypeParametersSize
+ if (sourceOffset > 0) {
+ // static fun calls method
+ val dispatchReceiverType = source.parentAsClass.defaultType
+ require(dispatchReceiverType.let {
+ it.needsMfvcFlattening() && it.erasedUpperBound.typeParameters.size == sourceOffset
+ }) { "Unexpected dispatcher receiver type: ${dispatchReceiverType.render()}" }
+ }
+ if (targetOffset > 0) {
+ // method calls static fun
+ val dispatchReceiverType = source.parentAsClass.defaultType
+ require(dispatchReceiverType.let {
+ it.needsMfvcFlattening() && it.erasedUpperBound.typeParameters.size == targetOffset
+ }) { "Unexpected dispatcher receiver type: ${dispatchReceiverType.render()}" }
+ dispatchReceiverType.erasedUpperBound.typeParameters.forEachIndexed { index, typeParameter ->
+ putTypeArgument(index, typeParameter.defaultType)
+ }
+ }
+ for (i in 0 until passedTypeParametersSize) {
+ putTypeArgument(i + targetOffset, forCommonTypeParameters(i + sourceOffset))
+ }
+ }
+
+ override fun addBindingsFor(original: IrFunction, replacement: IrFunction) {
+ val parametersStructure = replacements.bindingOldFunctionToParameterTemplateStructure[original]!!
+ require(parametersStructure.size == original.explicitParameters.size) {
+ "Wrong value parameters structure: $parametersStructure"
+ }
+ require(parametersStructure.sumOf { it.valueParameters.size } == replacement.explicitParameters.size) {
+ "Wrong value parameters structure: $parametersStructure"
+ }
+ val old2newList = original.explicitParameters.zip(
+ parametersStructure.scan(0) { partial: Int, templates: RemappedParameter -> partial + templates.valueParameters.size }
+ .zipWithNext { start: Int, finish: Int -> replacement.explicitParameters.slice(start until finish) }
+ )
+ for (i in old2newList.indices) {
+ val (param, newParamList) = old2newList[i]
+ when (val structure = parametersStructure[i]) {
+ is MultiFieldValueClassMapping -> {
+ val mfvcNodeInstance = structure.rootMfvcNode.createInstanceFromValueDeclarationsAndBoxType(
+ structure.boxedType, newParamList
+ )
+ valueDeclarationsRemapper.registerReplacement(param, mfvcNodeInstance)
+ }
+
+ is RegularMapping -> valueDeclarationsRemapper.registerReplacement(param, newParamList.single())
+ }
+ }
+ }
+
+ fun RootMfvcNode.replacePrimaryMultiFieldValueClassConstructor() {
+ val rootMfvcNode = this
+ mfvc.declarations.removeIf { it is IrConstructor && it.isPrimary }
+ mfvc.declarations += listOf(newPrimaryConstructor, primaryConstructorImpl)
+
+ val initializersBlocks = mfvc.declarations.filterIsInstance<IrAnonymousInitializer>()
+ val typeArguments = makeTypeParameterSubstitutionMap(mfvc, primaryConstructorImpl)
+ primaryConstructorImpl.body = context.createIrBuilder(primaryConstructorImpl.symbol).irBlockBody {
+ val mfvcNodeInstance =
+ ValueDeclarationMfvcNodeInstance(rootMfvcNode, typeArguments, primaryConstructorImpl.valueParameters)
+ valueDeclarationsRemapper.registerReplacement(
+ oldPrimaryConstructor.constructedClass.thisReceiver!!,
+ mfvcNodeInstance
+ )
+ for (initializer in initializersBlocks) {
+ +irBlock {
+ for (stmt in initializer.body.statements) {
+ +stmt.patchDeclarationParents(primaryConstructorImpl) // transformation is done later
+ }
+ }
+ }
+ }
+ mfvc.declarations.removeIf { it is IrAnonymousInitializer }
}
override fun visitFunctionReference(expression: IrFunctionReference): IrExpression {
@@ -52,27 +653,675 @@
}
override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
- // todo implement
- return super.visitFunctionAccess(expression)
+ val function = expression.symbol.owner
+ val replacement = replacements.getReplacementFunction(function)
+ val currentScope = currentScope!!.irElement as IrDeclaration
+ return when {
+ function is IrConstructor && function.isPrimary && function.constructedClass.isMultiFieldValueClass &&
+ currentScope.origin != JvmLoweredDeclarationOrigin.SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER -> {
+ context.createIrBuilder(currentScope.symbol).irBlock {
+ val rootNode = replacements.getRootMfvcNode(function.constructedClass)!!
+ val instance = rootNode.createInstanceFromValueDeclarationsAndBoxType(
+ this, function.constructedClassType as IrSimpleType, Name.identifier("constructor_tmp"), ::variablesSaver
+ )
+ flattenExpressionTo(expression, instance)
+ val getterExpression = instance.makeGetterExpression(this)
+ valueDeclarationsRemapper.registerReplacement(getterExpression, instance)
+ +getterExpression
+ }
+ }
+
+ replacement != null -> context.createIrBuilder(currentScope.symbol).irBlock {
+ buildReplacement(function, expression, replacement)
+ }
+
+ else -> {
+ val newConstructor = (function as? IrConstructor)
+ ?.let { replacements.getReplacementForRegularClassConstructor(it) }
+ ?: return super.visitFunctionAccess(expression)
+ context.createIrBuilder(currentScope.symbol).irBlock {
+ buildReplacement(function, expression, newConstructor)
+ }
+ }
+ }
}
override fun visitCall(expression: IrCall): IrExpression {
- // todo implement
+ val callee = expression.symbol.owner
+ val property = callee.property
+ if (
+ property != null &&
+ callee.extensionReceiverParameter == null &&
+ callee.contextReceiverParametersCount == 0 &&
+ callee.isGetter &&
+ (expression.type.needsMfvcFlattening() || expression.dispatchReceiver?.type?.needsMfvcFlattening() == true)
+ ) {
+ require(callee.valueParameters.isEmpty()) { "Unexpected getter:\n${callee.dump()}" }
+ expression.dispatchReceiver = expression.dispatchReceiver?.transform(this, null)
+ return context.createIrBuilder(getCurrentScopeSymbol()).irBlock {
+ with(valueDeclarationsRemapper) {
+ addReplacement(expression) ?: return expression
+ }
+ }
+ }
+ if (expression.isSpecializedMFVCEqEq) {
+ val backendContext = context
+ return context.createIrBuilder(getCurrentScopeSymbol()).irBlock {
+ val leftArgument = expression.getValueArgument(0)!!
+ val rightArgument = expression.getValueArgument(1)!!
+ val leftClass = leftArgument.type.erasedUpperBound
+ val leftNode = if (leftArgument.type.needsMfvcFlattening()) replacements.getRootMfvcNode(leftClass) else null
+ val rightClass = rightArgument.type.erasedUpperBound
+ val rightNode = if (rightArgument.type.needsMfvcFlattening()) replacements.getRootMfvcNode(rightClass) else null
+ if (leftNode != null) {
+ if (rightNode != null) {
+ // both are unboxed
+ val leftExpressions = flattenExpression(leftArgument)
+ require((leftExpressions.size > 1) == leftArgument.type.needsMfvcFlattening()) {
+ "Illegal flattening of ${leftArgument.dump()}\n\n${leftExpressions.joinToString("\n") { it.dump() }}"
+ }
+ val rightExpressions = flattenExpression(rightArgument)
+ require((rightExpressions.size > 1) == rightArgument.type.needsMfvcFlattening()) {
+ "Illegal flattening of ${rightArgument.dump()}\n\n${rightExpressions.joinToString("\n") { it.dump() }}"
+ }
+ require(leftNode == rightNode) { "Different node: $leftNode, $rightNode" }
+ require(leftClass == rightClass) { "Equals for different classes: $leftClass and $rightClass called" }
+
+ +irCall(leftNode.specializedEqualsMethod).apply {
+ ((leftArgument.type as IrSimpleType).arguments + (rightArgument.type as IrSimpleType).arguments).forEachIndexed { index, argument ->
+ putTypeArgument(index, argument.typeOrNull)
+ }
+ val arguments = leftExpressions + rightExpressions
+ arguments.forEachIndexed { index, argument -> putValueArgument(index, argument) }
+ }
+ } else {
+ // left one is unboxed, right is not
+ val equals = leftClass.functions.single { it.isEquals(backendContext) }
+ +irCall(equals).apply {
+ copyTypeArgumentsFrom(expression)
+ dispatchReceiver = leftArgument
+ putValueArgument(0, rightArgument)
+ }.transform(this@JvmMultiFieldValueClassLowering, null)
+ }
+ } else if (rightNode != null) {
+ // left one is boxed, right one is unboxed
+ if (leftArgument.isNullConst()) {
+ // left argument is always null, right one is unboxed
+ val hasPureFlattenedGetters = rightNode.mapLeaves { it.hasPureUnboxMethod }.all { it }
+ if (hasPureFlattenedGetters) {
+ val rightExpressions = flattenExpression(rightArgument)
+ require((rightExpressions.size > 1) == rightArgument.type.needsMfvcFlattening()) {
+ "Illegal flattening of ${rightArgument.dump()}\n\n${rightExpressions.joinToString("\n") { it.dump() }}"
+ }
+ rightExpressions.filterNot { it.isRepeatableGetter() }.forEach { +it }
+ } else {
+ +rightArgument.transform(this@JvmMultiFieldValueClassLowering, null)
+ }
+ +irFalse()
+ } else if (leftArgument.type.erasedUpperBound == rightArgument.type.erasedUpperBound && leftArgument.type.isNullable()) {
+ // left argument can be unboxed if it is not null, right one is unboxed
+ +irBlock {
+ val leftValue = irTemporary(leftArgument)
+ +irIfNull(context.irBuiltIns.booleanType, irGet(leftValue), irFalse(), irBlock {
+ val nonNullLeftArgumentVariable =
+ irTemporary(irImplicitCast(irGet(leftValue), leftArgument.type.makeNotNull()))
+ +irCall(context.irBuiltIns.eqeqSymbol).apply {
+ copyTypeArgumentsFrom(expression)
+ putValueArgument(0, irGet(nonNullLeftArgumentVariable))
+ putValueArgument(1, rightArgument)
+ }
+ })
+ }.transform(this@JvmMultiFieldValueClassLowering, null)
+ } else {
+ // right one is unboxed but left one is boxed and no intrinsics can be used
+ return super.visitCall(expression)
+ }
+ } else {
+ // both are boxed
+ return super.visitCall(expression)
+ }
+ }
+ }
return super.visitCall(expression)
}
+ private fun IrBlockBuilder.buildReplacement(
+ originalFunction: IrFunction,
+ original: IrMemberAccessExpression<*>,
+ replacement: IrFunction
+ ) {
+ val parameter2expression = typedArgumentList(originalFunction, original)
+ val structure = replacements.bindingOldFunctionToParameterTemplateStructure[originalFunction]!!
+ require(parameter2expression.size == structure.size)
+ require(structure.sumOf { it.valueParameters.size } == replacement.explicitParametersCount)
+ val newArguments: List<IrExpression?> =
+ makeNewArguments(parameter2expression.map { (_, argument) -> argument }, structure.map { it.valueParameters })
+ +irCall(replacement.symbol).apply {
+ passTypeArgumentsWithOffsets(replacement, originalFunction) { original.getTypeArgument(it)!! }
+ for ((parameter, argument) in replacement.explicitParameters zip newArguments) {
+ if (argument == null) continue
+ putArgument(replacement, parameter, argument.transform(this@JvmMultiFieldValueClassLowering, null))
+ }
+ }
+ }
+
+ override fun visitStringConcatenation(expression: IrStringConcatenation): IrExpression {
+ for (i in expression.arguments.indices) {
+ val argument = expression.arguments[i]
+ if (argument.type.needsMfvcFlattening()) {
+ expression.arguments[i] = context.createIrBuilder(getCurrentScopeSymbol()).run {
+ val toString = argument.type.erasedUpperBound.functions.single { it.isToString() }
+ require(toString.typeParameters.isEmpty()) { "Bad toString: ${toString.render()}" }
+ irCall(toString).apply {
+ dispatchReceiver = argument
+ }
+ }
+ }
+ }
+ return super.visitStringConcatenation(expression)
+ }
+
+ private fun IrBlockBuilder.makeNewArguments(
+ oldArguments: List<IrExpression?>,
+ structure: List<List<IrValueParameter>>
+ ): List<IrExpression?> {
+ val argumentSizes: List<Int> = structure.map { argTemplate -> argTemplate.size }
+ val newArguments = (oldArguments zip argumentSizes).flatMap { (oldArgument, parametersCount) ->
+ when {
+ oldArgument == null -> List(parametersCount) { null }
+ parametersCount == 1 -> listOf(oldArgument.transform(this@JvmMultiFieldValueClassLowering, null))
+ else -> {
+ val type = oldArgument.type as IrSimpleType
+ require(type.needsMfvcFlattening()) { "Unexpected type: ${type.render()}" }
+ flattenExpression(oldArgument).also {
+ require(it.size == parametersCount) { "Expected $parametersCount arguments but got ${it.size}" }
+ }
+ }
+ }
+ }
+ return newArguments
+ }
+
+ /**
+ * Inlines initialization of variables when possible and returns their values
+ *
+ * Example:
+ * Before:
+ * val a = 2
+ * val b = 3
+ * val c = b + 1
+ * [a, b, c]
+ *
+ * After:
+ * val a = 2
+ * val b = 3
+ * [a, b, b + 1]
+ */
+ fun IrBuilderWithScope.removeExtraSetVariablesFromExpressionList(
+ block: IrContainerExpression,
+ variables: List<IrVariable>
+ ): List<IrExpression> {
+ val forbiddenVariables = mutableSetOf<IrVariable>()
+ val variablesSet = variables.toSet()
+ val standaloneExpressions = mutableListOf<IrExpression>()
+ val resultVariables = variables.toMutableList()
+
+ fun recur(block: IrContainerExpression): Boolean /* stop optimization */ {
+ while (block.statements.isNotEmpty() && resultVariables.isNotEmpty()) {
+ val statement = block.statements.last()
+ //also stop
+ when {
+ statement is IrContainerExpression -> if (recur(statement)) {
+ if (statement.statements.isEmpty()) {
+ block.statements.removeLast()
+ }
+ return true
+ } else {
+ require(statement.statements.isEmpty() || resultVariables.isEmpty()) { "Not all statements removed" }
+ if (statement.statements.isEmpty()) {
+ block.statements.removeLast()
+ }
+ }
+
+ statement !is IrSetValue -> return true
+ statement.symbol.owner != resultVariables.last() -> return true
+ statement.symbol.owner in forbiddenVariables -> return true
+ else -> {
+ standaloneExpressions.add(statement.value)
+ resultVariables.removeLast()
+ block.statements.removeLast()
+ statement.value.acceptVoid(object : IrElementVisitorVoid {
+ override fun visitElement(element: IrElement) {
+ element.acceptChildrenVoid(this)
+ }
+
+ override fun visitValueAccess(expression: IrValueAccessExpression) {
+ val valueDeclaration = expression.symbol.owner
+ if (valueDeclaration is IrVariable && valueDeclaration in variablesSet) {
+ forbiddenVariables.add(valueDeclaration)
+ }
+ super.visitValueAccess(expression)
+ }
+ })
+ }
+ }
+ }
+ return false
+ }
+ recur(block)
+ return resultVariables.map { irGet(it) } + standaloneExpressions.asReversed()
+ }
+
+ // Note that reference equality (x === y) is not allowed on values of MFVC class type,
+ // so it is enough to check for eqeq.
+ private val IrCall.isSpecializedMFVCEqEq: Boolean
+ get() = symbol == context.irBuiltIns.eqeqSymbol &&
+ listOf(getValueArgument(0), getValueArgument(1))
+ .any { it!!.type.erasedUpperBound.isMultiFieldValueClass }
+
override fun visitGetField(expression: IrGetField): IrExpression {
- // todo implement
- return super.visitGetField(expression)
+ expression.receiver = expression.receiver?.transform(this, null)
+ with(valueDeclarationsRemapper) {
+ return context.createIrBuilder(expression.symbol).irBlock {
+ addReplacement(expression) ?: return expression
+ }
+ }
}
- override fun visitGetValue(expression: IrGetValue): IrExpression {
- // todo implement
- return super.visitGetValue(expression)
+ override fun visitSetField(expression: IrSetField): IrExpression {
+ expression.receiver = expression.receiver?.transform(this, null)
+ with(valueDeclarationsRemapper) {
+ return context.createIrBuilder(getCurrentScopeSymbol()).irBlock {
+ addReplacement(expression, safe = expression.origin != UNSAFE_MFVC_SET_ORIGIN)
+ ?: return expression.also { it.value = it.value.transform(this@JvmMultiFieldValueClassLowering, null) }
+ }
+ }
}
- override fun visitSetValue(expression: IrSetValue): IrExpression {
- // todo implement
- return super.visitSetValue(expression)
+ override fun visitGetValue(expression: IrGetValue): IrExpression =
+ with(valueDeclarationsRemapper) {
+ context.createIrBuilder(getCurrentScopeSymbol()).makeReplacement(expression) ?: super.visitGetValue(expression)
+ }
+
+ override fun visitSetValue(expression: IrSetValue): IrExpression = context.createIrBuilder(getCurrentScopeSymbol()).irBlock {
+ with(valueDeclarationsRemapper) {
+ addReplacement(expression, safe = expression.origin != UNSAFE_MFVC_SET_ORIGIN)
+ ?: return super.visitSetValue(expression)
+ }
}
-}
\ No newline at end of file
+
+ override fun visitVariable(declaration: IrVariable): IrStatement {
+ val initializer = declaration.initializer
+ if (declaration.type.needsMfvcFlattening()) {
+ val irClass = declaration.type.erasedUpperBound
+ val rootNode = replacements.getRootMfvcNode(irClass)!!
+ return context.createIrBuilder(getCurrentScopeSymbol()).irBlock {
+ val instance = rootNode.createInstanceFromValueDeclarationsAndBoxType(
+ this, declaration.type as IrSimpleType, declaration.name, ::variablesSaver
+ )
+ valueDeclarationsRemapper.registerReplacement(declaration, instance)
+ initializer?.let {
+ flattenExpressionTo(it, instance)
+ }
+ }
+ }
+ return super.visitVariable(declaration)
+ }
+
+ private fun getCurrentScopeSymbol() = (currentScope!!.irElement as IrSymbolOwner).symbol
+
+ /**
+ * Takes not transformed expression and returns its flattened transformed representation (expressions)
+ */
+ fun IrBlockBuilder.flattenExpression(expression: IrExpression): List<IrExpression> {
+ if (!expression.type.needsMfvcFlattening()) {
+ return listOf(expression.transform(this@JvmMultiFieldValueClassLowering, null))
+ }
+ val rootMfvcNode = replacements.getRootMfvcNode(expression.type.erasedUpperBound)!!
+ val typeArguments = makeTypeArgumentsFromType(expression.type as IrSimpleType)
+ val variables = rootMfvcNode.leaves.map {
+ savableStandaloneVariable(
+ type = it.type.substitute(typeArguments),
+ origin = IrDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE,
+ saveVariable = ::variablesSaver
+ )
+ }
+ val instance = ValueDeclarationMfvcNodeInstance(rootMfvcNode, typeArguments, variables)
+ val block = irBlock {
+ flattenExpressionTo(expression, instance)
+ }
+ val expressions = removeExtraSetVariablesFromExpressionList(block, variables)
+ if (block.statements.isNotEmpty()) {
+ +block
+ }
+ return expressions
+ }
+
+ /**
+ * Takes not transformed expression and initialized given MfvcNodeInstance with transformed version of it
+ */
+ fun IrBlockBuilder.flattenExpressionTo(expression: IrExpression, instance: MfvcNodeInstance) {
+ val rootNode = replacements.getRootMfvcNode(
+ if (expression is IrConstructorCall) expression.symbol.owner.constructedClass else expression.type.erasedUpperBound
+ )
+ val type = if (expression is IrConstructorCall) expression.symbol.owner.constructedClass.defaultType else expression.type
+ val lowering = this@JvmMultiFieldValueClassLowering
+ if (rootNode == null || !type.needsMfvcFlattening()) {
+ require(instance.size == 1) { "Required 1 variable/field to store regular value but got ${instance.size}" }
+ instance.addSetterStatements(this, listOf(expression.transform(lowering, null)))
+ return
+ }
+ require(rootNode.leavesCount == instance.size) {
+ "Required ${rootNode.leavesCount} variable/field to store regular value but got ${instance.size}"
+ }
+ if (expression is IrWhen) {
+ for (branch in expression.branches) {
+ branch.condition = branch.condition.transform(lowering, null)
+ branch.result = irBlock {
+ flattenExpressionTo(branch.result, instance)
+ }.unwrapBlock()
+ }
+ +expression
+ return
+ }
+ if (expression is IrTry) {
+ expression.tryResult = irBlock { flattenExpressionTo(expression.tryResult, instance) }.unwrapBlock()
+ expression.catches.replaceAll { irCatch(it.catchParameter, irBlock { flattenExpressionTo(it.result, instance) }.unwrapBlock()) }
+ expression.finallyExpression = expression.finallyExpression?.transform(lowering, null)
+ +expression
+ return
+ }
+ if (expression is IrConstructorCall) {
+ val constructor = expression.symbol.owner
+ if (constructor.isPrimary && constructor.constructedClass.isMultiFieldValueClass &&
+ constructor.origin != JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR
+ ) {
+ val oldArguments = List(expression.valueArgumentsCount) { expression.getValueArgument(it) }
+ require(rootNode.subnodes.size == oldArguments.size) {
+ "Old ${constructor.render()} must have ${rootNode.subnodes.size} arguments but got ${oldArguments.size}"
+ }
+ for ((subnode, argument) in rootNode.subnodes zip oldArguments) {
+ argument?.let { flattenExpressionTo(it, instance[subnode.name]!!) }
+ }
+ +irCall(rootNode.primaryConstructorImpl).apply {
+ copyTypeArgumentsFrom(expression)
+ for ((index, leafExpression) in instance.makeFlattenedGetterExpressions(this@flattenExpressionTo).withIndex()) {
+ putValueArgument(index, leafExpression)
+ }
+ }
+ return
+ }
+ }
+ val transformedExpression = expression.transform(this@JvmMultiFieldValueClassLowering, null)
+ val addedSettersToFlattened = valueDeclarationsRemapper.handleFlattenedGetterExpressions(this, transformedExpression) {
+ require(it.size == instance.size) { "Incompatible assignment sizes: ${it.size}, ${instance.size}" }
+ instance.makeSetterExpressions(this, it)
+ }
+ if (addedSettersToFlattened != null) {
+ +addedSettersToFlattened
+ return
+ }
+ val expressionInstance = rootNode.createInstanceFromBox(
+ this, transformedExpression, getOptimizedPublicAccess(rootNode.mfvc), ::variablesSaver,
+ )
+ require(expressionInstance.size == instance.size) { "Incompatible assignment sizes: ${expressionInstance.size}, ${instance.size}" }
+ instance.addSetterStatements(this, expressionInstance.makeFlattenedGetterExpressions(this))
+ }
+
+ private fun getOptimizedPublicAccess(parent: IrClass): AccessType =
+ currentScope?.irElement?.let { getOptimizedPublicAccess(it, parent) } ?: AccessType.AlwaysPublic
+
+ /**
+ * Removes boxing when the result is not used
+ */
+ fun IrBody.removeAllExtraBoxes() {
+ // data is whether the expression result is used
+ accept(object : IrElementVisitor<Unit, Boolean> {
+ override fun visitElement(element: IrElement, data: Boolean) {
+ element.acceptChildren(this, true) // uses what is inside
+ }
+
+ override fun visitTypeOperator(expression: IrTypeOperatorCall, data: Boolean) {
+ expression.acceptChildren(this, data) // type operator calls are transparent
+ }
+
+ private tailrec fun getFunctionCallOrNull(statement: IrStatement): IrCall? = when (statement) {
+ is IrTypeOperatorCall -> getFunctionCallOrNull(statement.argument)
+ is IrCall -> statement
+ else -> null
+ }
+
+ // inner functions will be handled separately, no need to do it now
+ override fun visitFunction(declaration: IrFunction, data: Boolean) = Unit
+
+ // inner classes will be handled separately, no need to do it now
+ override fun visitClass(declaration: IrClass, data: Boolean) = Unit
+
+ override fun visitContainerExpression(expression: IrContainerExpression, data: Boolean) {
+ handleStatementContainer(expression, data)
+ }
+
+ override fun visitWhen(expression: IrWhen, data: Boolean) {
+ expression.acceptChildren(this, data) // when's are transparent
+ }
+
+ override fun visitCatch(aCatch: IrCatch, data: Boolean) {
+ aCatch.acceptChildren(this, data) // catches are transparent
+ }
+
+ override fun visitTry(aTry: IrTry, data: Boolean) {
+ aTry.tryResult.accept(this, data)
+ aTry.catches.forEach { it.accept(this, data) }
+ aTry.finallyExpression?.accept(this, false)
+ }
+
+ override fun visitBranch(branch: IrBranch, data: Boolean) {
+ branch.condition.accept(this, true)
+ branch.result.accept(this, data)
+ }
+
+ override fun visitBlockBody(body: IrBlockBody, data: Boolean) {
+ handleStatementContainer(body, data)
+ }
+
+ private fun handleStatementContainer(expression: IrStatementContainer, resultIsUsed: Boolean) {
+ for (statement in expression.statements.dropLast(1)) {
+ statement.accept(this, false)
+ }
+ expression.statements.lastOrNull()?.accept(this, resultIsUsed)
+ val statementsToRemove = mutableSetOf<IrStatement>()
+ for (statement in expression.statements.dropLast(if (resultIsUsed) 1 else 0)) {
+ val call = getFunctionCallOrNull(statement) ?: continue
+ val node = replacements.getRootMfvcNode(call.type.erasedUpperBound) ?: continue
+ if (node.boxMethod == call.symbol.owner &&
+ List(call.valueArgumentsCount) { call.getValueArgument(it) }.all { it.isRepeatableGetter() }
+ ) {
+ statementsToRemove.add(statement)
+ }
+ }
+ expression.statements.removeIf { it in statementsToRemove }
+ }
+ }, false)
+ }
+}
+
+private sealed class BlockOrBody {
+ data class Body(val body: IrBody) : BlockOrBody()
+ data class Block(val block: IrBlock) : BlockOrBody()
+}
+
+/**
+ * Finds the most narrow block or body which contains all usages of each of the given variables
+ */
+private fun findNearestBlocksForVariables(variables: Set<IrVariable>, body: IrBody): Map<IrVariable, BlockOrBody?> {
+ val variableUsages = mutableMapOf<BlockOrBody, MutableSet<IrVariable>>()
+ val childrenBlocks = mutableMapOf<BlockOrBody, MutableList<BlockOrBody>>()
+
+ body.acceptVoid(object : IrElementVisitorVoid {
+ private val stack = mutableListOf<BlockOrBody>()
+ override fun visitElement(element: IrElement) {
+ element.acceptChildren(this, null)
+ }
+
+ override fun visitBody(body: IrBody) {
+ currentStackElement()?.let { childrenBlocks.getOrPut(it) { mutableListOf() }.add(BlockOrBody.Body(body)) }
+ stack.add(BlockOrBody.Body(body))
+ super.visitBody(body)
+ require(stack.removeLast() == BlockOrBody.Body(body)) { "Invalid stack" }
+ }
+
+ override fun visitBlock(expression: IrBlock) {
+ childrenBlocks.getOrPut(currentStackElement()!!) { mutableListOf() }.add(Block(expression))
+ stack.add(Block(expression))
+ super.visitBlock(expression)
+ require(stack.removeLast() == Block(expression)) { "Invalid stack" }
+ }
+
+ private fun currentStackElement() = stack.lastOrNull()
+
+ override fun visitValueAccess(expression: IrValueAccessExpression) {
+ val valueDeclaration = expression.symbol.owner
+ if (valueDeclaration is IrVariable && valueDeclaration in variables) {
+ variableUsages.getOrPut(currentStackElement()!!) { mutableSetOf() }.add(valueDeclaration)
+ }
+ super.visitValueAccess(expression)
+ }
+ })
+
+ fun dfs(currentBlock: BlockOrBody, variable: IrVariable): BlockOrBody? {
+ if (variable in (variableUsages[currentBlock] ?: listOf())) return currentBlock
+ val childrenResult = childrenBlocks[currentBlock]?.mapNotNull { dfs(it, variable) } ?: listOf()
+ return when (childrenResult.size) {
+ 0 -> return null
+ 1 -> return childrenResult.single()
+ else -> currentBlock
+ }
+ }
+
+ return variables.associateWith { dfs(BlockOrBody.Body(body), it) }
+}
+
+private fun IrStatement.containsUsagesOf(variablesSet: Set<IrVariable>): Boolean {
+ var used = false
+ acceptVoid(object : IrElementVisitorVoid {
+ override fun visitElement(element: IrElement) {
+ if (!used) {
+ element.acceptChildrenVoid(this)
+ }
+ }
+
+ override fun visitValueAccess(expression: IrValueAccessExpression) {
+ if (expression.symbol.owner in variablesSet) {
+ used = true
+ }
+ super.visitValueAccess(expression)
+ }
+ })
+ return used
+}
+
+/**
+ * Adds declarations of the variables to the most narrow possible block or body.
+ * It adds them before the first usage within the block and inlines initialization of them when possible.
+ */
+fun IrBody.makeBodyWithAddedVariables(
+ context: JvmBackendContext,
+ variables: Set<IrVariable>,
+ symbol: IrSymbol
+): IrBody {
+ val nearestBlocks = findNearestBlocksForVariables(variables, this)
+ val containingVariables: Map<BlockOrBody, List<IrVariable>> = nearestBlocks.entries
+ .mapNotNull { (k, v) -> if (v != null) k to v else null }
+ .groupBy({ (_, v) -> v }, { (k, _) -> k })
+ return transform(object : IrElementTransformerVoid() {
+ private fun getFlattenedStatements(container: IrStatementContainer): Sequence<IrStatement> = sequence {
+ for (statement in container.statements) {
+ if (statement is IrStatementContainer) {
+ yieldAll(getFlattenedStatements(statement))
+ } else {
+ yield(statement)
+ }
+ }
+ }
+
+ private fun removeFlattenedStatements(container: IrStatementContainer, toRemove: Int): Int {
+ var removed = 0
+ var removedDirectly = 0
+ for (statement in container.statements) {
+ require(removed <= toRemove) { "Removed: $removed, To remove: $toRemove" }
+ if (removed == toRemove) break
+ if (statement is IrStatementContainer) {
+ val nestedRemoved = removeFlattenedStatements(statement, toRemove - removed)
+ removed += nestedRemoved
+ if (statement.statements.isEmpty()) {
+ removedDirectly++
+ }
+ } else {
+ removed++
+ removedDirectly++
+ }
+ }
+ require(removed <= toRemove) { "Removed: $removed, To remove: $toRemove" }
+ if (removedDirectly > 0) container.statements.replaceAll(container.statements.drop(removedDirectly))
+ return removed
+ }
+
+ private fun replaceSetVariableWithInitialization(variables: List<IrVariable>, container: IrStatementContainer) {
+ val variablesSet = variables.toSet()
+ val statementsWithoutUsages = container.statements.takeWhile { !it.containsUsagesOf(variablesSet) }
+ container.statements.replaceAll(container.statements.drop(statementsWithoutUsages.size))
+ val values = buildList {
+ for ((variable, statement) in variables.asSequence() zip getFlattenedStatements(container)) {
+ when {
+ variable.initializer != null -> break
+ statement !is IrSetValue -> break
+ statement.symbol.owner != variable -> break
+ else -> add(statement.value)
+ }
+ }
+ }
+
+ for ((variable, value) in variables zip values) {
+ variable.initializer = value
+ }
+ removeFlattenedStatements(container, values.size)
+ container.statements.addAll(0, statementsWithoutUsages + variables)
+ }
+
+ override fun visitBlock(expression: IrBlock): IrExpression {
+ containingVariables[Block(expression)]?.let {
+ expression.transformChildrenVoid()
+ replaceSetVariableWithInitialization(it, expression)
+ return expression
+ }
+ return super.visitBlock(expression)
+ }
+
+ override fun visitBlockBody(body: IrBlockBody): IrBody {
+ containingVariables[BlockOrBody.Body(body)]?.let {
+ body.transformChildrenVoid()
+ replaceSetVariableWithInitialization(it, body)
+ return body
+ }
+ return super.visitBlockBody(body)
+ }
+
+ override fun visitExpressionBody(body: IrExpressionBody): IrBody {
+ val lowering = this
+ containingVariables[BlockOrBody.Body(body)]?.takeIf { it.isNotEmpty() }?.let { bodyVars ->
+ val blockBody = context.createJvmIrBuilder(symbol).irBlockBody {
+ +irReturn(body.expression.transform(lowering, null))
+ }
+ blockBody.transformChildrenVoid()
+ replaceSetVariableWithInitialization(bodyVars, blockBody)
+ return blockBody
+ }
+ return super.visitExpressionBody(body)
+ }
+ }, null)
+}
+
+private fun <T> MutableList<T>.replaceAll(replacement: List<T>) {
+ clear()
+ addAll(replacement)
+}
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmPropertiesLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmPropertiesLowering.kt
index 71f054b..04acfab 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmPropertiesLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmPropertiesLowering.kt
@@ -10,10 +10,10 @@
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
+import org.jetbrains.kotlin.backend.jvm.getRequiresMangling
import org.jetbrains.kotlin.backend.jvm.hasMangledReturnType
import org.jetbrains.kotlin.backend.jvm.ir.eraseTypeParameters
import org.jetbrains.kotlin.backend.jvm.ir.needsAccessor
-import org.jetbrains.kotlin.backend.jvm.requiresMangling
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
@@ -222,7 +222,7 @@
val getter = property.getter
if (getter != null) {
val needsMangling =
- getter.extensionReceiverParameter?.type?.requiresMangling == true ||
+ getter.extensionReceiverParameter?.type?.getRequiresMangling(includeInline = true, includeMFVC = false) == true ||
(state.functionsWithInlineClassReturnTypesMangled && getter.hasMangledReturnType)
val mangled = if (needsMangling) inlineClassReplacements.getReplacementFunction(getter) else null
defaultMethodSignatureMapper.mapFunctionName(mangled ?: getter)
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
index 9a0453c..7f7e6fb 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/JvmValueClassAbstractLowering.kt
@@ -8,70 +8,32 @@
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
-import org.jetbrains.kotlin.backend.jvm.InlineClassAbi
-import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
-import org.jetbrains.kotlin.backend.jvm.MemoizedValueClassAbstractReplacements
+import org.jetbrains.kotlin.backend.common.pop
+import org.jetbrains.kotlin.backend.common.push
+import org.jetbrains.kotlin.backend.jvm.*
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.irReturn
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
-import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.transformStatement
import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.load.java.JvmAbi
+import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
internal abstract class JvmValueClassAbstractLowering(val context: JvmBackendContext) : FileLoweringPass,
IrElementTransformerVoidWithContext() {
abstract val replacements: MemoizedValueClassAbstractReplacements
- protected val valueMap = mutableMapOf<IrValueSymbol, IrValueDeclaration>()
-
- private fun addBindingsFor(original: IrFunction, replacement: IrFunction) {
- for ((param, newParam) in original.explicitParameters.zip(replacement.explicitParameters)) {
- valueMap[param.symbol] = newParam
- }
- }
-
final override fun lower(irFile: IrFile) {
irFile.transformChildrenVoid()
}
abstract fun IrClass.isSpecificLoweringLogicApplicable(): Boolean
- abstract fun IrFunction.isSpecificFieldGetter(): Boolean
+ abstract override fun visitClassNew(declaration: IrClass): IrStatement
- final override fun visitClassNew(declaration: IrClass): IrStatement {
- // The arguments to the primary constructor are in scope in the initializers of IrFields.
- declaration.primaryConstructor?.let {
- replacements.getReplacementFunction(it)?.let { replacement -> addBindingsFor(it, replacement) }
- }
-
- declaration.transformDeclarationsFlat { memberDeclaration ->
- if (memberDeclaration is IrFunction) {
- withinScope(memberDeclaration) {
- transformFunctionFlat(memberDeclaration)
- }
- } else {
- memberDeclaration.accept(this, null)
- null
- }
- }
-
- if (declaration.isSpecificLoweringLogicApplicable()) {
- val irConstructor = declaration.primaryConstructor!!
- // The field getter is used by reflection and cannot be removed here unless it is internal.
- declaration.declarations.removeIf {
- it == irConstructor || (it is IrFunction && it.isSpecificFieldGetter() && !it.visibility.isPublicAPI)
- }
- buildPrimaryValueClassConstructor(declaration, irConstructor)
- buildBoxFunction(declaration)
- buildUnboxFunctions(declaration)
- buildSpecializedEqualsMethod(declaration)
- addJvmInlineAnnotation(declaration)
- }
-
- return declaration
- }
+ abstract fun handleSpecificNewClass(declaration: IrClass)
protected fun transformFunctionFlat(function: IrFunction): List<IrDeclaration>? {
if (function is IrConstructor && function.isPrimary && function.constructedClass.isSpecificLoweringLogicApplicable()) {
@@ -79,7 +41,21 @@
}
val replacement = replacements.getReplacementFunction(function)
+
+ if (keepOldFunctionInsteadOfNew(function)) {
+ function.transformChildrenVoid()
+ addBindingsFor(function, replacement!!)
+ return null
+ }
+
if (replacement == null) {
+ if (function is IrConstructor) {
+ val constructorReplacement = replacements.getReplacementForRegularClassConstructor(function)
+ if (constructorReplacement != null) {
+ addBindingsFor(function, constructorReplacement)
+ return transformFlattenedConstructor(function, constructorReplacement)
+ }
+ }
function.transformChildrenVoid()
// Non-mangled functions can override mangled functions under some conditions, e.g., a function
// `fun f(): Nothing` can override a function `fun f(): UInt`. The former is not mangled, while
@@ -106,30 +82,50 @@
addBindingsFor(function, replacement)
return when (function) {
is IrSimpleFunction -> transformSimpleFunctionFlat(function, replacement)
- is IrConstructor -> transformConstructorFlat(function, replacement)
+ is IrConstructor -> transformSecondaryConstructorFlat(function, replacement)
else -> throw IllegalStateException()
}
}
+ private fun transformFlattenedConstructor(function: IrConstructor, replacement: IrConstructor): List<IrDeclaration>? {
+ replacement.valueParameters.forEach {
+ it.transformChildrenVoid()
+ it.defaultValue?.patchDeclarationParents(replacement)
+ }
+ allScopes.push(createScope(function))
+ replacement.body = function.body?.transform(this, null)?.patchDeclarationParents(replacement)
+ allScopes.pop()
+ return listOf(replacement)
+ }
+
private fun IrFunction.hashSuffix(): String? = InlineClassAbi.hashSuffix(
this,
context.state.functionsWithInlineClassReturnTypesMangled,
context.state.useOldManglingSchemeForFunctionsWithInlineClassesInSignatures
)
- protected abstract fun transformConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration>
+ protected abstract fun transformSecondaryConstructorFlat(constructor: IrConstructor, replacement: IrSimpleFunction): List<IrDeclaration>
- protected abstract fun transformSimpleFunctionFlat(function: IrSimpleFunction, replacement: IrSimpleFunction): List<IrDeclaration>
+ private fun transformSimpleFunctionFlat(function: IrSimpleFunction, replacement: IrSimpleFunction): List<IrDeclaration> {
+ replacement.valueParameters.forEach {
+ it.transformChildrenVoid()
+ it.defaultValue?.patchDeclarationParents(replacement)
+ }
+ allScopes.push(createScope(replacement))
+ replacement.body = function.body?.transform(this, null)?.patchDeclarationParents(replacement)
+ allScopes.pop()
+ replacement.copyAttributes(function)
- protected abstract fun buildPrimaryValueClassConstructor(valueClass: IrClass, irConstructor: IrConstructor)
+ // Don't create a wrapper for functions which are only used in an unboxed context
+ if (function.overriddenSymbols.isEmpty() || replacement.dispatchReceiverParameter != null)
+ return listOf(replacement)
- protected abstract fun buildBoxFunction(valueClass: IrClass)
+ val bridgeFunction = createBridgeFunction(function, replacement)
- protected abstract fun buildUnboxFunctions(valueClass: IrClass)
+ return listOf(replacement, bridgeFunction)
+ }
- protected abstract fun buildSpecializedEqualsMethod(valueClass: IrClass) // todo hashCode
-
- protected abstract fun addJvmInlineAnnotation(valueClass: IrClass)
+ abstract fun keepOldFunctionInsteadOfNew(function: IrFunction): Boolean
final override fun visitReturn(expression: IrReturn): IrExpression {
expression.returnTargetSymbol.owner.safeAs<IrFunction>()?.let { target ->
@@ -137,7 +133,10 @@
if (suffix != null && target.name.asString().endsWith(suffix))
return super.visitReturn(expression)
- replacements.getReplacementFunction(target)?.let {
+ replacements.run {
+ if (keepOldFunctionInsteadOfNew(target)) return@run null
+ getReplacementFunction(target) ?: if (target is IrConstructor) getReplacementForRegularClassConstructor(target) else null
+ }?.let {
return context.createIrBuilder(it.symbol, expression.startOffset, expression.endOffset).irReturn(
expression.value.transform(this, null)
)
@@ -172,4 +171,65 @@
else
super.visitAnonymousInitializerNew(declaration)
+ protected abstract fun addBindingsFor(original: IrFunction, replacement: IrFunction)
+
+ protected enum class SpecificMangle { Inline, MultiField }
+
+ protected abstract val specificMangle: SpecificMangle
+ private fun createBridgeFunction(
+ function: IrSimpleFunction,
+ replacement: IrSimpleFunction
+ ): IrSimpleFunction {
+ val bridgeFunction = createBridgeDeclaration(
+ function,
+ replacement,
+ when {
+ // If the original function has signature which need mangling we still need to replace it with a mangled version.
+ (!function.isFakeOverride || function.findInterfaceImplementation(context.state.jvmDefaultMode) != null) && when (specificMangle) {
+ SpecificMangle.Inline -> function.signatureRequiresMangling(includeInline = true, includeMFVC = false)
+ SpecificMangle.MultiField -> function.signatureRequiresMangling(includeInline = false, includeMFVC = true)
+ } -> replacement.name
+ // Since we remove the corresponding property symbol from the bridge we need to resolve getter/setter
+ // names at this point.
+ replacement.isGetter ->
+ Name.identifier(JvmAbi.getterName(replacement.correspondingPropertySymbol!!.owner.name.asString()))
+
+ replacement.isSetter ->
+ Name.identifier(JvmAbi.setterName(replacement.correspondingPropertySymbol!!.owner.name.asString()))
+
+ else ->
+ function.name
+ }
+ )
+
+ // Update the overridden symbols to point to their inline class replacements
+ bridgeFunction.overriddenSymbols = replacement.overriddenSymbols
+
+ // Replace the function body with a wrapper
+ if (bridgeFunction.isFakeOverride && bridgeFunction.parentAsClass.isSpecificLoweringLogicApplicable()) {
+ // Fake overrides redirect from the replacement to the original function, which is in turn replaced during interfacePhase.
+ createBridgeBody(replacement, bridgeFunction, function, true)
+ } else {
+ createBridgeBody(bridgeFunction, replacement, function, false)
+ }
+ return bridgeFunction
+ }
+
+ private fun IrSimpleFunction.signatureRequiresMangling(includeInline: Boolean = true, includeMFVC: Boolean = true) =
+ fullValueParameterList.any { it.type.getRequiresMangling(includeInline, includeMFVC) } ||
+ context.state.functionsWithInlineClassReturnTypesMangled &&
+ returnType.getRequiresMangling(includeInline = includeInline, includeMFVC = false)
+
+ protected fun typedArgumentList(function: IrFunction, expression: IrMemberAccessExpression<*>) = listOfNotNull(
+ function.dispatchReceiverParameter?.let { it to expression.dispatchReceiver },
+ function.extensionReceiverParameter?.let { it to expression.extensionReceiver }
+ ) + function.valueParameters.map { it to expression.getValueArgument(it.index) }
+
+
+ // We may need to add a bridge method for inline class methods with static replacements. Ideally, we'd do this in BridgeLowering,
+ // but unfortunately this is a special case in the old backend. The bridge method is not marked as such and does not follow the normal
+ // visibility rules for bridge methods.
+ abstract fun createBridgeDeclaration(source: IrSimpleFunction, replacement: IrSimpleFunction, mangledName: Name): IrSimpleFunction
+
+ protected abstract fun createBridgeBody(source: IrSimpleFunction, target: IrSimpleFunction, original: IrFunction, inverted: Boolean)
}
\ No newline at end of file
diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt
index 95fb7cc..b3f5ae9 100644
--- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt
+++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt
@@ -370,7 +370,7 @@
val constructedClass = constructedClass
- if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isSingleFieldValueClass && hasMangledParameters &&
+ if (!DescriptorVisibilities.isPrivate(visibility) && !constructedClass.isValue && hasMangledParameters() &&
!constructedClass.isAnonymousObject
) return true
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt
index 3f4c48a..72ecec9 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/InlineClassAbi.kt
@@ -60,14 +60,14 @@
fun mangledNameFor(irFunction: IrFunction, mangleReturnTypes: Boolean, useOldMangleRules: Boolean): Name {
if (irFunction is IrConstructor) {
// Note that we might drop this convention and use standard mangling for constructors too, see KT-37186.
- assert(irFunction.constructedClass.isSingleFieldValueClass) {
+ assert(irFunction.constructedClass.isValue) {
"Should not mangle names of non-inline class constructors: ${irFunction.render()}"
}
return Name.identifier("constructor-impl")
}
val suffix = hashSuffix(irFunction, mangleReturnTypes, useOldMangleRules)
- if (suffix == null && ((irFunction.parent as? IrClass)?.isSingleFieldValueClass != true || irFunction.origin == IrDeclarationOrigin.IR_BUILTINS_STUB)) {
+ if (suffix == null && ((irFunction.parent as? IrClass)?.isValue != true || irFunction.origin == IrDeclarationOrigin.IR_BUILTINS_STUB)) {
return irFunction.name
}
@@ -101,7 +101,7 @@
): String? =
collectFunctionSignatureForManglingSuffix(
useOldMangleRules,
- valueParameters.any { it.requiresMangling },
+ valueParameters.any { it.getRequiresMangling() },
// The JVM backend computes mangled names after creating suspend function views, but before default argument
// stub insertion. It would be nice if this part of the continuation lowering happened earlier in the pipeline.
// TODO: Move suspend function view creation before JvmInlineClassLowering.
@@ -124,19 +124,28 @@
get() = (this as IrSimpleFunction).correspondingPropertySymbol!!.owner.name
}
-val IrType.requiresMangling: Boolean
- get() {
- val irClass = erasedUpperBound
- return irClass.isSingleFieldValueClass && irClass.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME
+fun IrType.getRequiresMangling(includeInline: Boolean = true, includeMFVC: Boolean = true): Boolean {
+ val irClass = erasedUpperBound
+ return irClass.fqNameWhenAvailable != StandardNames.RESULT_FQ_NAME && when {
+ irClass.isSingleFieldValueClass -> includeInline
+ irClass.isMultiFieldValueClass -> includeMFVC
+ else -> false
}
+}
val IrFunction.fullValueParameterList: List<IrValueParameter>
get() = listOfNotNull(extensionReceiverParameter) + valueParameters
-val IrFunction.hasMangledParameters: Boolean
- get() = dispatchReceiverParameter != null && parentAsClass.isSingleFieldValueClass ||
- fullValueParameterList.any { it.type.requiresMangling } ||
- (this is IrConstructor && constructedClass.isSingleFieldValueClass)
+fun IrFunction.hasMangledParameters(includeInline: Boolean = true, includeMFVC: Boolean = true): Boolean =
+ (dispatchReceiverParameter != null && when {
+ parentAsClass.isSingleFieldValueClass -> includeInline
+ parentAsClass.isMultiFieldValueClass -> includeMFVC
+ else -> false
+ }) || fullValueParameterList.any { it.type.getRequiresMangling(includeInline, includeMFVC) } || (this is IrConstructor && when {
+ constructedClass.isSingleFieldValueClass -> includeInline
+ constructedClass.isMultiFieldValueClass -> includeMFVC
+ else -> false
+ })
val IrFunction.hasMangledReturnType: Boolean
get() = returnType.isInlineClassType() && parentClassOrNull?.isFileClass != true
@@ -146,10 +155,12 @@
val IrFunction.isInlineClassFieldGetter: Boolean
get() = (parent as? IrClass)?.isSingleFieldValueClass == true && this is IrSimpleFunction && extensionReceiverParameter == null &&
+ contextReceiverParametersCount == 0 && !isStatic &&
correspondingPropertySymbol?.let { it.owner.getter == this && it.owner.name == parentAsClass.inlineClassFieldName } == true
val IrFunction.isMultiFieldValueClassFieldGetter: Boolean
get() = (parent as? IrClass)?.isMultiFieldValueClass == true && this is IrSimpleFunction && extensionReceiverParameter == null &&
+ contextReceiverParametersCount == 0 && !isStatic &&
correspondingPropertySymbol?.let {
val multiFieldValueClassRepresentation = parentAsClass.multiFieldValueClassRepresentation
?: error("Multi-field value class must have multiFieldValueClassRepresentation: ${parentAsClass.render()}")
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt
index fa58f3b..cf56f48 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmBackendContext.kt
@@ -143,7 +143,8 @@
val inlineClassReplacements = MemoizedInlineClassReplacements(state.functionsWithInlineClassReturnTypesMangled, irFactory, this)
- val multiFieldValueClassReplacements = MemoizedMultiFieldValueClassReplacements(irFactory, this)
+ val multiFieldValueClassReplacements =
+ MemoizedMultiFieldValueClassReplacements(irFactory, this)
val continuationClassesVarsCountByType: MutableMap<IrAttributeContainer, Map<Type, Int>> = hashMapOf()
@@ -197,6 +198,20 @@
multifileFacade.setValue(newPartClasses.toMutableList())
}
+ for ((staticReplacement, original) in multiFieldValueClassReplacements.originalFunctionForStaticReplacement) {
+ if (staticReplacement !is IrSimpleFunction) continue
+ val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
+ val newStaticReplacement = multiFieldValueClassReplacements.getReplacementFunction(newOriginal) ?: continue
+ functionSymbolMap[staticReplacement.symbol] = newStaticReplacement.symbol
+ }
+
+ for ((methodReplacement, original) in multiFieldValueClassReplacements.originalFunctionForMethodReplacement) {
+ if (methodReplacement !is IrSimpleFunction) continue
+ val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
+ val newMethodReplacement = multiFieldValueClassReplacements.getReplacementFunction(newOriginal) ?: continue
+ functionSymbolMap[methodReplacement.symbol] = newMethodReplacement.symbol
+ }
+
for ((staticReplacement, original) in inlineClassReplacements.originalFunctionForStaticReplacement) {
if (staticReplacement !is IrSimpleFunction) continue
val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
index 0ee7498..b3f88da 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmCachedDeclarations.kt
@@ -251,7 +251,8 @@
defaultImplsRedirections.getOrPut(fakeOverride) {
assert(fakeOverride.isFakeOverride)
val irClass = fakeOverride.parentAsClass
- context.irFactory.buildFun {
+ val mfvcReplacementStructure = context.multiFieldValueClassReplacements.bindingNewFunctionToParameterTemplateStructure
+ val redirectFunction = context.irFactory.buildFun {
origin = JvmLoweredDeclarationOrigin.SUPER_INTERFACE_METHOD_BRIDGE
name = fakeOverride.name
visibility = fakeOverride.visibility
@@ -275,6 +276,8 @@
annotations = fakeOverride.annotations
copyCorrespondingPropertyFrom(fakeOverride)
}
+ mfvcReplacementStructure[fakeOverride]?.let { mfvcReplacementStructure[redirectFunction] = it }
+ redirectFunction
}
fun getRepeatedAnnotationSyntheticContainer(annotationClass: IrClass): IrClass =
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt
index fa74ad9..42a27c6 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt
@@ -29,9 +29,14 @@
object ENUM_MAPPINGS_FOR_WHEN : IrDeclarationOriginImpl("ENUM_MAPPINGS_FOR_WHEN", isSynthetic = true)
object ENUM_MAPPINGS_FOR_ENTRIES : IrDeclarationOriginImpl("ENUM_MAPPINGS_FOR_ENTRIES", isSynthetic = true)
object SYNTHETIC_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("SYNTHETIC_INLINE_CLASS_MEMBER", isSynthetic = true)
+ object SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER :
+ IrDeclarationOriginImpl("SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER", isSynthetic = true)
object INLINE_CLASS_GENERATED_IMPL_METHOD : IrDeclarationOriginImpl("INLINE_CLASS_GENERATED_IMPL_METHOD")
+ object MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD : IrDeclarationOriginImpl("MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD")
object STATIC_INLINE_CLASS_REPLACEMENT : IrDeclarationOriginImpl("STATIC_INLINE_CLASS_REPLACEMENT")
+ object STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT : IrDeclarationOriginImpl("STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT")
object STATIC_INLINE_CLASS_CONSTRUCTOR : IrDeclarationOriginImpl("STATIC_INLINE_CLASS_CONSTRUCTOR")
+ object STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR : IrDeclarationOriginImpl("STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR")
object GENERATED_ASSERTION_ENABLED_FIELD : IrDeclarationOriginImpl("GENERATED_ASSERTION_ENABLED_FIELD", isSynthetic = true)
object GENERATED_EXTENDED_MAIN : IrDeclarationOriginImpl("GENERATED_EXTENDED_MAIN", isSynthetic = true)
object SUSPEND_IMPL_STATIC_FUNCTION : IrDeclarationOriginImpl("SUSPEND_IMPL_STATIC_FUNCTION", isSynthetic = true)
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedInlineClassReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedInlineClassReplacements.kt
index 1060c6c..0e5d339 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedInlineClassReplacements.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedInlineClassReplacements.kt
@@ -5,25 +5,26 @@
package org.jetbrains.kotlin.backend.jvm
-import org.jetbrains.kotlin.backend.jvm.ir.*
+import org.jetbrains.kotlin.backend.jvm.ir.classFileContainsMethod
+import org.jetbrains.kotlin.backend.jvm.ir.extensionReceiverName
+import org.jetbrains.kotlin.backend.jvm.ir.isStaticValueClassReplacement
+import org.jetbrains.kotlin.backend.jvm.ir.parentClassId
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
-import org.jetbrains.kotlin.ir.builders.declarations.buildProperty
import org.jetbrains.kotlin.ir.declarations.*
-import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
import org.jetbrains.kotlin.ir.types.impl.IrStarProjectionImpl
-import org.jetbrains.kotlin.ir.types.isInt
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
+import org.jetbrains.kotlin.utils.alwaysNull
import java.util.concurrent.ConcurrentHashMap
/**
@@ -35,10 +36,9 @@
context: JvmBackendContext
) : MemoizedValueClassAbstractReplacements(irFactory, context) {
private val storageManager = LockBasedStorageManager("inline-class-replacements")
- private val propertyMap = ConcurrentHashMap<IrPropertySymbol, IrProperty>()
- override val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
- internal val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
+ val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
+ val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
/**
* Get a replacement for a function or a constructor.
@@ -49,7 +49,9 @@
// Don't mangle anonymous or synthetic functions, except for generated SAM wrapper methods
(it.isLocal && it is IrSimpleFunction && it.overriddenSymbols.isEmpty()) ||
(it.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR && it.visibility == DescriptorVisibilities.LOCAL) ||
- it.isStaticInlineClassReplacement ||
+ it.isStaticValueClassReplacement ||
+ it in context.multiFieldValueClassReplacements.bindingNewFunctionToParameterTemplateStructure ||
+ it.origin == JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD ||
it.origin.isSynthetic && it.origin != IrDeclarationOrigin.SYNTHETIC_GENERATED_SAM_IMPLEMENTATION ->
null
@@ -64,7 +66,7 @@
when {
it.isRemoveAtSpecialBuiltinStub() ->
null
- it.isInlineClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod() ||
+ it.isValueClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod() ||
it.origin == IrDeclarationOrigin.IR_BUILTINS_STUB ->
createMethodReplacement(it)
else ->
@@ -72,7 +74,8 @@
}
// Otherwise, mangle functions with mangled parameters, ignoring constructors
- it is IrSimpleFunction && !it.isFromJava() && (it.hasMangledParameters || mangleReturnTypes && it.hasMangledReturnType) ->
+ it is IrSimpleFunction && !it.isFromJava() &&
+ (it.hasMangledParameters(includeMFVC = false) || mangleReturnTypes && it.hasMangledReturnType) ->
createMethodReplacement(it)
else ->
@@ -80,29 +83,6 @@
}
}
- private fun IrFunction.isRemoveAtSpecialBuiltinStub() =
- origin == IrDeclarationOrigin.IR_BUILTINS_STUB &&
- name.asString() == "remove" &&
- valueParameters.size == 1 &&
- valueParameters[0].type.isInt()
-
- private fun IrFunction.isInlineClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod(): Boolean {
- if (this !is IrSimpleFunction) return false
- if (!this.isFakeOverride) return false
- val parentClass = parentClassOrNull ?: return false
- if (!parentClass.isSingleFieldValueClass) return false
-
- val overridden = resolveFakeOverride() ?: return false
- if (!overridden.parentAsClass.isJvmInterface) return false
- if (overridden.modality == Modality.ABSTRACT) return false
-
- // We have a non-abstract interface member.
- // It is a JVM default interface method if one of the following conditions are true:
- // - it is a Java method,
- // - it is a Kotlin function compiled to JVM default interface method.
- return overridden.isFromJava() || overridden.isCompiledToJvmDefault(context.state.jvmDefaultMode)
- }
-
/**
* Get the box function for an inline class. Concretely, this is a synthetic
* static function named "box-impl" which takes an unboxed value and returns
@@ -148,7 +128,7 @@
return specializedEqualsCache.computeIfAbsent(irClass) {
irFactory.buildFun {
name = InlineClassDescriptorResolver.SPECIALIZED_EQUALS_NAME
- // TODO: Revisit this once we allow user defined equals methods in inline classes.
+ // TODO: Revisit this once we allow user defined equals methods in inline/multi-field value classes.
origin = JvmLoweredDeclarationOrigin.INLINE_CLASS_GENERATED_IMPL_METHOD
returnType = irBuiltIns.booleanType
}.apply {
@@ -168,7 +148,7 @@
}
}
- private fun createMethodReplacement(function: IrFunction): IrSimpleFunction =
+ override fun createMethodReplacement(function: IrFunction): IrSimpleFunction =
buildReplacement(function, function.origin) {
originalFunctionForMethodReplacement[this] = function
dispatchReceiverParameter = function.dispatchReceiverParameter?.copyTo(this, index = -1)
@@ -184,9 +164,14 @@
it.defaultValue = parameter.defaultValue?.patchDeclarationParents(this)
}
}
+ context.multiFieldValueClassReplacements.run {
+ bindingNewFunctionToParameterTemplateStructure[function]?.also {
+ bindingNewFunctionToParameterTemplateStructure[this@buildReplacement] = it
+ }
+ }
}
- private fun createStaticReplacement(function: IrFunction): IrSimpleFunction =
+ override fun createStaticReplacement(function: IrFunction): IrSimpleFunction =
buildReplacement(function, JvmLoweredDeclarationOrigin.STATIC_INLINE_CLASS_REPLACEMENT, noFakeOverride = true) {
originalFunctionForStaticReplacement[this] = function
@@ -219,6 +204,11 @@
}
}
valueParameters = newValueParameters
+ context.multiFieldValueClassReplacements.run {
+ bindingNewFunctionToParameterTemplateStructure[function]?.also {
+ bindingNewFunctionToParameterTemplateStructure[this@buildReplacement] = it
+ }
+ }
}
private fun buildReplacement(
@@ -246,8 +236,7 @@
noFakeOverride: Boolean,
useOldManglingScheme: Boolean,
body: IrFunction.() -> Unit,
- ): IrSimpleFunction = irFactory.buildFun {
- updateFrom(function)
+ ): IrSimpleFunction = commonBuildReplacementInner(function, noFakeOverride, body) {
if (function is IrConstructor) {
// The [updateFrom] call will set the modality to FINAL for constructors, while the JVM backend would use OPEN here.
modality = Modality.OPEN
@@ -260,62 +249,15 @@
else ->
replacementOrigin
}
- if (noFakeOverride) {
- isFakeOverride = false
- }
name = InlineClassAbi.mangledNameFor(function, mangleReturnTypes, useOldManglingScheme)
- returnType = function.returnType
- }.apply {
- parent = function.parent
- annotations = function.annotations
- copyTypeParameters(function.allTypeParameters)
- if (function.metadata != null) {
- metadata = function.metadata
- function.metadata = null
- }
- copyAttributes(function as? IrAttributeContainer)
-
- if (function is IrSimpleFunction) {
- val propertySymbol = function.correspondingPropertySymbol
- if (propertySymbol != null) {
- val property = propertyMap.getOrPut(propertySymbol) {
- irFactory.buildProperty {
- name = propertySymbol.owner.name
- updateFrom(propertySymbol.owner)
- }.apply {
- parent = propertySymbol.owner.parent
- copyAttributes(propertySymbol.owner)
- annotations = propertySymbol.owner.annotations
- // In case this property is declared in an object in another file which is not yet lowered, its backing field will
- // be made static later. We have to handle it here though, because this new property will be saved to the cache
- // and reused when lowering the same call in all subsequent files, which would be incorrect if it was unlowered.
- backingField = context.cachedDeclarations.getStaticBackingField(propertySymbol.owner)
- ?: propertySymbol.owner.backingField
- }
- }
- correspondingPropertySymbol = property.symbol
- when (function) {
- propertySymbol.owner.getter -> property.getter = this
- propertySymbol.owner.setter -> property.setter = this
- else -> error("Orphaned property getter/setter: ${function.render()}")
- }
- }
-
- overriddenSymbols = replaceOverriddenSymbols(function)
- }
-
- body()
}
+ override val getReplacementForRegularClassConstructor: (IrConstructor) -> IrConstructor? = alwaysNull()
+
override val replaceOverriddenSymbols: (IrSimpleFunction) -> List<IrSimpleFunctionSymbol> =
storageManager.createMemoizedFunction { irSimpleFunction ->
irSimpleFunction.overriddenSymbols.map {
computeOverrideReplacement(it.owner).symbol
}
}
-
- private fun computeOverrideReplacement(function: IrSimpleFunction): IrSimpleFunction =
- getReplacementFunction(function) ?: function.also {
- function.overriddenSymbols = replaceOverriddenSymbols(function)
- }
}
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedMultiFieldValueClassReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedMultiFieldValueClassReplacements.kt
index bac2f39..0895070 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedMultiFieldValueClassReplacements.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedMultiFieldValueClassReplacements.kt
@@ -5,11 +5,24 @@
package org.jetbrains.kotlin.backend.jvm
-import org.jetbrains.kotlin.ir.declarations.IrFactory
-import org.jetbrains.kotlin.ir.declarations.IrFunction
-import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
+import org.jetbrains.kotlin.backend.jvm.MemoizedMultiFieldValueClassReplacements.RemappedParameter.MultiFieldValueClassMapping
+import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
+import org.jetbrains.kotlin.backend.jvm.ir.extensionReceiverName
+import org.jetbrains.kotlin.backend.jvm.ir.findSuperDeclaration
+import org.jetbrains.kotlin.backend.jvm.ir.isStaticValueClassReplacement
+import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
+import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
+import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
+import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
+import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
+import org.jetbrains.kotlin.ir.types.IrSimpleType
+import org.jetbrains.kotlin.ir.types.IrType
+import org.jetbrains.kotlin.ir.types.defaultType
+import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.storage.LockBasedStorageManager
+import org.jetbrains.kotlin.utils.addToStdlib.safeAs
import java.util.concurrent.ConcurrentHashMap
/**
@@ -21,17 +34,281 @@
) : MemoizedValueClassAbstractReplacements(irFactory, context) {
private val storageManager = LockBasedStorageManager("multi-field-value-class-replacements")
- override val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
- internal val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
+ val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
+ val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
+ private val originalConstructorForConstructorReplacement: MutableMap<IrConstructor, IrConstructor> = ConcurrentHashMap()
+
+ private fun IrValueParameter.grouped(
+ name: String?,
+ substitutionMap: Map<IrTypeParameterSymbol, IrType>,
+ targetFunction: IrFunction,
+ originWhenFlattened: IrDeclarationOrigin,
+ ): RemappedParameter {
+ if (!type.needsMfvcFlattening()) return RemappedParameter.RegularMapping(
+ targetFunction.addValueParameter {
+ updateFrom(this@grouped)
+ this.name = this@grouped.name
+ index = targetFunction.valueParameters.size
+ }.apply {
+ copyAnnotationsFrom(this@grouped)
+ }
+ )
+ val rootMfvcNode = this@MemoizedMultiFieldValueClassReplacements.getRootMfvcNode(type.erasedUpperBound)!!
+ require(!hasDefaultValue()) { "Default parameters values are not supported for multi-field value classes" }
+ val newType = type.substitute(substitutionMap) as IrSimpleType
+ val localSubstitutionMap = makeTypeArgumentsFromType(newType)
+ val valueParameters = rootMfvcNode.mapLeaves { leaf ->
+ targetFunction.addValueParameter {
+ updateFrom(this@grouped)
+ this.name = Name.identifier("${name ?: this@grouped.name}-${leaf.fullFieldName}")
+ type = leaf.type.substitute(localSubstitutionMap)
+ origin = originWhenFlattened
+ index = targetFunction.valueParameters.size
+ }.apply {
+ defaultValue = null
+ copyAnnotationsFrom(this@grouped)
+ }
+ }
+ return MultiFieldValueClassMapping(rootMfvcNode, newType, valueParameters)
+ }
+
+ private fun List<IrValueParameter>.grouped(
+ name: String?,
+ substitutionMap: Map<IrTypeParameterSymbol, IrType>,
+ targetFunction: IrFunction,
+ originWhenFlattened: IrDeclarationOrigin,
+ ): List<RemappedParameter> = map { it.grouped(name, substitutionMap, targetFunction, originWhenFlattened) }
+
+ private fun buildReplacement(
+ function: IrFunction,
+ replacementOrigin: IrDeclarationOrigin,
+ noFakeOverride: Boolean = false,
+ body: IrFunction.() -> Unit,
+ ): IrSimpleFunction = commonBuildReplacementInner(function, noFakeOverride, body) {
+ origin = when {
+ function.origin == IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER ->
+ JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD
+
+ function is IrConstructor && function.constructedClass.isMultiFieldValueClass ->
+ JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR
+
+ else -> replacementOrigin
+ }
+ name = InlineClassAbi.mangledNameFor(function, mangleReturnTypes = false, useOldMangleRules = false)
+ }
+
+ private fun makeAndAddGroupedValueParametersFrom(
+ sourceFunction: IrFunction,
+ includeDispatcherReceiver: Boolean,
+ substitutionMap: Map<IrTypeParameterSymbol, IrType>,
+ targetFunction: IrFunction,
+ ): List<RemappedParameter> {
+ val newFlattenedParameters = mutableListOf<RemappedParameter>()
+ if (sourceFunction.dispatchReceiverParameter != null && includeDispatcherReceiver) {
+ newFlattenedParameters.add(
+ sourceFunction.parentAsClass.thisReceiver!!.grouped(
+ "\$dispatchReceiver",
+ substitutionMap,
+ targetFunction,
+ IrDeclarationOrigin.MOVED_DISPATCH_RECEIVER,
+ )
+ )
+ }
+ val contextReceivers = sourceFunction.valueParameters.take(sourceFunction.contextReceiverParametersCount)
+ .mapIndexed { index: Int, valueParameter: IrValueParameter ->
+ valueParameter.grouped(
+ "contextReceiver$index",
+ substitutionMap,
+ targetFunction,
+ IrDeclarationOrigin.MOVED_CONTEXT_RECEIVER,
+ )
+ }
+ newFlattenedParameters.addAll(contextReceivers)
+ sourceFunction.extensionReceiverParameter?.let {
+ val newParameters = it.grouped(
+ sourceFunction.extensionReceiverName(context.state),
+ substitutionMap,
+ targetFunction,
+ IrDeclarationOrigin.MOVED_EXTENSION_RECEIVER,
+ )
+ newFlattenedParameters.add(newParameters)
+ }
+ newFlattenedParameters += sourceFunction.valueParameters.drop(sourceFunction.contextReceiverParametersCount)
+ .grouped(name = null, substitutionMap, targetFunction, IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER)
+ return newFlattenedParameters
+ }
+
+ sealed class RemappedParameter {
+
+ abstract val valueParameters: List<IrValueParameter>
+
+ data class RegularMapping(val valueParameter: IrValueParameter) : RemappedParameter() {
+ override val valueParameters: List<IrValueParameter> = listOf(valueParameter)
+ }
+
+ data class MultiFieldValueClassMapping(
+ val rootMfvcNode: RootMfvcNode,
+ val typeArguments: TypeArguments,
+ override val valueParameters: List<IrValueParameter>,
+ ) : RemappedParameter() {
+ init {
+ require(valueParameters.size > 1) { "MFVC must have > 1 fields" }
+ }
+
+ constructor(rootMfvcNode: RootMfvcNode, type: IrSimpleType, valueParameters: List<IrValueParameter>) :
+ this(rootMfvcNode, makeTypeArgumentsFromType(type), valueParameters)
+
+ val boxedType: IrSimpleType = rootMfvcNode.type.substitute(typeArguments) as IrSimpleType
+ }
+ }
+
+ val bindingOldFunctionToParameterTemplateStructure: MutableMap<IrFunction, List<RemappedParameter>> = ConcurrentHashMap()
+ val bindingNewFunctionToParameterTemplateStructure: MutableMap<IrFunction, List<RemappedParameter>> =
+ object : ConcurrentHashMap<IrFunction, List<RemappedParameter>>() {
+ override fun put(key: IrFunction, value: List<RemappedParameter>): List<RemappedParameter>? {
+ require(key.explicitParametersCount == value.sumOf { it.valueParameters.size }) {
+ "Illegal structure $value for function ${key.dump()}"
+ }
+ return super.put(key, value)
+ }
+ }
+
+ override fun createStaticReplacement(function: IrFunction): IrSimpleFunction =
+ buildReplacement(function, JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT, noFakeOverride = true) {
+ originalFunctionForStaticReplacement[this] = function
+ typeParameters = listOf()
+ copyTypeParametersFrom(function.parentAsClass)
+ val substitutionMap = function.parentAsClass.typeParameters.map { it.symbol }.zip(typeParameters.map { it.defaultType }).toMap()
+ copyTypeParametersFrom(function, parameterMap = (function.parentAsClass.typeParameters zip typeParameters).toMap())
+ val newFlattenedParameters =
+ makeAndAddGroupedValueParametersFrom(function, includeDispatcherReceiver = true, substitutionMap, this)
+ bindingOldFunctionToParameterTemplateStructure[function] = newFlattenedParameters
+ bindingNewFunctionToParameterTemplateStructure[this] = newFlattenedParameters
+ }
+
+ override fun createMethodReplacement(function: IrFunction): IrSimpleFunction = buildReplacement(function, function.origin) {
+ originalFunctionForMethodReplacement[this] = function
+ dispatchReceiverParameter = function.dispatchReceiverParameter?.copyTo(this, index = -1)
+ val newFlattenedParameters = makeAndAddGroupedValueParametersFrom(function, includeDispatcherReceiver = false, mapOf(), this)
+ val receiver = dispatchReceiverParameter
+ val remappedParameters =
+ if (receiver != null) listOf(RemappedParameter.RegularMapping(receiver)) + newFlattenedParameters else newFlattenedParameters
+ bindingOldFunctionToParameterTemplateStructure[function] = remappedParameters
+ bindingNewFunctionToParameterTemplateStructure[this] = remappedParameters
+ }
+
+ private fun createConstructorReplacement(constructor: IrConstructor): IrConstructor {
+ val newConstructor = irFactory.buildConstructor {
+ updateFrom(constructor)
+ returnType = constructor.returnType
+ }.apply {
+ val newFlattenedParameters = makeAndAddGroupedValueParametersFrom(constructor, includeDispatcherReceiver = false, mapOf(), this)
+ bindingOldFunctionToParameterTemplateStructure[constructor] = newFlattenedParameters
+ parent = constructor.parent
+ copyTypeParametersFrom(constructor)
+ annotations = constructor.annotations
+ originalConstructorForConstructorReplacement[this] = constructor
+ bindingNewFunctionToParameterTemplateStructure[this] = newFlattenedParameters
+ }
+ return newConstructor
+ }
/**
- * Get a replacement for a function or a constructor.
+ * Get a function replacement for a function or a constructor.
*/
- override val getReplacementFunction: (IrFunction) -> IrSimpleFunction? = storageManager.createMemoizedFunctionWithNullableValues {
- TODO()
+ override val getReplacementFunction: (IrFunction) -> IrSimpleFunction? =
+ storageManager.createMemoizedFunctionWithNullableValues { function ->
+ when {
+ (function.isLocal && function is IrSimpleFunction && function.overriddenSymbols.isEmpty()) ||
+ (function.origin == IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR && function.visibility == DescriptorVisibilities.LOCAL) ||
+ function.isStaticValueClassReplacement ||
+ function.origin == IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER && function.isAccessor ||
+ function.origin == JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD ||
+ function.origin.isSynthetic && function.origin != IrDeclarationOrigin.SYNTHETIC_GENERATED_SAM_IMPLEMENTATION -> null
+
+ // Do not check for overridden symbols because it makes previously overriding function not overriding would break a code.
+ function.isMultiFieldValueClassFieldGetter -> makeMultiFieldValueClassFieldGetterReplacement(function)
+ function.parent.safeAs<IrClass>()?.isMultiFieldValueClass == true -> when {
+ function.isRemoveAtSpecialBuiltinStub() ->
+ null
+
+ function.isValueClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod() ||
+ function.origin == IrDeclarationOrigin.IR_BUILTINS_STUB ->
+ createMethodReplacement(function)
+
+ else ->
+ createStaticReplacement(function)
+ }
+
+ function is IrSimpleFunction && !function.isFromJava() &&
+ function.fullValueParameterList.any { it.type.needsMfvcFlattening() } &&
+ (!function.isFakeOverride ||
+ findSuperDeclaration(function, false, context.state.jvmDefaultMode)
+ in bindingOldFunctionToParameterTemplateStructure) ->
+ createMethodReplacement(function)
+
+ else -> null
+ }
+ }
+
+ private fun makeMultiFieldValueClassFieldGetterReplacement(function: IrFunction): IrSimpleFunction {
+ require(function is IrSimpleFunction && function.isMultiFieldValueClassFieldGetter) { "Illegal function:\n${function.dump()}" }
+ val replacement = getMfvcPropertyNode(function.correspondingPropertySymbol!!.owner)!!.unboxMethod
+ originalFunctionForMethodReplacement[replacement] = function
+ val templateParameters = listOf(RemappedParameter.RegularMapping(replacement.dispatchReceiverParameter!!))
+ bindingNewFunctionToParameterTemplateStructure[replacement] = templateParameters
+ bindingOldFunctionToParameterTemplateStructure[function] = templateParameters
+ return replacement
}
- override val replaceOverriddenSymbols: (IrSimpleFunction) -> List<IrSimpleFunctionSymbol> = storageManager.createMemoizedFunction {
- TODO()
+ override val getReplacementForRegularClassConstructor: (IrConstructor) -> IrConstructor? =
+ storageManager.createMemoizedFunctionWithNullableValues { constructor ->
+ when {
+ constructor.constructedClass.isMultiFieldValueClass -> null
+ constructor.isFromJava() -> null
+ constructor.fullValueParameterList.any { it.type.needsMfvcFlattening() } ->
+ createConstructorReplacement(constructor)
+
+ else -> null
+ }
+ }
+
+
+ override val replaceOverriddenSymbols: (IrSimpleFunction) -> List<IrSimpleFunctionSymbol> =
+ storageManager.createMemoizedFunction { irSimpleFunction ->
+ irSimpleFunction.overriddenSymbols.map {
+ computeOverrideReplacement(it.owner).symbol
+ }
+ }
+
+ val getRootMfvcNode: (IrClass) -> RootMfvcNode? = storageManager.createMemoizedFunctionWithNullableValues {
+ if (it.defaultType.needsMfvcFlattening()) getRootNode(context, it) else null
}
+
+ val getRegularClassMfvcPropertyNode: (IrProperty) -> IntermediateMfvcNode? =
+ storageManager.createMemoizedFunctionWithNullableValues { property: IrProperty ->
+ val parent = property.parent
+ when {
+ parent !is IrClass -> null
+ property.isFakeOverride -> null
+ property.getter.let { it != null && (it.contextReceiverParametersCount > 0 || it.extensionReceiverParameter != null) } -> null
+ useRootNode(parent, property) -> null
+ property.run { backingField?.type ?: getter?.returnType }?.needsMfvcFlattening() != true -> null
+ else -> createIntermediateNodeForMfvcPropertyOfRegularClass(parent, context, property)
+ }
+ }
+
+ fun getMfvcPropertyNode(property: IrProperty): NameableMfvcNode? {
+ val parent = property.parent
+ return when {
+ parent !is IrClass -> null
+ useRootNode(parent, property) -> getRootMfvcNode(parent)!![property.name]
+ else -> getRegularClassMfvcPropertyNode(property)
+ }
+ }
+
+ private fun useRootNode(
+ parent: IrClass,
+ property: IrProperty
+ ) = parent.isMultiFieldValueClass && (property.getter?.isStatic ?: property.backingField?.isStatic) == false
}
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedValueClassAbstractReplacements.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedValueClassAbstractReplacements.kt
index e94c6cd..1c7536e 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedValueClassAbstractReplacements.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MemoizedValueClassAbstractReplacements.kt
@@ -5,18 +5,113 @@
package org.jetbrains.kotlin.backend.jvm
-import org.jetbrains.kotlin.ir.declarations.IrFactory
-import org.jetbrains.kotlin.ir.declarations.IrFunction
-import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
+import org.jetbrains.kotlin.backend.jvm.ir.isCompiledToJvmDefault
+import org.jetbrains.kotlin.backend.jvm.ir.isJvmInterface
+import org.jetbrains.kotlin.descriptors.Modality
+import org.jetbrains.kotlin.ir.builders.declarations.IrFunctionBuilder
+import org.jetbrains.kotlin.ir.builders.declarations.buildFun
+import org.jetbrains.kotlin.ir.builders.declarations.buildProperty
+import org.jetbrains.kotlin.ir.declarations.*
+import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
+import org.jetbrains.kotlin.ir.types.isInt
+import org.jetbrains.kotlin.ir.util.*
+import java.util.concurrent.ConcurrentHashMap
abstract class MemoizedValueClassAbstractReplacements(protected val irFactory: IrFactory, protected val context: JvmBackendContext) {
+ private val propertyMap = ConcurrentHashMap<IrPropertySymbol, IrProperty>()
+
/**
* Get a replacement for a function or a constructor.
*/
abstract val getReplacementFunction: (IrFunction) -> IrSimpleFunction?
- abstract val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction>
+ protected fun IrFunction.isRemoveAtSpecialBuiltinStub() =
+ origin == IrDeclarationOrigin.IR_BUILTINS_STUB &&
+ name.asString() == "remove" &&
+ valueParameters.size == 1 &&
+ valueParameters[0].type.isInt()
+
+ protected fun IrFunction.isValueClassMemberFakeOverriddenFromJvmDefaultInterfaceMethod(): Boolean {
+ if (this !is IrSimpleFunction) return false
+ if (!this.isFakeOverride) return false
+ val parentClass = parentClassOrNull ?: return false
+ require(parentClass.isValue)
+
+ val overridden = resolveFakeOverride() ?: return false
+ if (!overridden.parentAsClass.isJvmInterface) return false
+ if (overridden.modality == Modality.ABSTRACT) return false
+
+ // We have a non-abstract interface member.
+ // It is a JVM default interface method if one of the following conditions are true:
+ // - it is a Java method,
+ // - it is a Kotlin function compiled to JVM default interface method.
+ return overridden.isFromJava() || overridden.isCompiledToJvmDefault(context.state.jvmDefaultMode)
+ }
+
+ protected abstract fun createStaticReplacement(function: IrFunction): IrSimpleFunction
+ protected abstract fun createMethodReplacement(function: IrFunction): IrSimpleFunction
+
+ protected fun commonBuildReplacementInner(
+ function: IrFunction,
+ noFakeOverride: Boolean,
+ body: IrFunction.() -> Unit,
+ builderBody: IrFunctionBuilder.() -> Unit,
+ ): IrSimpleFunction = irFactory.buildFun {
+ updateFrom(function)
+ builderBody()
+ if (noFakeOverride) {
+ isFakeOverride = false
+ }
+ returnType = function.returnType
+ }.apply {
+ parent = function.parent
+ annotations = function.annotations
+ copyTypeParameters(function.allTypeParameters)
+ if (function.metadata != null) {
+ metadata = function.metadata
+ function.metadata = null
+ }
+ copyAttributes(function as? IrAttributeContainer)
+
+ if (function is IrSimpleFunction) {
+ val propertySymbol = function.correspondingPropertySymbol
+ if (propertySymbol != null) {
+ val property = propertyMap.getOrPut(propertySymbol) {
+ irFactory.buildProperty {
+ name = propertySymbol.owner.name
+ updateFrom(propertySymbol.owner)
+ }.apply {
+ parent = propertySymbol.owner.parent
+ copyAttributes(propertySymbol.owner)
+ annotations = propertySymbol.owner.annotations
+ // In case this property is declared in an object in another file which is not yet lowered, its backing field will
+ // be made static later. We have to handle it here though, because this new property will be saved to the cache
+ // and reused when lowering the same call in all subsequent files, which would be incorrect if it was unlowered.
+ backingField = context.cachedDeclarations.getStaticBackingField(propertySymbol.owner)
+ ?: propertySymbol.owner.backingField
+ }
+ }
+ correspondingPropertySymbol = property.symbol
+ when (function) {
+ propertySymbol.owner.getter -> property.getter = this
+ propertySymbol.owner.setter -> property.setter = this
+ else -> error("Orphaned property getter/setter: ${function.render()}")
+ }
+ }
+
+ overriddenSymbols = replaceOverriddenSymbols(function)
+ }
+
+ body()
+ }
abstract val replaceOverriddenSymbols: (IrSimpleFunction) -> List<IrSimpleFunctionSymbol>
+
+ abstract val getReplacementForRegularClassConstructor: (IrConstructor) -> IrConstructor?
+
+ protected fun computeOverrideReplacement(function: IrSimpleFunction): IrSimpleFunction =
+ getReplacementFunction(function) ?: function.also {
+ function.overriddenSymbols = replaceOverriddenSymbols(function)
+ }
}
\ No newline at end of file
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNode.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNode.kt
new file mode 100644
index 0000000..2af2d73
--- /dev/null
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNode.kt
@@ -0,0 +1,457 @@
+/*
+ * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.backend.jvm
+
+import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
+import org.jetbrains.kotlin.backend.jvm.ir.isMultiFieldValueClassType
+import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
+import org.jetbrains.kotlin.ir.builders.IrBlockBuilder
+import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
+import org.jetbrains.kotlin.ir.builders.irCall
+import org.jetbrains.kotlin.ir.declarations.*
+import org.jetbrains.kotlin.ir.expressions.IrExpression
+import org.jetbrains.kotlin.ir.expressions.IrGetField
+import org.jetbrains.kotlin.ir.expressions.IrReturn
+import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
+import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
+import org.jetbrains.kotlin.ir.types.*
+import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.load.java.JvmAbi
+import org.jetbrains.kotlin.name.Name
+
+typealias TypeArguments = Map<IrTypeParameterSymbol, IrType>
+
+sealed interface MfvcNode {
+ val type: IrType
+ val leavesCount: Int
+
+ fun createInstanceFromBox(
+ scope: IrBlockBuilder,
+ typeArguments: TypeArguments,
+ receiver: IrExpression?,
+ accessType: AccessType,
+ saveVariable: (IrVariable) -> Unit,
+ ): ReceiverBasedMfvcNodeInstance
+}
+
+fun MfvcNode.createInstanceFromBox(
+ scope: IrBlockBuilder,
+ receiver: IrExpression,
+ accessType: AccessType,
+ saveVariable: (IrVariable) -> Unit
+) =
+ createInstanceFromBox(scope, makeTypeArgumentsFromType(receiver.type as IrSimpleType), receiver, accessType, saveVariable)
+
+fun MfvcNode.createInstanceFromValueDeclarationsAndBoxType(
+ scope: IrBuilderWithScope, type: IrSimpleType, name: Name, saveVariable: (IrVariable) -> Unit,
+): ValueDeclarationMfvcNodeInstance = createInstanceFromValueDeclarations(scope, makeTypeArgumentsFromType(type), name, saveVariable)
+
+fun MfvcNode.createInstanceFromValueDeclarations(
+ scope: IrBuilderWithScope, typeArguments: TypeArguments, name: Name, saveVariable: (IrVariable) -> Unit,
+): ValueDeclarationMfvcNodeInstance {
+ val valueDeclarations = mapLeaves {
+ scope.savableStandaloneVariable(
+ type = it.type,
+ name = listOf(name, it.fullFieldName).joinToString("-"),
+ origin = IrDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE,
+ saveVariable = saveVariable
+ )
+ }
+ return ValueDeclarationMfvcNodeInstance(this, typeArguments, valueDeclarations)
+}
+
+fun MfvcNode.createInstanceFromValueDeclarationsAndBoxType(
+ type: IrSimpleType, fieldValues: List<IrValueDeclaration>
+): ValueDeclarationMfvcNodeInstance =
+ ValueDeclarationMfvcNodeInstance(this, makeTypeArgumentsFromType(type), fieldValues)
+
+fun makeTypeArgumentsFromType(type: IrSimpleType): TypeArguments {
+ if (type.classifierOrNull !is IrClassSymbol) return mapOf()
+ val parameters = type.erasedUpperBound.typeParameters
+ val arguments = type.arguments
+ require(parameters.size == arguments.size) {
+ "Number of type parameters (${parameters.joinToString { it.render() }}) is not equal to number of type arguments (${arguments.joinToString { it.render() }})."
+ }
+ return parameters.zip(arguments) { parameter, argument -> parameter.symbol to (argument.typeOrNull ?: parameter.defaultType) }.toMap()
+
+}
+
+sealed interface NameableMfvcNode : MfvcNode {
+ val namedNodeImpl: NameableMfvcNodeImpl
+}
+
+val NameableMfvcNode.nameParts: List<IndexedNamePart>
+ get() = namedNodeImpl.nameParts
+val NameableMfvcNode.name: Name
+ get() = nameParts.last().name
+val NameableMfvcNode.index: Int
+ get() = nameParts.last().index
+val NameableMfvcNode.unboxMethod: IrSimpleFunction
+ get() = namedNodeImpl.unboxMethod
+val NameableMfvcNode.fullMethodName: Name
+ get() = namedNodeImpl.fullMethodName
+val NameableMfvcNode.fullFieldName: Name
+ get() = namedNodeImpl.fullFieldName
+val NameableMfvcNode.hasPureUnboxMethod: Boolean
+ get() = namedNodeImpl.hasPureUnboxMethod
+
+
+data class IndexedNamePart(val index: Int, val name: Name)
+
+class NameableMfvcNodeImpl(
+ rootPropertyName: String?,
+ val nameParts: List<IndexedNamePart>,
+ val unboxMethod: IrSimpleFunction,
+ val hasPureUnboxMethod: Boolean,
+) {
+ val fullMethodName = makeFullMethodName(rootPropertyName, nameParts)
+ val fullFieldName = makeFullFieldName(rootPropertyName, nameParts)
+
+ companion object {
+ @JvmStatic
+ fun makeFullMethodName(rootPropertyName: String?, nameParts: List<IndexedNamePart>): Name = if (rootPropertyName == null) {
+ val restJoined = nameParts.joinToString("-") { it.index.toString() }
+ Name.identifier("${KotlinTypeMapper.UNBOX_JVM_METHOD_NAME}-$restJoined")
+ } else {
+ val wholeName = (listOf(JvmAbi.getterName(rootPropertyName)) + nameParts.map { it.index.toString() }).joinToString("-")
+ Name.identifier(wholeName)
+ }
+
+ @JvmStatic
+ fun makeFullFieldName(rootPropertyName: String?, nameParts: List<IndexedNamePart>): Name {
+ val joined = (listOf(rootPropertyName ?: "field") + nameParts.map { it.index.toString() }).joinToString("-")
+ return Name.identifier(joined)
+ }
+ }
+}
+
+fun MfvcNode.getSubnodeAndIndices(name: Name): Pair<NameableMfvcNode, IntRange>? {
+ val node = (this as? MfvcNodeWithSubnodes)?.get(name) ?: return null
+ val indices = subnodeIndices[node] ?: error("existing node without indices")
+ return node to indices
+}
+
+sealed interface MfvcNodeWithSubnodes : MfvcNode {
+ abstract override val type: IrSimpleType
+ val boxMethod: IrSimpleFunction
+ val leavesUnboxMethods: List<IrSimpleFunction>?
+ val subnodesImpl: MfvcNodeWithSubnodesImpl
+}
+
+fun MfvcNodeWithSubnodes.makeBoxedExpression(
+ scope: IrBuilderWithScope, typeArguments: TypeArguments, valueArguments: List<IrExpression>
+): IrExpression = scope.irCall(boxMethod).apply {
+ val resultType = type.substitute(typeArguments) as IrSimpleType
+ require(resultType.erasedUpperBound == type.erasedUpperBound) { "Substitution of $type led to $resultType" }
+ for ((index, typeArgument) in resultType.arguments.withIndex()) {
+ putTypeArgument(index, typeArgument.typeOrNull ?: resultType.erasedUpperBound.typeParameters[index].defaultType)
+ }
+ for ((index, valueArgument) in valueArguments.withIndex()) {
+ putValueArgument(index, valueArgument)
+ }
+}
+
+operator fun MfvcNodeWithSubnodes.get(names: List<Name>): MfvcNode? {
+ var cur: MfvcNode = this
+ for (name in names) {
+ cur = (cur as? MfvcNodeWithSubnodes)?.get(name) ?: return null
+ }
+ return cur
+}
+
+private fun List<Any>.allEqual() = all { it == first() }
+
+class MfvcNodeWithSubnodesImpl(val subnodes: List<NameableMfvcNode>, unboxMethod: IrSimpleFunction?) {
+ init {
+ require(subnodes.isNotEmpty())
+ require(subnodes.map { it.nameParts.dropLast(1) }.allEqual())
+ require(subnodes.map { it.index } == subnodes.indices.toList())
+ }
+
+ private val mapping = subnodes.associateBy { it.name }.also { mapping ->
+ require(mapping.size == subnodes.size) {
+ subnodes
+ .groupBy { it.name }
+ .filterValues { it.size > 1 }
+ .entries.joinToString(prefix = "Repeating node names found: ") { (name, nodes) -> "${nodes.size} nodes with name '$name'" }
+ }
+ }
+
+ operator fun get(name: Name): NameableMfvcNode? = mapping[name]
+ val leaves: List<LeafMfvcNode> = mapLeaves { it }
+ val fields: List<IrField>? = mapLeaves { it.field }.run {
+ @Suppress("UNCHECKED_CAST")
+ when {
+ all { it == null } -> null
+ all { it != null } -> this as List<IrField>
+ else -> error("IrFields can either exist all or none for MFVC property")
+ }
+ }
+
+ val allInnerUnboxMethods: List<IrSimpleFunction> = subnodes.flatMap { subnode ->
+ when (subnode) {
+ is MfvcNodeWithSubnodes -> subnode.allUnboxMethods
+ is LeafMfvcNode -> listOf(subnode.unboxMethod)
+ }
+ }
+
+ val allUnboxMethods = allInnerUnboxMethods + listOfNotNull(unboxMethod)
+
+ val indices: IntRange = leaves.indices
+
+ val subnodeIndices: Map<NameableMfvcNode, IntRange> = buildMap {
+ var offset = 0
+ for (node in subnodes) {
+ when (node) {
+ is IntermediateMfvcNode -> {
+ val nodeSize = node.leavesCount
+ put(node, offset until offset + nodeSize)
+ putAll(node.subnodeIndices.mapValues { (_, v) -> (v.first + offset)..(v.last + offset) })
+ offset += nodeSize
+ }
+
+ is LeafMfvcNode -> {
+ put(node, offset..offset)
+ offset++
+ }
+ }
+ }
+ }
+}
+
+val MfvcNodeWithSubnodes.subnodes: List<NameableMfvcNode>
+ get() = subnodesImpl.subnodes
+
+operator fun MfvcNodeWithSubnodes.get(name: Name): NameableMfvcNode? = subnodesImpl[name]
+val MfvcNodeWithSubnodes.leaves: List<LeafMfvcNode>
+ get() = subnodesImpl.leaves
+val MfvcNodeWithSubnodes.fields: List<IrField>?
+ get() = subnodesImpl.fields
+val RootMfvcNode.fields: List<IrField>
+ get() = subnodesImpl.fields!!
+val MfvcNodeWithSubnodes.indices: IntRange
+ get() = subnodesImpl.indices
+val MfvcNodeWithSubnodes.subnodeIndices: Map<NameableMfvcNode, IntRange>
+ get() = subnodesImpl.subnodeIndices
+val MfvcNodeWithSubnodes.allUnboxMethods: List<IrSimpleFunction>
+ get() = subnodesImpl.allUnboxMethods
+val MfvcNodeWithSubnodes.allInnerUnboxMethods: List<IrSimpleFunction>
+ get() = subnodesImpl.allInnerUnboxMethods
+
+inline fun <R> MfvcNode.mapLeaves(crossinline f: (LeafMfvcNode) -> R): List<R> = flatMapLeaves { listOf(f(it)) }
+
+fun <R> MfvcNode.flatMapLeaves(f: (LeafMfvcNode) -> List<R>): List<R> = when (this) {
+ is MfvcNodeWithSubnodes -> subnodes.flatMap { it.flatMapLeaves(f) }
+ is LeafMfvcNode -> f(this)
+}
+
+inline fun <R> MfvcNodeWithSubnodesImpl.mapLeaves(crossinline f: (LeafMfvcNode) -> R): List<R> = subnodes.flatMap { it.mapLeaves(f) }
+
+
+private fun requireSameClasses(vararg classes: IrClass?) {
+ val notNulls = classes.filterNotNull()
+ require(notNulls.zipWithNext { a, b -> a == b }.all { it }) {
+ "Found different classes: ${notNulls.joinToString("\n") { it.render() }}"
+ }
+}
+
+private fun requireSameSizes(vararg sizes: Int) {
+ require(sizes.asList().zipWithNext { a, b -> a == b }.all { it }) {
+ "Found different sizes: ${sizes.joinToString()}"
+ }
+}
+
+private fun validateGettingAccessorParameters(function: IrSimpleFunction) {
+ require(function.valueParameters.isEmpty()) { "Value parameters are not expected for ${function.render()}" }
+ require(function.extensionReceiverParameter == null) { "Extension receiver is not expected for ${function.render()}" }
+ require(function.contextReceiverParametersCount == 0) { "Context receivers is not expected for ${function.render()}" }
+ require(function.typeParameters.isEmpty()) { "Type parameters are not expected for ${function.render()}" }
+}
+
+class LeafMfvcNode(
+ override val type: IrType,
+ rootPropertyName: String?,
+ nameParts: List<IndexedNamePart>,
+ val field: IrField?,
+ unboxMethod: IrSimpleFunction,
+ hasPureUnboxMethod: Boolean,
+) : NameableMfvcNode {
+ override val namedNodeImpl: NameableMfvcNodeImpl = NameableMfvcNodeImpl(rootPropertyName, nameParts, unboxMethod, hasPureUnboxMethod)
+
+ override val leavesCount: Int
+ get() = 1
+
+ init {
+ requireSameClasses(
+ field?.parentAsClass?.takeUnless { unboxMethod.parentAsClass.isCompanion },
+ unboxMethod.parentAsClass,
+ (unboxMethod.dispatchReceiverParameter?.type as? IrSimpleType)?.erasedUpperBound,
+ )
+ validateGettingAccessorParameters(unboxMethod)
+ }
+
+ override fun createInstanceFromBox(
+ scope: IrBlockBuilder,
+ typeArguments: TypeArguments,
+ receiver: IrExpression?,
+ accessType: AccessType,
+ saveVariable: (IrVariable) -> Unit,
+ ) = ReceiverBasedMfvcNodeInstance(
+ scope, this, typeArguments, receiver, field?.let(::listOf), unboxMethod, accessType, saveVariable
+ )
+
+ override fun toString(): String = "$fullFieldName: ${type.render()}"
+}
+
+val MfvcNode.fields
+ get() = when (this) {
+ is MfvcNodeWithSubnodes -> this.fields
+ is LeafMfvcNode -> field?.let(::listOf)
+ }
+
+class IntermediateMfvcNode(
+ override val type: IrSimpleType,
+ rootPropertyName: String?,
+ nameParts: List<IndexedNamePart>,
+ subnodes: List<NameableMfvcNode>,
+ unboxMethod: IrSimpleFunction,
+ hasPureUnboxMethod: Boolean,
+ val rootNode: RootMfvcNode, // root node corresponding type of the node
+) : NameableMfvcNode, MfvcNodeWithSubnodes {
+ override val namedNodeImpl: NameableMfvcNodeImpl = NameableMfvcNodeImpl(rootPropertyName, nameParts, unboxMethod, hasPureUnboxMethod)
+ override val subnodesImpl: MfvcNodeWithSubnodesImpl = MfvcNodeWithSubnodesImpl(subnodes, unboxMethod)
+ override val leavesCount
+ get() = leaves.size
+
+ init {
+ require(type.needsMfvcFlattening()) { "MFVC type expected but got% ${type.render()}" }
+ require(type.erasedUpperBound == rootNode.mfvc) {
+ "Root node must point at the RootNode of class ${type.erasedUpperBound.render()} but points at ${rootNode.mfvc.render()}"
+ }
+ requireSameClasses(
+ unboxMethod.parentAsClass,
+ (unboxMethod.dispatchReceiverParameter?.type as IrSimpleType?)?.erasedUpperBound,
+ )
+ validateGettingAccessorParameters(unboxMethod)
+ }
+
+ override val boxMethod: IrSimpleFunction
+ get() = rootNode.boxMethod
+
+ override val leavesUnboxMethods: List<IrSimpleFunction> = collectLeavesUnboxMethods()
+
+ override fun createInstanceFromBox(
+ scope: IrBlockBuilder,
+ typeArguments: TypeArguments,
+ receiver: IrExpression?,
+ accessType: AccessType,
+ saveVariable: (IrVariable) -> Unit,
+ ) = ReceiverBasedMfvcNodeInstance(
+ scope, this, typeArguments, receiver, fields, unboxMethod, accessType, saveVariable
+ )
+
+ override fun toString(): String =
+ "$fullFieldName: ${type.render()}\n${subnodes.joinToString("\n").prependIndent(" ")}"
+}
+
+private fun MfvcNodeWithSubnodes.collectLeavesUnboxMethods() = mapLeaves { it.unboxMethod }
+
+fun IrSimpleFunction.isDefaultGetter(expectedField: IrField? = null): Boolean {
+ if (!isGetter) return false
+ if (expectedField != null && correspondingPropertySymbol?.owner?.backingField != expectedField) return false
+ val statement = (body?.statements?.singleOrNull() as? IrReturn)?.value as? IrGetField ?: return false
+ val actualField = statement.symbol.owner
+ return expectedField == null || actualField == expectedField || parentAsClass.isCompanion && actualField.correspondingPropertySymbol == correspondingPropertySymbol
+}
+
+fun IrSimpleFunction.getGetterField(): IrField? {
+ if (!isGetter) return null
+ val statement = (body?.statements?.singleOrNull() as? IrReturn)?.value as? IrGetField ?: return null
+ return statement.symbol.owner
+}
+
+class RootMfvcNode internal constructor(
+ val mfvc: IrClass,
+ subnodes: List<NameableMfvcNode>,
+ val oldPrimaryConstructor: IrConstructor,
+ val newPrimaryConstructor: IrConstructor,
+ val primaryConstructorImpl: IrSimpleFunction,
+ override val boxMethod: IrSimpleFunction,
+ val specializedEqualsMethod: IrSimpleFunction,
+) : MfvcNodeWithSubnodes {
+ override val subnodesImpl: MfvcNodeWithSubnodesImpl = MfvcNodeWithSubnodesImpl(subnodes, null)
+ override val type: IrSimpleType = mfvc.defaultType
+
+ override val leavesCount: Int
+ get() = leaves.size
+
+ override val leavesUnboxMethods: List<IrSimpleFunction> = collectLeavesUnboxMethods()
+
+ init {
+ require(type.needsMfvcFlattening()) { "MFVC type expected but got% ${type.render()}" }
+ for (constructor in listOf(oldPrimaryConstructor, newPrimaryConstructor)) {
+ require(constructor.isPrimary) { "Expected a primary constructor but got:\n${constructor.dump()}" }
+ }
+ requireSameClasses(
+ mfvc,
+ oldPrimaryConstructor.parentAsClass,
+ newPrimaryConstructor.parentAsClass,
+ primaryConstructorImpl.parentAsClass,
+ boxMethod.parentAsClass,
+ specializedEqualsMethod.parentAsClass,
+ oldPrimaryConstructor.constructedClass,
+ newPrimaryConstructor.constructedClass,
+ boxMethod.returnType.erasedUpperBound,
+ )
+ require(primaryConstructorImpl.returnType.isUnit()) {
+ "Constructor-impl must return Unit but returns ${primaryConstructorImpl.returnType.render()}"
+ }
+ require(specializedEqualsMethod.returnType.isBoolean()) {
+ "Specialized equals method must return Boolean but returns ${primaryConstructorImpl.returnType.render()}"
+ }
+ require(oldPrimaryConstructor.typeParameters.isEmpty() && newPrimaryConstructor.typeParameters.isEmpty()) {
+ "Constructors do not support type parameters yet"
+ }
+ requireSameSizes(
+ mfvc.typeParameters.size,
+ boxMethod.typeParameters.size,
+ primaryConstructorImpl.typeParameters.size,
+ )
+ require(specializedEqualsMethod.typeParameters.size == 2 * mfvc.typeParameters.size) {
+ "Specialized equals method must contain twice more type parameters than corresponding MFVC ${mfvc.typeParameters.map { it.defaultType.render() }} but has ${specializedEqualsMethod.typeParameters.map { it.defaultType.render() }}"
+ }
+ requireSameSizes(oldPrimaryConstructor.valueParameters.size, subnodes.size)
+ requireSameSizes(
+ leavesCount,
+ newPrimaryConstructor.valueParameters.size,
+ primaryConstructorImpl.valueParameters.size,
+ boxMethod.valueParameters.size,
+ )
+ require(specializedEqualsMethod.valueParameters.size == 2 * leavesCount) {
+ "Specialized equals method must contain twice more value parameters than corresponding primary constructor of the MFVC ${mfvc.typeParameters.map { it.defaultType.render() }} but has ${specializedEqualsMethod.typeParameters.map { it.defaultType.render() }}"
+ }
+ for (function in listOf(oldPrimaryConstructor, newPrimaryConstructor, primaryConstructorImpl, boxMethod, specializedEqualsMethod)) {
+ require(function.extensionReceiverParameter == null) { "Extension receiver is not expected for ${function.render()}" }
+ require(function.contextReceiverParametersCount == 0) { "Context receivers are not expected for ${function.render()}" }
+ }
+ }
+
+ override fun createInstanceFromBox(
+ scope: IrBlockBuilder,
+ typeArguments: TypeArguments,
+ receiver: IrExpression?,
+ accessType: AccessType,
+ saveVariable: (IrVariable) -> Unit,
+ ) = ReceiverBasedMfvcNodeInstance(scope, this, typeArguments, receiver, fields, null, accessType, saveVariable)
+
+ override fun toString(): String =
+ "${type.render()}\n${subnodes.joinToString("\n").prependIndent(" ")}"
+}
+
+fun IrType.needsMfvcFlattening(): Boolean = isMultiFieldValueClassType() && !isNullable() ||
+ classifierOrNull.let { classifier ->
+ classifier is IrTypeParameterSymbol && classifier.owner.superTypes.any { it.needsMfvcFlattening() }
+ } // add not is annotated as @UseBox etc
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeFactory.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeFactory.kt
new file mode 100644
index 0000000..c4de020
--- /dev/null
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeFactory.kt
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.backend.jvm
+
+import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
+import org.jetbrains.kotlin.backend.common.lower.irBlockBody
+import org.jetbrains.kotlin.backend.common.lower.parents
+import org.jetbrains.kotlin.backend.jvm.ir.createJvmIrBuilder
+import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
+import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
+import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
+import org.jetbrains.kotlin.descriptors.Modality
+import org.jetbrains.kotlin.descriptors.MultiFieldValueClassRepresentation
+import org.jetbrains.kotlin.ir.IrElement
+import org.jetbrains.kotlin.ir.builders.*
+import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter
+import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
+import org.jetbrains.kotlin.ir.builders.declarations.buildField
+import org.jetbrains.kotlin.ir.builders.declarations.buildFun
+import org.jetbrains.kotlin.ir.declarations.*
+import org.jetbrains.kotlin.ir.deepCopyWithVariables
+import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
+import org.jetbrains.kotlin.ir.expressions.IrExpression
+import org.jetbrains.kotlin.ir.types.IrSimpleType
+import org.jetbrains.kotlin.ir.types.IrType
+import org.jetbrains.kotlin.ir.types.defaultType
+import org.jetbrains.kotlin.ir.util.*
+import org.jetbrains.kotlin.load.java.JvmAbi
+import org.jetbrains.kotlin.name.Name
+import org.jetbrains.kotlin.resolve.InlineClassDescriptorResolver
+
+fun createLeafMfvcNode(
+ parent: IrDeclarationContainer,
+ context: JvmBackendContext,
+ type: IrType,
+ rootPropertyName: String?,
+ nameParts: List<IndexedNamePart>,
+ fieldAnnotations: List<IrConstructorCall>,
+ static: Boolean,
+ overriddenNode: LeafMfvcNode?,
+ defaultMethodsImplementationSourceNode: Pair<IrSimpleFunction?, LeafMfvcNode>?, // used if the getter was custom and need to call it.
+ oldGetter: IrSimpleFunction?,
+ modality: Modality,
+ oldPropertyBackingField: IrField?,
+): LeafMfvcNode {
+ require(!type.needsMfvcFlattening()) { "${type.render()} requires flattening" }
+
+ val fullMethodName = NameableMfvcNodeImpl.makeFullMethodName(rootPropertyName, nameParts)
+ val fullFieldName = NameableMfvcNodeImpl.makeFullFieldName(rootPropertyName, nameParts)
+
+ val field = oldPropertyBackingField?.let { oldBackingField ->
+ context.irFactory.buildField {
+ updateFrom(oldBackingField)
+ this.name = fullFieldName
+ this.type = type
+ this.visibility = DescriptorVisibilities.PRIVATE
+ this.metadata = null
+ }.apply {
+ this.parent = oldBackingField.parent
+ this.annotations = fieldAnnotations.map { it.deepCopyWithVariables() }
+ }
+ }
+
+ val unboxMethod = makeUnboxMethod(
+ context,
+ fullMethodName,
+ type,
+ parent,
+ overriddenNode,
+ static,
+ defaultMethodsImplementationSourceNode,
+ oldGetter,
+ modality,
+ ) { receiver -> irGetField(if (field!!.isStatic) null else irGet(receiver!!), field) }
+
+ return LeafMfvcNode(type, rootPropertyName, nameParts, field, unboxMethod, defaultMethodsImplementationSourceNode.isPure())
+}
+
+private fun Pair<IrSimpleFunction?, NameableMfvcNode>?.isPure(): Boolean {
+ val (outer, inner) = this ?: return true
+ return outer == null && inner.hasPureUnboxMethod
+}
+
+private fun makeUnboxMethod(
+ context: JvmBackendContext,
+ fullMethodName: Name,
+ type: IrType,
+ parent: IrDeclarationParent,
+ overriddenNode: NameableMfvcNode?,
+ static: Boolean,
+ defaultMethodsImplementationSourceNode: Pair<IrSimpleFunction?, NameableMfvcNode>?,
+ oldGetter: IrSimpleFunction?,
+ modality: Modality,
+ makeOptimizedExpression: IrBuilderWithScope.(receiver: IrValueDeclaration?) -> IrExpression,
+): IrSimpleFunction {
+ val res = oldGetter ?: context.irFactory.buildFun {
+ this.name = fullMethodName
+ this.origin = JvmLoweredDeclarationOrigin.SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER
+ this.returnType = type
+ this.modality = modality
+ }.apply {
+ this.parent = parent
+ overriddenSymbols = overriddenNode?.let { it.unboxMethod.overriddenSymbols + it.unboxMethod.symbol } ?: listOf()
+ if (!static) {
+ createDispatchReceiverParameter()
+ }
+ }
+
+ return res.apply {
+ body = with(context.createJvmIrBuilder(this.symbol)) {
+ val receiver = dispatchReceiverParameter
+ if (defaultMethodsImplementationSourceNode == null) {
+ irExprBody(makeOptimizedExpression(receiver))
+ } else {
+ val (outer, inner) = defaultMethodsImplementationSourceNode
+ val receiverExpression = receiver?.let { irGet(it) }
+ val outerCall = if (outer == null) receiverExpression else irCall(outer).apply { dispatchReceiver = receiverExpression }
+ val innerCall = irCall(inner.unboxMethod).apply { dispatchReceiver = outerCall }
+ irExprBody(innerCall)
+ }
+ }
+ }
+}
+
+fun createNameableMfvcNodes(
+ parent: IrDeclarationContainer,
+ context: JvmBackendContext,
+ type: IrSimpleType,
+ typeArguments: TypeArguments,
+ rootPropertyName: String?,
+ nameParts: List<IndexedNamePart>,
+ fieldAnnotations: List<IrConstructorCall>,
+ static: Boolean,
+ overriddenNode: NameableMfvcNode?,
+ defaultMethodsImplementationSourceNode: Pair<IrSimpleFunction?, NameableMfvcNode>?, // used if the getter was custom and need to call it.
+ oldGetter: IrSimpleFunction?,
+ modality: Modality,
+ oldPropertyBackingField: IrField?,
+): NameableMfvcNode = if (type.needsMfvcFlattening()) createIntermediateMfvcNode(
+ parent,
+ context,
+ type,
+ typeArguments,
+ rootPropertyName,
+ nameParts,
+ fieldAnnotations,
+ static,
+ overriddenNode as IntermediateMfvcNode?,
+ defaultMethodsImplementationSourceNode?.let { (outer, inner) -> outer to (inner as IntermediateMfvcNode) },
+ oldGetter,
+ modality,
+ oldPropertyBackingField,
+) else createLeafMfvcNode(
+ parent,
+ context,
+ type,
+ rootPropertyName,
+ nameParts,
+ fieldAnnotations,
+ static,
+ overriddenNode as LeafMfvcNode?,
+ defaultMethodsImplementationSourceNode?.let { (outer, inner) -> outer to (inner as LeafMfvcNode) },
+ oldGetter,
+ modality,
+ oldPropertyBackingField
+)
+
+fun createIntermediateMfvcNode(
+ parent: IrDeclarationContainer,
+ context: JvmBackendContext,
+ type: IrSimpleType,
+ typeArguments: TypeArguments,
+ rootPropertyName: String?,
+ nameParts: List<IndexedNamePart>,
+ fieldAnnotations: List<IrConstructorCall>,
+ static: Boolean,
+ overriddenNode: IntermediateMfvcNode?,
+ defaultMethodsImplementationSourceNode: Pair<IrSimpleFunction?, IntermediateMfvcNode>?, // used if the getter was custom and need to call it.
+ oldGetter: IrSimpleFunction?,
+ modality: Modality,
+ oldPropertyBackingField: IrField?,
+): IntermediateMfvcNode {
+ require(type.needsMfvcFlattening()) { "${type.render()} does not require flattening" }
+ val valueClass = type.erasedUpperBound
+ val representation = valueClass.multiFieldValueClassRepresentation!!
+
+ val replacements = context.multiFieldValueClassReplacements
+ val rootNode = replacements.getRootMfvcNode(valueClass)!!
+
+ val oldField = oldGetter?.correspondingPropertySymbol?.owner?.backingField
+
+ val shadowBackingFieldProperty = if (oldField == null) oldGetter?.getGetterField()?.correspondingPropertySymbol?.owner else null
+ val useOldGetter = oldGetter != null && (oldField == null || !oldGetter.isDefaultGetter(oldField))
+
+ val subnodes = representation.underlyingPropertyNamesToTypes.mapIndexed { index, (name, type) ->
+ val newType = type.substitute(typeArguments) as IrSimpleType
+ val newTypeArguments = typeArguments.toMutableMap().apply { putAll(makeTypeArgumentsFromType(newType)) }
+ val newDefaultMethodsImplementationSourceNode = when {
+ defaultMethodsImplementationSourceNode != null -> {
+ val (outer, inner) = defaultMethodsImplementationSourceNode
+ require(!useOldGetter) { "Multiple non-default getters:\n\n${outer?.dump()}\n\n${oldGetter?.dump()}" }
+ outer to inner[name]!!
+ }
+
+ shadowBackingFieldProperty != null -> null to replacements.getMfvcPropertyNode(shadowBackingFieldProperty)!!
+ useOldGetter -> oldGetter!! to rootNode[name]!!
+ else -> null
+ }
+ createNameableMfvcNodes(
+ parent,
+ context,
+ newType,
+ newTypeArguments,
+ rootPropertyName,
+ nameParts + IndexedNamePart(index, name),
+ fieldAnnotations,
+ static,
+ overriddenNode?.let { it[name]!! },
+ newDefaultMethodsImplementationSourceNode,
+ null,
+ modality,
+ oldPropertyBackingField,
+ )
+ }
+
+ val fullMethodName = NameableMfvcNodeImpl.makeFullMethodName(rootPropertyName, nameParts)
+
+ val unboxMethod = if (useOldGetter) oldGetter!! else makeUnboxMethod(
+ context, fullMethodName, type, parent, overriddenNode, static, defaultMethodsImplementationSourceNode, oldGetter, modality
+ ) { receiver ->
+ val valueArguments = subnodes.flatMap { it.fields!! }
+ .map { field -> irGetField(if (field.isStatic) null else irGet(receiver!!), field) }
+ rootNode.makeBoxedExpression(this, typeArguments, valueArguments)
+ }
+
+ val hasPureUnboxMethod = defaultMethodsImplementationSourceNode.isPure() && subnodes.all { it.hasPureUnboxMethod }
+ return IntermediateMfvcNode(
+ type, rootPropertyName, nameParts, subnodes, unboxMethod, hasPureUnboxMethod, rootNode
+ )
+}
+
+fun collectPropertiesAfterLowering(irClass: IrClass) = LinkedHashSet<IrProperty>().apply {
+ for (element in irClass.declarations) {
+ if (element is IrField) {
+ element.correspondingPropertySymbol?.owner?.let { add(it) }
+ } else if (element is IrSimpleFunction && element.extensionReceiverParameter == null && element.contextReceiverParametersCount == 0) {
+ element.correspondingPropertySymbol?.owner?.let { add(it) }
+ }
+ }
+}
+
+private fun IrProperty.isStatic(currentContainer: IrDeclarationContainer) =
+ getterIfDeclared(currentContainer)?.isStatic ?: backingField?.isStatic ?: error("Property without both getter and backing field")
+
+fun getRootNode(context: JvmBackendContext, mfvc: IrClass): RootMfvcNode {
+ require(mfvc.isMultiFieldValueClass) { "${mfvc.defaultType.render()} does not require flattening" }
+ val oldPrimaryConstructor = mfvc.primaryConstructor!!
+ val representation = mfvc.multiFieldValueClassRepresentation!!
+ val properties = collectPropertiesAfterLowering(mfvc).associateBy { it.isStatic(mfvc) to it.name }
+
+ val subnodes = makeRootMfvcNodeSubnodes(representation, properties, context, mfvc)
+
+ val mfvcNodeWithSubnodesImpl = MfvcNodeWithSubnodesImpl(subnodes, null)
+ val leaves = mfvcNodeWithSubnodesImpl.leaves
+ val fields = mfvcNodeWithSubnodesImpl.fields!!
+
+ val newPrimaryConstructor = makeMfvcPrimaryConstructor(context, oldPrimaryConstructor, mfvc, leaves, fields)
+ val primaryConstructorImpl = makePrimaryConstructorImpl(context, oldPrimaryConstructor, mfvc, leaves)
+ val boxMethod = makeBoxMethod(context, mfvc, leaves, newPrimaryConstructor)
+ val specializedEqualsMethod = makeSpecializedEqualsMethod(context, mfvc, leaves)
+
+ return RootMfvcNode(
+ mfvc, subnodes, oldPrimaryConstructor, newPrimaryConstructor, primaryConstructorImpl, boxMethod, specializedEqualsMethod
+ )
+}
+
+private fun makeSpecializedEqualsMethod(
+ context: JvmBackendContext,
+ mfvc: IrClass,
+ leaves: List<LeafMfvcNode>
+) = context.irFactory.buildFun {
+ name = InlineClassDescriptorResolver.SPECIALIZED_EQUALS_NAME
+ // TODO: Revisit this once we allow user defined equals methods in value classes.
+ origin = JvmLoweredDeclarationOrigin.MULTI_FIELD_VALUE_CLASS_GENERATED_IMPL_METHOD
+ returnType = context.irBuiltIns.booleanType
+}.apply {
+ parent = mfvc
+ copyTypeParametersFrom(mfvc)
+ val typeParametersHalf1 = typeParameters.apply {
+ for (it in this) {
+ it.name = Name.guessByFirstCharacter("${it.name.asString()}1")
+ }
+ }
+
+ copyTypeParametersFrom(mfvc)
+ val typeParametersHalf2 = typeParameters.drop(typeParametersHalf1.size).apply {
+ for (it in this) {
+ it.name = Name.guessByFirstCharacter("${it.name.asString()}2")
+ }
+ }
+
+ val valueParametersHalf1 = leaves.map { leaf ->
+ addValueParameter {
+ this.name = Name.guessByFirstCharacter(
+ "${InlineClassDescriptorResolver.SPECIALIZED_EQUALS_FIRST_PARAMETER_NAME}$${leaf.fullFieldName}"
+ )
+ this.type = leaf.type.substitute(mfvc.typeParameters, typeParametersHalf1.map { it.defaultType })
+ }
+ }
+
+ val valueParametersHalf2 = leaves.map { leaf ->
+ addValueParameter {
+ this.name = Name.guessByFirstCharacter(
+ "${InlineClassDescriptorResolver.SPECIALIZED_EQUALS_SECOND_PARAMETER_NAME}$${leaf.fullFieldName}"
+ )
+ this.type = leaf.type.substitute(mfvc.typeParameters, typeParametersHalf2.map { it.defaultType })
+ }
+ }
+
+ body = with(context.createJvmIrBuilder(this.symbol)) {
+ val conjunctions = valueParametersHalf1.zip(valueParametersHalf2) { f1, f2 -> irEquals(irGet(f1), irGet(f2)) }
+ irExprBody(conjunctions.reduce { acc, current ->
+ irCall(context.irBuiltIns.andandSymbol).apply {
+ putValueArgument(0, acc)
+ putValueArgument(1, current)
+ }
+ })
+ }
+}
+
+private fun makeBoxMethod(
+ context: JvmBackendContext,
+ mfvc: IrClass,
+ leaves: List<LeafMfvcNode>,
+ newPrimaryConstructor: IrConstructor
+) = context.irFactory.buildFun {
+ name = Name.identifier(KotlinTypeMapper.BOX_JVM_METHOD_NAME)
+ origin = JvmLoweredDeclarationOrigin.SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER
+ returnType = mfvc.defaultType
+}.apply {
+ parent = mfvc
+ copyTypeParametersFrom(mfvc)
+ val mapping = mfvc.typeParameters.zip(typeParameters) { classTypeParameter, functionTypeParameter ->
+ classTypeParameter.symbol to functionTypeParameter.defaultType
+ }.toMap()
+ returnType = returnType.substitute(mapping)
+ val parameters = leaves.map { leaf -> addValueParameter(leaf.fullFieldName, leaf.type.substitute(mapping)) }
+ body = with(context.createJvmIrBuilder(this.symbol)) {
+ irExprBody(irCall(newPrimaryConstructor).apply {
+ for ((index, parameter) in parameters.withIndex()) {
+ putValueArgument(index, irGet(parameter))
+ }
+ })
+ }
+}
+
+private fun makePrimaryConstructorImpl(
+ context: JvmBackendContext,
+ oldPrimaryConstructor: IrConstructor,
+ mfvc: IrClass,
+ leaves: List<LeafMfvcNode>
+) = context.irFactory.buildFun {
+ name = InlineClassAbi.mangledNameFor(oldPrimaryConstructor, false, false)
+ visibility = oldPrimaryConstructor.visibility
+ origin = JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR
+ returnType = context.irBuiltIns.unitType
+ modality = Modality.FINAL
+}.apply {
+ parent = mfvc
+ copyTypeParametersFrom(mfvc)
+ for (leaf in leaves) {
+ addValueParameter(leaf.fullFieldName, leaf.type.substitute(mfvc.typeParameters, typeParameters.map { it.defaultType }))
+ }
+ // body is added in the Lowering file as it needs to be lowered
+}
+
+private fun makeMfvcPrimaryConstructor(
+ context: JvmBackendContext,
+ oldPrimaryConstructor: IrConstructor,
+ mfvc: IrClass,
+ leaves: List<LeafMfvcNode>,
+ fields: List<IrField>
+) = context.irFactory.buildConstructor {
+ updateFrom(oldPrimaryConstructor)
+ visibility = DescriptorVisibilities.PRIVATE
+ origin = JvmLoweredDeclarationOrigin.SYNTHETIC_MULTI_FIELD_VALUE_CLASS_MEMBER
+ returnType = oldPrimaryConstructor.returnType
+}.apply {
+ require(oldPrimaryConstructor.typeParameters.isEmpty()) { "Constructors do not support type parameters yet" }
+ this.parent = mfvc
+ val parameters = leaves.map { addValueParameter(it.fullFieldName, it.type) }
+ val irConstructor = this@apply
+ body = context.createIrBuilder(irConstructor.symbol).irBlockBody(irConstructor) {
+ +irDelegatingConstructorCall(context.irBuiltIns.anyClass.owner.constructors.single())
+ for ((field, parameter) in fields zip parameters) {
+ +irSetField(irGet(mfvc.thisReceiver!!), field, irGet(parameter))
+ }
+ }
+}
+
+private fun makeRootMfvcNodeSubnodes(
+ representation: MultiFieldValueClassRepresentation<IrSimpleType>,
+ properties: Map<Pair<Boolean, Name>, IrProperty>,
+ context: JvmBackendContext,
+ mfvc: IrClass
+) = representation.underlyingPropertyNamesToTypes.mapIndexed { index, (name, type) ->
+ val typeArguments = makeTypeArgumentsFromType(type)
+ val oldProperty = properties[false to name]!!
+ val oldBackingField = oldProperty.backingField
+ val oldGetter = oldProperty.getterIfDeclared(mfvc)
+ val overriddenNode = oldGetter?.let { getOverriddenNode(context.multiFieldValueClassReplacements, it) as IntermediateMfvcNode? }
+ val static = oldProperty.isStatic(mfvc)
+ createNameableMfvcNodes(
+ mfvc,
+ context,
+ type,
+ typeArguments,
+ null,
+ listOf(IndexedNamePart(index, name)),
+ oldBackingField?.annotations ?: listOf(),
+ static,
+ overriddenNode,
+ null,
+ oldGetter.takeIf { static },
+ Modality.FINAL,
+ oldBackingField,
+ ).also {
+ updateAnnotationsAndPropertyFromOldProperty(oldProperty)
+ it.unboxMethod.overriddenSymbols = listOf() // the getter is saved so it overrides itself
+ }
+}
+
+private fun updateAnnotationsAndPropertyFromOldProperty(
+ oldProperty: IrProperty
+) {
+ oldProperty.setter?.apply {
+ name = Name.identifier(JvmAbi.setterName(oldProperty.name.asString()))
+ correspondingPropertySymbol = null
+ origin = IrDeclarationOrigin.DEFINED
+ }
+ oldProperty.setter = null
+ oldProperty.backingField = null
+}
+
+fun createIntermediateNodeForMfvcPropertyOfRegularClass(
+ parent: IrDeclarationContainer,
+ context: JvmBackendContext,
+ oldProperty: IrProperty,
+): IntermediateMfvcNode {
+ val oldGetter = oldProperty.getterIfDeclared(parent)
+ val oldField = oldProperty.backingField
+ val type = oldProperty.getter?.returnType ?: oldField?.type ?: error("Either getter or field must exist")
+ require(type is IrSimpleType && type.needsMfvcFlattening()) { "Expected MFVC but got ${type.render()}" }
+ val fieldAnnotations = oldField?.annotations ?: listOf()
+ val static = oldProperty.isStatic(parent)
+ val overriddenNode = oldGetter?.let { getOverriddenNode(context.multiFieldValueClassReplacements, it) as IntermediateMfvcNode? }
+ val modality = if (oldGetter == null || oldGetter.modality == Modality.FINAL) Modality.FINAL else oldGetter.modality
+ return createIntermediateMfvcNode(
+ parent, context, type, makeTypeArgumentsFromType(type), oldProperty.name.asString(), listOf(),
+ fieldAnnotations, static, overriddenNode, null, oldGetter, modality, oldField
+ ).also {
+ updateAnnotationsAndPropertyFromOldProperty(oldProperty)
+ }
+}
+
+private fun getOverriddenNode(replacements: MemoizedMultiFieldValueClassReplacements, getter: IrSimpleFunction): NameableMfvcNode? =
+ getter.overriddenSymbols
+ .firstOrNull { !it.owner.isFakeOverride }
+ ?.let { replacements.getMfvcPropertyNode(it.owner.correspondingPropertySymbol!!.owner) }
+
+fun getOptimizedPublicAccess(currentElement: IrElement?, parent: IrClass): AccessType {
+ val declaration = currentElement as? IrDeclaration ?: return AccessType.AlwaysPublic
+ for (cur in declaration.parents.filterIsInstance<IrClass>()) {
+ return when {
+ cur == parent -> AccessType.PrivateWhenNoBox
+ cur.isInner -> continue
+ cur.isCompanion -> continue
+ else -> AccessType.AlwaysPublic
+ }
+ }
+ return AccessType.AlwaysPublic
+}
+
+private fun IrProperty.getterIfDeclared(parent: IrDeclarationContainer): IrSimpleFunction? = getter?.takeIf { it in parent.declarations }
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeInstance.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeInstance.kt
new file mode 100644
index 0000000..9ec2902
--- /dev/null
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/MfvcNodeInstance.kt
@@ -0,0 +1,279 @@
+/*
+ * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+package org.jetbrains.kotlin.backend.jvm
+
+import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
+import org.jetbrains.kotlin.ir.IrElement
+import org.jetbrains.kotlin.ir.IrStatement
+import org.jetbrains.kotlin.ir.builders.*
+import org.jetbrains.kotlin.ir.declarations.*
+import org.jetbrains.kotlin.ir.declarations.impl.IrVariableImpl
+import org.jetbrains.kotlin.ir.expressions.*
+import org.jetbrains.kotlin.ir.expressions.impl.IrTypeOperatorCallImpl
+import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl
+import org.jetbrains.kotlin.ir.types.IrSimpleType
+import org.jetbrains.kotlin.ir.types.IrType
+import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
+import org.jetbrains.kotlin.ir.util.dump
+import org.jetbrains.kotlin.ir.util.render
+import org.jetbrains.kotlin.ir.util.substitute
+import org.jetbrains.kotlin.name.Name
+
+interface MfvcNodeInstance {
+ val node: MfvcNode
+ val typeArguments: TypeArguments
+ val type: IrSimpleType
+
+ fun makeFlattenedGetterExpressions(scope: IrBlockBuilder): List<IrExpression>
+ fun makeGetterExpression(scope: IrBuilderWithScope): IrExpression
+ operator fun get(name: Name): MfvcNodeInstance?
+ fun makeStatements(scope: IrBuilderWithScope, values: List<IrExpression>): List<IrStatement>
+}
+
+private fun makeTypeFromMfvcNodeAndTypeArguments(node: MfvcNode, typeArguments: TypeArguments) =
+ node.type.substitute(typeArguments) as IrSimpleType
+
+fun MfvcNodeInstance.addSetterStatements(scope: IrBlockBuilder, values: List<IrExpression>) = with(scope) {
+ for (statement in makeStatements(this, values)) {
+ +statement
+ }
+}
+
+fun MfvcNodeInstance.makeSetterExpressions(scope: IrBuilderWithScope, values: List<IrExpression>): IrExpression = scope.irBlock {
+ addSetterStatements(this, values)
+}
+
+private fun MfvcNodeInstance.checkValuesCount(values: List<IrExpression>) {
+ require(values.size == node.leavesCount) { "Node $node requires ${node.leavesCount} values but got ${values.map { it.render() }}" }
+}
+
+class ValueDeclarationMfvcNodeInstance(
+ override val node: MfvcNode,
+ override val typeArguments: TypeArguments,
+ val valueDeclarations: List<IrValueDeclaration>,
+) : MfvcNodeInstance {
+ init {
+ require(valueDeclarations.size == size) { "Expected value declarations list of size $size but got of size ${valueDeclarations.size}" }
+ }
+
+ override val type: IrSimpleType = makeTypeFromMfvcNodeAndTypeArguments(node, typeArguments)
+
+ override fun makeFlattenedGetterExpressions(scope: IrBlockBuilder): List<IrExpression> =
+ makeFlattenedGetterExpressions(scope as IrBuilderWithScope)
+ private fun makeFlattenedGetterExpressions(scope: IrBuilderWithScope): List<IrExpression> = valueDeclarations.map { scope.irGet(it) }
+
+ override fun makeGetterExpression(scope: IrBuilderWithScope): IrExpression = when (node) {
+ is LeafMfvcNode -> makeFlattenedGetterExpressions(scope).single()
+ is MfvcNodeWithSubnodes -> node.makeBoxedExpression(scope, typeArguments, makeFlattenedGetterExpressions(scope))
+ }
+
+ override fun get(name: Name): ValueDeclarationMfvcNodeInstance? {
+ val (newNode, indices) = node.getSubnodeAndIndices(name) ?: return null
+ return ValueDeclarationMfvcNodeInstance(newNode, typeArguments, valueDeclarations.slice(indices))
+ }
+
+ override fun makeStatements(scope: IrBuilderWithScope, values: List<IrExpression>): List<IrStatement> {
+ checkValuesCount(values)
+ return valueDeclarations.zip(values) { declaration, value -> scope.irSet(declaration, value) }
+ }
+}
+
+internal class ExpressionCopierImpl(
+ expression: IrExpression?,
+ private val scope: IrBlockBuilder,
+ private val saveVariable: (IrVariable) -> Unit,
+) {
+ private sealed interface CopyableExpression {
+ fun makeExpression(scope: IrBuilderWithScope): IrExpression
+ }
+
+ private class SavedToVariable(val variable: IrVariable) : CopyableExpression {
+ override fun makeExpression(scope: IrBuilderWithScope): IrExpression = scope.irGet(variable)
+ }
+
+ private class PureExpression(val expression: IrExpression) : CopyableExpression {
+ override fun makeExpression(scope: IrBuilderWithScope): IrExpression = expression.deepCopyWithSymbols()
+ }
+
+ private fun IrExpression.orSavedToVariable(): CopyableExpression =
+ if (isRepeatableGetter()) {
+ PureExpression(this)
+ } else SavedToVariable(
+ scope.savableStandaloneVariableWithSetter(
+ this@orSavedToVariable,
+ origin = IrDeclarationOrigin.TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE,
+ saveVariable = saveVariable,
+ isTemporary = true,
+ )
+ )
+
+ private val copyableExpression = expression?.orSavedToVariable()
+
+ fun makeCopy() = copyableExpression?.makeExpression(scope)
+}
+
+fun IrExpression?.isRepeatableGetter(): Boolean = when (this) {
+ null -> true
+ is IrConst<*> -> true
+ is IrGetValue -> true
+ is IrGetField -> receiver.isRepeatableGetter()
+ is IrTypeOperatorCallImpl -> this.argument.isRepeatableGetter()
+ is IrContainerExpression -> statements.all { it is IrExpression && it.isRepeatableGetter() || it is IrVariable }
+ else -> false
+}
+
+fun IrExpression?.isRepeatableSetter(): Boolean = when (this) {
+ null -> true
+ is IrConst<*> -> true
+ is IrSetValue -> value.isRepeatableGetter()
+ is IrSetField -> receiver.isRepeatableGetter() && value.isRepeatableGetter()
+ is IrTypeOperatorCallImpl -> this.argument.isRepeatableSetter()
+ is IrContainerExpression -> statements.dropLast(1).all { it is IrExpression && it.isRepeatableGetter() || it is IrVariable } &&
+ statements.lastOrNull().let { it is IrExpression? && it.isRepeatableSetter() }
+
+ else -> false
+}
+
+fun IrExpression?.isRepeatableAccessor(): Boolean = isRepeatableGetter() || isRepeatableSetter()
+
+enum class AccessType { AlwaysPublic, PrivateWhenNoBox, AlwaysPrivate }
+
+class ReceiverBasedMfvcNodeInstance(
+ private val scope: IrBlockBuilder,
+ override val node: MfvcNode,
+ override val typeArguments: TypeArguments,
+ receiver: IrExpression?,
+ val fields: List<IrField>?,
+ val unboxMethod: IrSimpleFunction?,
+ val accessType: AccessType,
+ private val saveVariable: (IrVariable) -> Unit,
+) : MfvcNodeInstance {
+ override val type: IrSimpleType = makeTypeFromMfvcNodeAndTypeArguments(node, typeArguments)
+
+ private val receiverCopier = ExpressionCopierImpl(receiver, scope, saveVariable)
+
+ private fun makeReceiverCopy() = receiverCopier.makeCopy()
+
+ init {
+ require(fields == null || fields.isNotEmpty()) { "Empty list of fields" }
+ require(node is RootMfvcNode == (unboxMethod == null)) { "Only root node has node getter" }
+ }
+
+ override fun makeFlattenedGetterExpressions(scope: IrBlockBuilder): List<IrExpression> = when (node) {
+ is LeafMfvcNode -> listOf(makeGetterExpression(scope))
+ is MfvcNodeWithSubnodes -> when {
+ node is IntermediateMfvcNode && canUsePrivateAccessFor(node) && fields != null ->
+ fields.map { scope.irGetField(makeReceiverCopy(), it) }
+
+ node is IntermediateMfvcNode && !node.hasPureUnboxMethod -> {
+ val value = makeGetterExpression(scope)
+ val asVariable = scope.savableStandaloneVariableWithSetter(
+ value,
+ origin = IrDeclarationOrigin.GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER,
+ saveVariable = saveVariable,
+ isTemporary = true,
+ )
+ val root = node.rootNode
+ val variableInstance =
+ root.createInstanceFromBox(scope, typeArguments, scope.irGet(asVariable), accessType, saveVariable)
+ variableInstance.makeFlattenedGetterExpressions(scope)
+ }
+
+ else -> node.subnodes.flatMap { get(it.name)!!.makeFlattenedGetterExpressions(scope) }
+ }
+ }
+
+ override fun makeGetterExpression(scope: IrBuilderWithScope): IrExpression = with(scope) {
+ when {
+ node is LeafMfvcNode && canUsePrivateAccessFor(node) && fields != null -> irGetField(makeReceiverCopy(), fields.single())
+ node is IntermediateMfvcNode && accessType == AccessType.AlwaysPrivate && fields != null ->
+ node.makeBoxedExpression(this, typeArguments, fields.map { irGetField(makeReceiverCopy(), it) })
+
+ unboxMethod != null -> irCall(unboxMethod).apply {
+ val dispatchReceiverParameter = unboxMethod.dispatchReceiverParameter
+ if (dispatchReceiverParameter != null) {
+ dispatchReceiver = makeReceiverCopy() ?: run {
+ val erasedUpperBound = dispatchReceiverParameter.type.erasedUpperBound
+ require(erasedUpperBound.isCompanion) { "Expected a dispatch receiver for:\n${unboxMethod.dump()}" }
+ irGetObject(erasedUpperBound.symbol)
+ }
+ }
+ }
+
+ node is RootMfvcNode -> makeReceiverCopy()!!
+ else -> error("Unbox method must exist for $node")
+ }
+ }
+
+ private fun canUsePrivateAccessFor(node: NameableMfvcNode) =
+ node.hasPureUnboxMethod && accessType == AccessType.PrivateWhenNoBox || accessType == AccessType.AlwaysPrivate
+
+ override fun get(name: Name): ReceiverBasedMfvcNodeInstance? {
+ val (newNode, _) = node.getSubnodeAndIndices(name) ?: return null
+ return newNode.createInstanceFromBox(scope, typeArguments, makeReceiverCopy(), accessType, saveVariable)
+ }
+
+ override fun makeStatements(scope: IrBuilderWithScope, values: List<IrExpression>): List<IrStatement> {
+ checkValuesCount(values)
+ require(fields != null) { "$node is immutable as it has custom getter and so no backing fields" }
+ return fields.zip(values) { field, expr -> scope.irSetField(makeReceiverCopy(), field, expr) }
+ }
+}
+
+val MfvcNodeInstance.size: Int
+ get() = node.leavesCount
+
+fun IrContainerExpression.unwrapBlock(): IrExpression = statements.singleOrNull() as? IrExpression ?: this
+
+/**
+ * Creates a variable and doesn't add it to a container. It saves the variable with given saveVariable.
+ *
+ * It may be used when the variable will be used outside the current container so the declaration is added later when all usages are known.
+ */
+fun IrBuilderWithScope.savableStandaloneVariable(
+ type: IrType,
+ name: String? = null,
+ isMutable: Boolean = false,
+ origin: IrDeclarationOrigin,
+ isTemporary: Boolean = origin == IrDeclarationOrigin.IR_TEMPORARY_VARIABLE,
+ saveVariable: (IrVariable) -> Unit,
+): IrVariable {
+ val variable = if (isTemporary || name == null) scope.createTemporaryVariableDeclaration(
+ type, name, isMutable,
+ startOffset = startOffset,
+ endOffset = endOffset,
+ origin = origin,
+ ) else IrVariableImpl(
+ startOffset = startOffset,
+ endOffset = endOffset,
+ origin = origin,
+ symbol = IrVariableSymbolImpl(),
+ name = Name.identifier(name),
+ type = type,
+ isVar = isMutable,
+ isConst = false,
+ isLateinit = false
+ ).apply {
+ parent = this@savableStandaloneVariable.scope.getLocalDeclarationParent()
+ }
+ saveVariable(variable)
+ return variable
+}
+
+/**
+ * Creates a variable and doesn't add it to a container. It saves the variable with given saveVariable. It adds irSet-based initialization.
+ *
+ * It may be used when the variable will be used outside the current container so the declaration is added later when all usages are known.
+ */
+fun <T : IrElement> IrStatementsBuilder<T>.savableStandaloneVariableWithSetter(
+ expression: IrExpression,
+ name: String? = null,
+ isMutable: Boolean = false,
+ origin: IrDeclarationOrigin,
+ isTemporary: Boolean = origin == IrDeclarationOrigin.IR_TEMPORARY_VARIABLE,
+ saveVariable: (IrVariable) -> Unit,
+) = savableStandaloneVariable(expression.type, name, isMutable, origin, isTemporary, saveVariable).also {
+ +irSet(it, expression)
+}
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrTypeUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrTypeUtils.kt
index 900520f..3aa08ae 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrTypeUtils.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrTypeUtils.kt
@@ -117,8 +117,11 @@
}
}
-fun IrType.isInlineClassType(): Boolean =
- erasedUpperBound.isSingleFieldValueClass
+fun IrType.isInlineClassType(): Boolean = erasedUpperBound.isSingleFieldValueClass
+
+fun IrType.isMultiFieldValueClassType(): Boolean = erasedUpperBound.isMultiFieldValueClass
+
+fun IrType.isValueClassType(): Boolean = erasedUpperBound.isValue
val IrType.upperBound: IrType
get() = erasedUpperBound.symbol.starProjectedType
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
index 1dbbb51..a4a995f 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/ir/JvmIrUtils.kt
@@ -8,10 +8,7 @@
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.backend.common.lower.at
import org.jetbrains.kotlin.backend.common.lower.irNot
-import org.jetbrains.kotlin.backend.jvm.CachedFieldsForObjectInstances
-import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
-import org.jetbrains.kotlin.backend.jvm.JvmLoweredDeclarationOrigin
-import org.jetbrains.kotlin.backend.jvm.JvmSymbols
+import org.jetbrains.kotlin.backend.jvm.*
import org.jetbrains.kotlin.builtins.StandardNames
import org.jetbrains.kotlin.codegen.ASSERTIONS_DISABLED_FIELD_NAME
import org.jetbrains.kotlin.codegen.AsmUtil
@@ -246,6 +243,9 @@
fun IrProperty.needsAccessor(accessor: IrSimpleFunction): Boolean = when {
// Properties in annotation classes become abstract methods named after the property.
(parent as? IrClass)?.kind == ClassKind.ANNOTATION_CLASS -> true
+ // Multi-field value class getters must always be added. Getters for properties of MFVC itself follow general rules.
+ accessor.isGetter && accessor.contextReceiverParametersCount == 0 && accessor.extensionReceiverParameter == null &&
+ !accessor.parent.let { it is IrClass && it.isMultiFieldValueClass } && accessor.returnType.needsMfvcFlattening() -> true
// @JvmField properties have no getters/setters
resolveFakeOverride()?.backingField?.hasAnnotation(JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME) == true -> false
// We do not produce default accessors for private fields
@@ -256,6 +256,13 @@
get() = origin == JvmLoweredDeclarationOrigin.STATIC_INLINE_CLASS_REPLACEMENT
|| origin == JvmLoweredDeclarationOrigin.STATIC_INLINE_CLASS_CONSTRUCTOR
+val IrDeclaration.isStaticMultiFieldValueClassReplacement: Boolean
+ get() = origin == JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_REPLACEMENT
+ || origin == JvmLoweredDeclarationOrigin.STATIC_MULTI_FIELD_VALUE_CLASS_CONSTRUCTOR
+
+val IrDeclaration.isStaticValueClassReplacement: Boolean
+ get() = isStaticMultiFieldValueClassReplacement || isStaticInlineClassReplacement
+
// On the IR backend we represent raw types as star projected types with a special synthetic annotation.
// See `TypeTranslator.translateTypeAnnotations`.
private fun JvmBackendContext.makeRawTypeAnnotation() =
@@ -305,7 +312,7 @@
fun IrSimpleFunction.suspendFunctionOriginal(): IrSimpleFunction =
if (isSuspend &&
- !isStaticInlineClassReplacement &&
+ !isStaticValueClassReplacement &&
!isOrOverridesDefaultParameterStub() &&
parentAsClass.origin != JvmLoweredDeclarationOrigin.DEFAULT_IMPLS
)
diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
index 71cad44..ce08efd 100644
--- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
+++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/MethodSignatureMapper.kt
@@ -422,7 +422,7 @@
// TODO: get rid of this (probably via some special lowering)
private fun mapOverriddenSpecialBuiltinIfNeeded(callee: IrFunction, superCall: Boolean): JvmMethodSignature? {
// Do not remap calls to static replacements of inline class methods, since they have completely different signatures.
- if (callee.isStaticInlineClassReplacement) return null
+ if (callee.isStaticValueClassReplacement) return null
val overriddenSpecialBuiltinFunction =
(callee.toIrBasedDescriptor().getOverriddenBuiltinReflectingJvmDescriptor() as IrBasedSimpleFunctionDescriptor?)?.owner
if (overriddenSpecialBuiltinFunction != null && !superCall) {
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt
index f3f13fb..297b57d 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/ExpressionHelpers.kt
@@ -53,11 +53,13 @@
nameHint: String? = null,
irType: IrType = value?.type!!, // either value or irType should be supplied at callsite
isMutable: Boolean = false,
+ origin: IrDeclarationOrigin = IrDeclarationOrigin.IR_TEMPORARY_VARIABLE,
): IrVariable {
val temporary = scope.createTemporaryVariableDeclaration(
irType, nameHint, isMutable,
startOffset = startOffset,
- endOffset = endOffset
+ endOffset = endOffset,
+ origin = origin,
)
value?.let { temporary.initializer = it }
+temporary
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt
index cd00046..91d5b64 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt
@@ -43,6 +43,9 @@
object GENERATED_DATA_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_DATA_CLASS_MEMBER")
object GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_SINGLE_FIELD_VALUE_CLASS_MEMBER")
object GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_MULTI_FIELD_VALUE_CLASS_MEMBER")
+ object GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER : IrDeclarationOriginImpl("GENERATED_MULTI_FIELD_VALUE_CLASS_PARAMETER")
+ object TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE : IrDeclarationOriginImpl("TEMPORARY_MULTI_FIELD_VALUE_CLASS_VARIABLE")
+ object MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE : IrDeclarationOriginImpl("MULTI_FIELD_VALUE_CLASS_REPRESENTATION_VARIABLE")
object LOCAL_FUNCTION : IrDeclarationOriginImpl("LOCAL_FUNCTION")
object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA")
object CATCH_PARAMETER : IrDeclarationOriginImpl("CATCH_PARAMETER")
diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt
index c071eb2..9b5714b 100644
--- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt
+++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/DataClassMembersGenerator.kt
@@ -128,7 +128,7 @@
fun generateEqualsMethodBody(properties: List<IrProperty>) {
val irType = irClass.defaultType
- if (!irClass.isSingleFieldValueClass) {
+ if (!irClass.isValue) {
+irIfThenReturnTrue(irEqeqeq(irThis(), irOther()))
}
+irIfThenReturnFalse(irNotIs(irOther(), irType))
diff --git a/compiler/testData/codegen/box/valueClasses/classFlattening.kt b/compiler/testData/codegen/box/valueClasses/classFlattening.kt
index 46d2026..4d7a6aa 100644
--- a/compiler/testData/codegen/box/valueClasses/classFlattening.kt
+++ b/compiler/testData/codegen/box/valueClasses/classFlattening.kt
@@ -1,7 +1,9 @@
+// IGNORE_BACKEND_FIR: JVM_IR
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS
-// LANGUAGE: +ValueClasses
+// LANGUAGE: +ValueClasses +ContextReceivers
+// CHECK_BYTECODE_LISTING
@JvmInline
value class IC(val x: UInt)
@@ -9,13 +11,148 @@
fun ic(x: IC) = x.x
@JvmInline
-value class SimpleMFVC(val x: UInt, val y: IC, val z: String)
+value class SimpleMfvc(val x: UInt, val y: IC, val z: String) {
+ companion object {
+ val SimpleMfvc.a1: SimpleMfvc
+ get() = this
-fun smfvc(ic: IC, x: SimpleMFVC, ic1: UInt) = ic(ic) + x.x + ic(x.y) + ic1
+ @JvmStatic
+ val SimpleMfvc.b1: SimpleMfvc
+ get() = this
+
+ context(b@SimpleMfvc)
+ val a2: SimpleMfvc
+ get() = this@b
+
+ context(b@SimpleMfvc)
+ @JvmStatic
+ val b2: SimpleMfvc
+ get() = this@b
+
+
+ private val SimpleMfvc.private1: SimpleMfvc
+ get() = this
+
+ @JvmStatic
+ private val SimpleMfvc.private2: SimpleMfvc
+ get() = this
+
+ context(b@SimpleMfvc)
+ private val private3: SimpleMfvc
+ get() = this@b
+
+ context(b@SimpleMfvc)
+ @JvmStatic
+ private val private4: SimpleMfvc
+ get() = this@b
+ }
+
+ val SimpleMfvc.a3: SimpleMfvc
+ get() = this
+
+ context(SimpleMfvc)
+ val b3: SimpleMfvc
+ get() = this@SimpleMfvc
+
+
+ private val SimpleMfvc.private1: SimpleMfvc
+ get() = this@SimpleMfvc
+ context(SimpleMfvc)
+ private val private2: SimpleMfvc
+ get() = this@SimpleMfvc
+}
+
+fun smfvc(ic: IC, x: SimpleMfvc, ic1: UInt) = ic(ic) + x.x + ic(x.y) + ic1
@JvmInline
-value class GreaterMFVC(val x: SimpleMFVC, val y: IC, val z: SimpleMFVC)
+value class GreaterMfvc(val x: SimpleMfvc, val y: IC, val z: SimpleMfvc)
-fun gmfvc(ic: IC, x: GreaterMFVC, ic1: UInt) = smfvc(ic, x.x, 0U) + ic(x.y) + smfvc(IC(0U), x.z, ic1)
+fun gmfvc(ic: IC, x: GreaterMfvc, ic1: UInt) = smfvc(ic, x.x, 0U) + ic(x.y) + smfvc(IC(0U), x.z, ic1)
-fun box() = "OK" // todo real test
\ No newline at end of file
+class Extensions {
+ val SimpleMfvc.x1: SimpleMfvc
+ get() = this
+ private val SimpleMfvc.private_: SimpleMfvc
+ get() = this
+
+ companion object {
+ val SimpleMfvc.y1: SimpleMfvc
+ get() = this
+
+ @JvmStatic
+ val SimpleMfvc.z1: SimpleMfvc
+ get() = this
+
+ private val SimpleMfvc.private1: SimpleMfvc
+ get() = this
+
+ @JvmStatic
+ private val SimpleMfvc.private2: SimpleMfvc
+ get() = this
+ }
+}
+
+class Contexts {
+ context(b@SimpleMfvc)
+ val x1: SimpleMfvc
+ get() = this@b
+ context(b@SimpleMfvc)
+ private val private_: SimpleMfvc
+ get() = this@b
+
+ companion object {
+ context(b@SimpleMfvc)
+ val y1: SimpleMfvc
+ get() = this@b
+
+ context(b@SimpleMfvc)
+ @JvmStatic
+ val z1: SimpleMfvc
+ get() = this@b
+
+ context(b@SimpleMfvc)
+ private val private1: SimpleMfvc
+ get() = this@b
+
+ context(b@SimpleMfvc)
+ @JvmStatic
+ private val private2: SimpleMfvc
+ get() = this@b
+ }
+}
+
+fun idUnboxed(x: SimpleMfvc) = x
+fun idBoxed(x: SimpleMfvc?) = x!!
+
+fun box(): String {
+ val o1 = IC(2U)
+ require(ic(o1) == 2U)
+ val o2 = SimpleMfvc(1U, o1, "3")
+ val o2_ = SimpleMfvc(1U, o1, "-3")
+ require(smfvc(IC(4U), o2, 5U) == 12U)
+ val o3 = GreaterMfvc(o2, IC(6U), SimpleMfvc(7U, IC(8U), "9"))
+ require(gmfvc(IC(10U), o3, 11U) == 45U)
+ with(Extensions()) {
+ require(o2.x1 == o2)
+ }
+ with(Extensions.Companion) {
+ require(o2.y1 == o2)
+ require(o2.z1 == o2)
+ }
+ with(o2) {
+ require(Contexts().x1 == o2)
+ require(Contexts.y1 == o2)
+ require(Contexts.z1 == o2)
+ require(o2_.a3 == o2_)
+ require(o2_.b3 == o2_)
+ require(SimpleMfvc.a2 == o2)
+ require(SimpleMfvc.b2 == o2)
+ }
+ with(SimpleMfvc.Companion) {
+ require(o2_.a1 == o2_)
+ require(o2_.b1 == o2_)
+ }
+
+ require(idUnboxed(idBoxed(idUnboxed(o2) /*boxing*/) /*unbox*/) == o2)
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/classFlattening.txt b/compiler/testData/codegen/box/valueClasses/classFlattening.txt
new file mode 100644
index 0000000..1c2e57c
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/classFlattening.txt
@@ -0,0 +1,175 @@
+@kotlin.Metadata
+public final class ClassFlatteningKt {
+ // source: 'classFlattening.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method gmfvc-Ket90g4(p0: int, p1: int, p2: int, @org.jetbrains.annotations.NotNull p3: java.lang.String, p4: int, p5: int, p6: int, @org.jetbrains.annotations.NotNull p7: java.lang.String, p8: int): int
+ public final static method ic-K5cTq2M(p0: int): int
+ public final static @org.jetbrains.annotations.NotNull method idBoxed(@org.jetbrains.annotations.Nullable p0: SimpleMfvc): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method idUnboxed-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final static method smfvc-Ket90g4(p0: int, p1: int, p2: int, @org.jetbrains.annotations.NotNull p3: java.lang.String, p4: int): int
+ public final inner class Contexts$Companion
+ public final inner class Extensions$Companion
+ public final inner class SimpleMfvc$Companion
+}
+
+@kotlin.Metadata
+public final class Contexts$Companion {
+ // source: 'classFlattening.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic final static method access$getPrivate2-sUp7gFk(p0: Contexts$Companion, p1: int, p2: int, p3: java.lang.String): SimpleMfvc
+ private final method getPrivate1-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getPrivate2$annotations(): void
+ private final method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getY1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getZ1$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getZ1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final inner class Contexts$Companion
+}
+
+@kotlin.Metadata
+public final class Contexts {
+ // source: 'classFlattening.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: Contexts$Companion
+ static method <clinit>(): void
+ public method <init>(): void
+ private final static method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private final method getPrivate_-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getX1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method getZ1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final inner class Contexts$Companion
+}
+
+@kotlin.Metadata
+public final class Extensions$Companion {
+ // source: 'classFlattening.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic final static method access$getPrivate2-sUp7gFk(p0: Extensions$Companion, p1: int, p2: int, p3: java.lang.String): SimpleMfvc
+ private final method getPrivate1-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getPrivate2$annotations(p0: SimpleMfvc): void
+ private final method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getY1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getZ1$annotations(p0: SimpleMfvc): void
+ public final @org.jetbrains.annotations.NotNull method getZ1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final inner class Extensions$Companion
+}
+
+@kotlin.Metadata
+public final class Extensions {
+ // source: 'classFlattening.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: Extensions$Companion
+ static method <clinit>(): void
+ public method <init>(): void
+ private final static method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private final method getPrivate_-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getX1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method getZ1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final inner class Extensions$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GreaterMfvc {
+ // source: 'classFlattening.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private final @org.jetbrains.annotations.NotNull field field-0-2: java.lang.String
+ private final field field-1: int
+ private final field field-2-0: int
+ private final field field-2-1: int
+ private final @org.jetbrains.annotations.NotNull field field-2-2: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String): GreaterMfvc
+ public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String, p3: int, p4: int, p5: int, @org.jetbrains.annotations.NotNull p6: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String, p7: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: java.lang.String): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: int, p6: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): SimpleMfvc
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+ public synthetic final method unbox-impl-0-2(): java.lang.String
+ public synthetic final method unbox-impl-1(): int
+ public synthetic final method unbox-impl-2(): SimpleMfvc
+ public synthetic final method unbox-impl-2-0(): int
+ public synthetic final method unbox-impl-2-1(): int
+ public synthetic final method unbox-impl-2-2(): java.lang.String
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class IC {
+ // source: 'classFlattening.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): IC
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX-pVg5ArA(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.Metadata
+public final class SimpleMfvc$Companion {
+ // source: 'classFlattening.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic final static method access$getPrivate2-sUp7gFk(p0: SimpleMfvc$Companion, p1: int, p2: int, p3: java.lang.String): SimpleMfvc
+ public synthetic final static method access$getPrivate4-sUp7gFk(p0: SimpleMfvc$Companion, p1: int, p2: int, p3: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getA1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final @org.jetbrains.annotations.NotNull method getA2-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getB1$annotations(p0: SimpleMfvc): void
+ public final @org.jetbrains.annotations.NotNull method getB1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getB2$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getB2-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ private final method getPrivate1-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getPrivate2$annotations(p0: SimpleMfvc): void
+ private final method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private final method getPrivate3-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getPrivate4$annotations(): void
+ private final method getPrivate4-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final inner class SimpleMfvc$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class SimpleMfvc {
+ // source: 'classFlattening.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: SimpleMfvc$Companion
+ private final field field-0: int
+ private final field field-1: int
+ private final @org.jetbrains.annotations.NotNull field field-2: java.lang.String
+ static method <clinit>(): void
+ private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
+ public final static @org.jetbrains.annotations.NotNull method getA3-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String, p3: int, p4: int, @org.jetbrains.annotations.NotNull p5: java.lang.String): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method getB1-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method getB2-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): SimpleMfvc
+ public final static @org.jetbrains.annotations.NotNull method getB3-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String, p3: int, p4: int, @org.jetbrains.annotations.NotNull p5: java.lang.String): SimpleMfvc
+ private final static method getPrivate1-sUp7gFk(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): SimpleMfvc
+ private final static method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ private final static method getPrivate2-sUp7gFk(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): SimpleMfvc
+ private final static method getPrivate4-sUp7gFk(p0: int, p1: int, p2: java.lang.String): SimpleMfvc
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public synthetic final method unbox-impl-2(): java.lang.String
+ public final inner class SimpleMfvc$Companion
+}
diff --git a/compiler/testData/codegen/box/valueClasses/complex.kt b/compiler/testData/codegen/box/valueClasses/complex.kt
new file mode 100644
index 0000000..aeee824
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/complex.kt
@@ -0,0 +1,304 @@
+// IGNORE_BACKEND_FIR: JVM_IR
+// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// IGNORE_BACKEND: ANDROID, ANDROID_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class A<T : Any>(val x: List<T>)
+
+@JvmInline
+value class B(val x: UInt)
+
+@JvmInline
+value class C(val x: Int, val y: B, val z: String = "3")
+
+@JvmInline
+value class D(val x: C) {
+ constructor(x: Int, y: UInt, z: Int) : this(C(x, B(y), z.toString()))
+
+ init {
+ supply(x.x)
+ }
+}
+
+inline fun inlined(x: Int, y: UInt, z: Int): D {
+ return D(C(x, B(y), z.toString()))
+}
+
+fun notInlined(x: Int, y: UInt, z: Int) = D(C(x, B(y), z.toString()))
+
+@JvmInline
+value class E(val x: D) {
+ var withNonTrivialSetters: D
+ get() = TODO()
+ set(_) = TODO()
+}
+
+interface Base3 {
+ val z: E
+}
+
+@JvmInline
+value class R<T : Any>(val x: Int, val y: UInt, override val z: E, val t: A<T>) : Base1, Base3
+
+fun <T : List<Int>> f(r: R<T>) {
+ supply(r)
+ supply(r.x)
+ supply(r.y)
+ supply(r.z)
+ supply(r.t)
+ supply(r.t.x)
+ supply(r.z.x)
+ supply(r.z.x.x)
+ supply(r.z.x.x.x)
+ supply(r.z.x.x.y)
+ supply(r.z.x.x.z)
+ supply(r.z.x.x.y.x)
+}
+
+fun g(e: E) {
+ supply(e)
+}
+
+fun <T : List<Int>> h(r: R<T>) {
+ g(r.z)
+ f(r)
+ r
+ C(2, B(3U), "")
+ D(C(2, B(3U), ""))
+ val x = D(C(2, B(3U), ""))
+ var y = D(C(4, B(5U), "1"))
+ supply(y)
+ y = D(C(6, B(7U), "2"))
+ y = D(6, 7U, 2)
+ y = inlined(6, 7U, 2)
+ y = notInlined(6, 7U, 2)
+ supply(y)
+}
+
+fun h1() {
+ var y = inlined(1, 2U, 3) // todo fix box
+ supply(y)
+ y = inlined(4, 5U, 6)
+ supply(y)
+}
+
+interface Base1 {
+ val fakeOverrideMFVC: R<List<Int>>
+ get() = TODO()
+ val fakeOverrideRegular: Int
+ get() = TODO()
+}
+
+interface Base2 {
+ var l: R<List<Int>>
+}
+
+interface Base4<T> {
+ var l: T
+}
+
+class NotInlined(override var l: R<List<Int>>, var y: Int) : Base1, Base2, Base4<R<List<Int>>> {
+ override fun toString(): String = l.toString() + l.z.x.x.z
+
+ init {
+ l = l
+ }
+
+ fun trySetter() {
+ l = l
+ }
+
+ var withNonTrivialSetters: R<List<Int>>
+ get() = TODO()
+ set(_) = TODO()
+
+ var withNonTrivialSettersWithBF: R<List<Int>> = l
+ get() {
+ supply("1")
+ field
+ field.t
+ field == field
+ return field
+ }
+ set(value) {
+ supply("3")
+ field = value
+ field = field
+ supply("4")
+ }
+
+ val withNonTrivialGettersWithBF: R<List<Int>> = l
+ get() {
+ supply("1")
+ field
+ field.t
+ field == field
+ return field
+ }
+}
+
+fun testVars(x: NotInlined) {
+ x.l.toString()
+ var y = x.l
+ y.toString()
+ y = x.l
+ supply(y)
+ x.l = x.l
+ x.l = R<List<Int>>(x.l.x, x.l.y, x.l.z, x.l.t)
+}
+
+fun reuseBoxed(list: MutableList<R<List<Int>>>) {
+ list.add(list.last())
+}
+
+val lines = mutableListOf<String>()
+
+fun supply(x: Any) {
+ lines.add(x.toString())
+}
+
+fun equalsChecks1(x: A<List<Int>>) {}
+fun equalsChecks(left: R<List<Int>>, right: R<List<Int>>) {
+ supply(left == right)
+ supply(left as Any == right)
+ supply(left == right as Any)
+ supply(left as Any == right as Any)
+ supply(null == right)
+ supply(left == null)
+ supply(null as Any? == right)
+ supply(null as R<List<Int>>? == right)
+ supply(left == null as Any?)
+ supply(left == null as R<List<Int>>?)
+ supply(left as R<List<Int>>? == right)
+ supply(left == right as R<List<Int>>?)
+}
+
+// todo add default parameters
+
+fun box(): String {
+ supply("#1")
+ require(inlined(1, 2U, 3) == D(C(1, B(2U), "3")))
+ supply("#2")
+ require(notInlined(1, 2U, 3) == D(C(1, B(2U), "3")))
+ supply("#3")
+ val e = E(D(3, 4U, 5))
+ supply("#4")
+ val r = R(1, 2U, e, A(listOf(listOf(6))))
+ supply("#5")
+ f(r)
+ supply("#6")
+ g(e)
+ supply("#7")
+ h(r)
+ supply("#8")
+ h1()
+ supply("#9")
+ val ni = NotInlined(r, 7)
+ supply("#10")
+ ni.withNonTrivialGettersWithBF
+ supply("#11")
+ ni.withNonTrivialSettersWithBF = ni.withNonTrivialSettersWithBF
+ supply("#12")
+ supply(ni.toString())
+ supply("#13")
+ testVars(ni)
+ supply("#14")
+ reuseBoxed(mutableListOf(r))
+ supply("#15")
+ equalsChecks(r, r)
+ supply("#16")
+ equalsChecks1(A(listOf(listOf())))
+ supply("#17")
+
+ val log = lines.joinToString("\n")
+ val expectedLog =
+ """
+ #1
+ 1
+ 1
+ #2
+ 1
+ 1
+ #3
+ 3
+ #4
+ #5
+ R(x=1, y=2, z=E(x=D(x=C(x=3, y=B(x=4), z=5))), t=A(x=[[6]]))
+ 1
+ 2
+ E(x=D(x=C(x=3, y=B(x=4), z=5)))
+ A(x=[[6]])
+ [[6]]
+ D(x=C(x=3, y=B(x=4), z=5))
+ C(x=3, y=B(x=4), z=5)
+ 3
+ B(x=4)
+ 5
+ 4
+ #6
+ E(x=D(x=C(x=3, y=B(x=4), z=5)))
+ #7
+ E(x=D(x=C(x=3, y=B(x=4), z=5)))
+ R(x=1, y=2, z=E(x=D(x=C(x=3, y=B(x=4), z=5))), t=A(x=[[6]]))
+ 1
+ 2
+ E(x=D(x=C(x=3, y=B(x=4), z=5)))
+ A(x=[[6]])
+ [[6]]
+ D(x=C(x=3, y=B(x=4), z=5))
+ C(x=3, y=B(x=4), z=5)
+ 3
+ B(x=4)
+ 5
+ 4
+ 2
+ 2
+ 4
+ D(x=C(x=4, y=B(x=5), z=1))
+ 6
+ 6
+ 6
+ 6
+ D(x=C(x=6, y=B(x=7), z=2))
+ #8
+ 1
+ D(x=C(x=1, y=B(x=2), z=3))
+ 4
+ D(x=C(x=4, y=B(x=5), z=6))
+ #9
+ #10
+ 1
+ #11
+ 1
+ 3
+ 4
+ #12
+ R(x=1, y=2, z=E(x=D(x=C(x=3, y=B(x=4), z=5))), t=A(x=[[6]]))5
+ #13
+ R(x=1, y=2, z=E(x=D(x=C(x=3, y=B(x=4), z=5))), t=A(x=[[6]]))
+ #14
+ #15
+ true
+ true
+ true
+ true
+ false
+ false
+ false
+ false
+ false
+ false
+ true
+ true
+ #16
+ #17
+ """.trimIndent()
+ require(log == expectedLog) { log }
+
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/complex.txt b/compiler/testData/codegen/box/valueClasses/complex.txt
new file mode 100644
index 0000000..0d7ed9b
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/complex.txt
@@ -0,0 +1,317 @@
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class A {
+ // source: 'complex.kt'
+ private final @org.jetbrains.annotations.NotNull field x: java.util.List
+ private synthetic method <init>(p0: java.util.List): void
+ public synthetic final static method box-impl(p0: java.util.List): A
+ public static @org.jetbrains.annotations.NotNull method constructor-impl(@org.jetbrains.annotations.NotNull p0: java.util.List): java.util.List
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.util.List, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.util.List, p1: java.util.List): boolean
+ public final @org.jetbrains.annotations.NotNull method getX(): java.util.List
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.util.List): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: java.util.List): java.lang.String
+ public synthetic final method unbox-impl(): java.util.List
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class B {
+ // source: 'complex.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): B
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX-pVg5ArA(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.Metadata
+public final class Base1$DefaultImpls {
+ // source: 'complex.kt'
+ public static @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(@org.jetbrains.annotations.NotNull p0: Base1): R
+ public synthetic static method getFakeOverrideMFVC-0(p0: Base1): int
+ public synthetic static method getFakeOverrideMFVC-1(p0: Base1): int
+ public synthetic static method getFakeOverrideMFVC-2(p0: Base1): E
+ public synthetic static method getFakeOverrideMFVC-2-0(p0: Base1): D
+ public synthetic static method getFakeOverrideMFVC-2-0-0(p0: Base1): C
+ public synthetic static method getFakeOverrideMFVC-2-0-0-0(p0: Base1): int
+ public synthetic static method getFakeOverrideMFVC-2-0-0-1(p0: Base1): int
+ public synthetic static method getFakeOverrideMFVC-2-0-0-2(p0: Base1): java.lang.String
+ public synthetic static method getFakeOverrideMFVC-3(p0: Base1): java.util.List
+ public static method getFakeOverrideRegular(@org.jetbrains.annotations.NotNull p0: Base1): int
+ public final inner class Base1$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface Base1 {
+ // source: 'complex.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
+ public synthetic abstract method getFakeOverrideMFVC-0(): int
+ public synthetic abstract method getFakeOverrideMFVC-1(): int
+ public synthetic abstract method getFakeOverrideMFVC-2(): E
+ public synthetic abstract method getFakeOverrideMFVC-2-0(): D
+ public synthetic abstract method getFakeOverrideMFVC-2-0-0(): C
+ public synthetic abstract method getFakeOverrideMFVC-2-0-0-0(): int
+ public synthetic abstract method getFakeOverrideMFVC-2-0-0-1(): int
+ public synthetic abstract method getFakeOverrideMFVC-2-0-0-2(): java.lang.String
+ public synthetic abstract method getFakeOverrideMFVC-3(): java.util.List
+ public abstract method getFakeOverrideRegular(): int
+ public final inner class Base1$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface Base2 {
+ // source: 'complex.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getL(): R
+ public synthetic abstract method getL-0(): int
+ public synthetic abstract method getL-1(): int
+ public synthetic abstract method getL-2(): E
+ public synthetic abstract method getL-2-0(): D
+ public synthetic abstract method getL-2-0-0(): C
+ public synthetic abstract method getL-2-0-0-0(): int
+ public synthetic abstract method getL-2-0-0-1(): int
+ public synthetic abstract method getL-2-0-0-2(): java.lang.String
+ public synthetic abstract method getL-3(): java.util.List
+ public abstract method setL-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+}
+
+@kotlin.Metadata
+public interface Base3 {
+ // source: 'complex.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getZ(): E
+ public synthetic abstract method getZ-0(): D
+ public synthetic abstract method getZ-0-0(): C
+ public synthetic abstract method getZ-0-0-0(): int
+ public synthetic abstract method getZ-0-0-1(): int
+ public synthetic abstract method getZ-0-0-2(): java.lang.String
+}
+
+@kotlin.Metadata
+public interface Base4 {
+ // source: 'complex.kt'
+ public abstract method getL(): java.lang.Object
+ public abstract method setL(p0: java.lang.Object): void
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class C {
+ // source: 'complex.kt'
+ private final field field-0: int
+ private final field field-1: int
+ private final @org.jetbrains.annotations.NotNull field field-2: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): C
+ public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public synthetic final method unbox-impl-2(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class ComplexKt {
+ // source: 'complex.kt'
+ private final static @org.jetbrains.annotations.NotNull field lines: java.util.List
+ static method <clinit>(): void
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method equalsChecks-GPBa7dw(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List, p6: int, p7: int, p8: int, p9: int, @org.jetbrains.annotations.NotNull p10: java.lang.String, @org.jetbrains.annotations.NotNull p11: java.util.List): void
+ public final static method equalsChecks1-iUtXLc0(@org.jetbrains.annotations.NotNull p0: java.util.List): void
+ public final static method f-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public final static method g-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
+ public final static @org.jetbrains.annotations.NotNull method getLines(): java.util.List
+ public final static method h-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public final static method h1(): void
+ public final static @org.jetbrains.annotations.NotNull method inlined-OsBMiQA(p0: int, p1: int, p2: int): D
+ public final static @org.jetbrains.annotations.NotNull method notInlined-OsBMiQA(p0: int, p1: int, p2: int): D
+ public final static method reuseBoxed(@org.jetbrains.annotations.NotNull p0: java.util.List): void
+ public final static method supply(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
+ public final static method testVars(@org.jetbrains.annotations.NotNull p0: NotInlined): void
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class D {
+ // source: 'complex.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private final @org.jetbrains.annotations.NotNull field field-0-2: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): D
+ public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
+ public final static @org.jetbrains.annotations.NotNull method constructor-impl(p0: int, p1: int, p2: int): D
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): C
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+ public synthetic final method unbox-impl-0-2(): java.lang.String
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class E {
+ // source: 'complex.kt'
+ private final field field-0-0-0: int
+ private final field field-0-0-1: int
+ private final @org.jetbrains.annotations.NotNull field field-0-0-2: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: java.lang.String): E
+ public final static method constructor-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.String, p3: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: java.lang.String, p3: int, p4: int, p5: java.lang.String): boolean
+ public final static @org.jetbrains.annotations.NotNull method getWithNonTrivialSetters-impl(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String): D
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: java.lang.String): int
+ public final static method setWithNonTrivialSetters-sUp7gFk(p0: int, p1: int, @org.jetbrains.annotations.NotNull p2: java.lang.String, p3: int, p4: int, @org.jetbrains.annotations.NotNull p5: java.lang.String): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): D
+ public synthetic final method unbox-impl-0-0(): C
+ public synthetic final method unbox-impl-0-0-0(): int
+ public synthetic final method unbox-impl-0-0-1(): int
+ public synthetic final method unbox-impl-0-0-2(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class NotInlined {
+ // source: 'complex.kt'
+ private field l-0: int
+ private field l-1: int
+ private field l-2-0-0-0: int
+ private field l-2-0-0-1: int
+ private @org.jetbrains.annotations.NotNull field l-2-0-0-2: java.lang.String
+ private @org.jetbrains.annotations.NotNull field l-3: java.util.List
+ private final field withNonTrivialGettersWithBF-0: int
+ private final field withNonTrivialGettersWithBF-1: int
+ private final field withNonTrivialGettersWithBF-2-0-0-0: int
+ private final field withNonTrivialGettersWithBF-2-0-0-1: int
+ private final @org.jetbrains.annotations.NotNull field withNonTrivialGettersWithBF-2-0-0-2: java.lang.String
+ private final @org.jetbrains.annotations.NotNull field withNonTrivialGettersWithBF-3: java.util.List
+ private field withNonTrivialSettersWithBF-0: int
+ private field withNonTrivialSettersWithBF-1: int
+ private field withNonTrivialSettersWithBF-2-0-0-0: int
+ private field withNonTrivialSettersWithBF-2-0-0-1: int
+ private @org.jetbrains.annotations.NotNull field withNonTrivialSettersWithBF-2-0-0-2: java.lang.String
+ private @org.jetbrains.annotations.NotNull field withNonTrivialSettersWithBF-3: java.util.List
+ private field y: int
+ private method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int): void
+ public synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int, p7: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
+ public method getFakeOverrideRegular(): int
+ public @org.jetbrains.annotations.NotNull method getL(): R
+ public synthetic bridge method getL(): java.lang.Object
+ public synthetic method getL-0(): int
+ public synthetic method getL-1(): int
+ public synthetic method getL-2(): E
+ public synthetic method getL-2-0(): D
+ public synthetic method getL-2-0-0(): C
+ public synthetic method getL-2-0-0-0(): int
+ public synthetic method getL-2-0-0-1(): int
+ public synthetic method getL-2-0-0-2(): java.lang.String
+ public synthetic method getL-3(): java.util.List
+ public final @org.jetbrains.annotations.NotNull method getWithNonTrivialGettersWithBF(): R
+ public synthetic final method getWithNonTrivialGettersWithBF-0(): int
+ public synthetic final method getWithNonTrivialGettersWithBF-1(): int
+ public synthetic final method getWithNonTrivialGettersWithBF-2(): E
+ public synthetic final method getWithNonTrivialGettersWithBF-2-0(): D
+ public synthetic final method getWithNonTrivialGettersWithBF-2-0-0(): C
+ public synthetic final method getWithNonTrivialGettersWithBF-2-0-0-0(): int
+ public synthetic final method getWithNonTrivialGettersWithBF-2-0-0-1(): int
+ public synthetic final method getWithNonTrivialGettersWithBF-2-0-0-2(): java.lang.String
+ public synthetic final method getWithNonTrivialGettersWithBF-3(): java.util.List
+ public final @org.jetbrains.annotations.NotNull method getWithNonTrivialSetters(): R
+ public synthetic final method getWithNonTrivialSetters-0(): int
+ public synthetic final method getWithNonTrivialSetters-1(): int
+ public synthetic final method getWithNonTrivialSetters-2(): E
+ public synthetic final method getWithNonTrivialSetters-2-0(): D
+ public synthetic final method getWithNonTrivialSetters-2-0-0(): C
+ public synthetic final method getWithNonTrivialSetters-2-0-0-0(): int
+ public synthetic final method getWithNonTrivialSetters-2-0-0-1(): int
+ public synthetic final method getWithNonTrivialSetters-2-0-0-2(): java.lang.String
+ public synthetic final method getWithNonTrivialSetters-3(): java.util.List
+ public final @org.jetbrains.annotations.NotNull method getWithNonTrivialSettersWithBF(): R
+ public synthetic final method getWithNonTrivialSettersWithBF-0(): int
+ public synthetic final method getWithNonTrivialSettersWithBF-1(): int
+ public synthetic final method getWithNonTrivialSettersWithBF-2(): E
+ public synthetic final method getWithNonTrivialSettersWithBF-2-0(): D
+ public synthetic final method getWithNonTrivialSettersWithBF-2-0-0(): C
+ public synthetic final method getWithNonTrivialSettersWithBF-2-0-0-0(): int
+ public synthetic final method getWithNonTrivialSettersWithBF-2-0-0-1(): int
+ public synthetic final method getWithNonTrivialSettersWithBF-2-0-0-2(): java.lang.String
+ public synthetic final method getWithNonTrivialSettersWithBF-3(): java.util.List
+ public final method getY(): int
+ public synthetic bridge method setL(p0: java.lang.Object): void
+ public method setL-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public final method setWithNonTrivialSetters-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public final method setWithNonTrivialSettersWithBF-sUp7gFk(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public final method setY(p0: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public final method trySetter(): void
+ public final inner class Base1$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class R {
+ // source: 'complex.kt'
+ private final field field-0: int
+ private final field field-1: int
+ private final field field-2-0-0-0: int
+ private final field field-2-0-0-1: int
+ private final @org.jetbrains.annotations.NotNull field field-2-0-0-2: java.lang.String
+ private final @org.jetbrains.annotations.NotNull field field-3: java.util.List
+ private synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): R
+ public final static method constructor-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List, p6: int, p7: int, p8: int, p9: int, p10: java.lang.String, p11: java.util.List): boolean
+ public @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC(): R
+ public static @org.jetbrains.annotations.NotNull method getFakeOverrideMFVC-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): R
+ public method getFakeOverrideRegular(): int
+ public static method getFakeOverrideRegular-impl(p0: int, p1: int, p2: int, p3: int, @org.jetbrains.annotations.NotNull p4: java.lang.String, @org.jetbrains.annotations.NotNull p5: java.util.List): int
+ public @org.jetbrains.annotations.NotNull method getZ(): E
+ public synthetic bridge method getZ-0(): D
+ public synthetic bridge method getZ-0-0(): C
+ public synthetic bridge method getZ-0-0-0(): int
+ public synthetic bridge method getZ-0-0-1(): int
+ public synthetic bridge method getZ-0-0-2(): java.lang.String
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: int, p3: int, p4: java.lang.String, p5: java.util.List): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public synthetic final method unbox-impl-2(): E
+ public synthetic final method unbox-impl-2-0(): D
+ public synthetic final method unbox-impl-2-0-0(): C
+ public synthetic final method unbox-impl-2-0-0-0(): int
+ public synthetic final method unbox-impl-2-0-0-1(): int
+ public synthetic final method unbox-impl-2-0-0-2(): java.lang.String
+ public synthetic final method unbox-impl-3(): java.util.List
+ public final inner class Base1$DefaultImpls
+}
diff --git a/compiler/testData/codegen/box/valueClasses/conditionalExpressions.kt b/compiler/testData/codegen/box/valueClasses/conditionalExpressions.kt
new file mode 100644
index 0000000..23a8dda
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/conditionalExpressions.kt
@@ -0,0 +1,53 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double) {
+ init {
+ counter++
+ }
+ companion object {
+ @JvmStatic
+ var counter: Int = 0
+ }
+}
+
+fun ifExpr() = if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+
+fun whenExpr() = when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+}
+
+fun ifBody() {
+ if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+ val x = if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+ require(x == DPoint(4.0, 5.0))
+}
+
+fun whenBody() {
+ when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+ }
+ val x = when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+ }
+ require(x == DPoint(8.0, 9.0))
+}
+
+fun box(): String {
+ ifBody()
+ whenBody()
+ require(ifExpr() == DPoint(4.0, 5.0))
+ require(whenExpr() == DPoint(8.0, 9.0))
+ require(DPoint.counter == 5 + 5 + 2 + 1 + 2 + 1)
+ return "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/valueClasses/conditionalExpressions.txt b/compiler/testData/codegen/box/valueClasses/conditionalExpressions.txt
new file mode 100644
index 0000000..9fc5090
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/conditionalExpressions.txt
@@ -0,0 +1,49 @@
+@kotlin.Metadata
+public final class ConditionalExpressionsKt {
+ // source: 'conditionalExpressions.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method ifBody(): void
+ public final static @org.jetbrains.annotations.NotNull method ifExpr(): DPoint
+ public final static method whenBody(): void
+ public final static @org.jetbrains.annotations.NotNull method whenExpr(): DPoint
+ public final inner class DPoint$Companion
+}
+
+@kotlin.Metadata
+public final class DPoint$Companion {
+ // source: 'conditionalExpressions.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getCounter$annotations(): void
+ public final method getCounter(): int
+ public final method setCounter(p0: int): void
+ public final inner class DPoint$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'conditionalExpressions.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: DPoint$Companion
+ private static field counter: int
+ private final field field-0: double
+ private final field field-1: double
+ static method <clinit>(): void
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method access$getCounter$cp(): int
+ public synthetic final static method access$setCounter$cp(p0: int): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public final static method getCounter(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public final static method setCounter(p0: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class DPoint$Companion
+}
diff --git a/compiler/testData/codegen/box/valueClasses/equality.kt b/compiler/testData/codegen/box/valueClasses/equality.kt
index 3935348..220a66e 100644
--- a/compiler/testData/codegen/box/valueClasses/equality.kt
+++ b/compiler/testData/codegen/box/valueClasses/equality.kt
@@ -1,7 +1,10 @@
+// IGNORE_BACKEND_FIR: JVM_IR
+// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
// WITH_STDLIB
// TARGET_BACKEND: JVM_IR
// WORKS_WHEN_VALUE_CLASS
// LANGUAGE: +ValueClasses
+// CHECK_BYTECODE_LISTING
OPTIONAL_JVM_INLINE_ANNOTATION
value class F1(val x: Int)
diff --git a/compiler/testData/codegen/box/valueClasses/equality.txt b/compiler/testData/codegen/box/valueClasses/equality.txt
new file mode 100644
index 0000000..9cab488
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/equality.txt
@@ -0,0 +1,217 @@
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class A {
+ // source: 'equality.kt'
+ private final field field-0: int
+ private final field field-1: int
+ private final field field-2-0: int
+ private final field field-2-1: int
+ private final field field-3: int
+ private final field field-4: int
+ private final @org.jetbrains.annotations.NotNull field field-5: java.lang.String
+ private final field field-6: int
+ private final field field-7: int
+ private final @org.jetbrains.annotations.NotNull field field-8: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String): A
+ public final static method constructor-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, @org.jetbrains.annotations.NotNull p6: java.lang.String, p7: int, p8: int, @org.jetbrains.annotations.NotNull p9: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public synthetic final method unbox-impl-2(): F3
+ public synthetic final method unbox-impl-2-0(): int
+ public synthetic final method unbox-impl-2-1(): int
+ public synthetic final method unbox-impl-3(): int
+ public synthetic final method unbox-impl-4(): int
+ public synthetic final method unbox-impl-5(): java.lang.String
+ public synthetic final method unbox-impl-6(): int
+ public synthetic final method unbox-impl-7(): int
+ public synthetic final method unbox-impl-8(): java.lang.String
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class B {
+ // source: 'equality.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private final field field-0-2-0: int
+ private final field field-0-2-1: int
+ private final field field-0-3: int
+ private final field field-0-4: int
+ private final @org.jetbrains.annotations.NotNull field field-0-5: java.lang.String
+ private final field field-0-6: int
+ private final field field-0-7: int
+ private final @org.jetbrains.annotations.NotNull field field-0-8: java.lang.String
+ private final field field-1-0: int
+ private final field field-1-1: int
+ private final field field-1-2-0: int
+ private final field field-1-2-1: int
+ private final field field-1-3: int
+ private final field field-1-4: int
+ private final @org.jetbrains.annotations.NotNull field field-1-5: java.lang.String
+ private final field field-1-6: int
+ private final field field-1-7: int
+ private final @org.jetbrains.annotations.NotNull field field-1-8: java.lang.String
+ private synthetic method <init>(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String): void
+ public synthetic final static method box-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String): B
+ public final static method constructor-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, @org.jetbrains.annotations.NotNull p6: java.lang.String, p7: int, p8: int, @org.jetbrains.annotations.NotNull p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, @org.jetbrains.annotations.NotNull p16: java.lang.String, p17: int, p18: int, @org.jetbrains.annotations.NotNull p19: java.lang.String): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String, p20: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String, p20: int, p21: int, p22: int, p23: int, p24: int, p25: int, p26: java.lang.String, p27: int, p28: int, p29: java.lang.String, p30: int, p31: int, p32: int, p33: int, p34: int, p35: int, p36: java.lang.String, p37: int, p38: int, p39: java.lang.String): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, p6: java.lang.String, p7: int, p8: int, p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, p16: java.lang.String, p17: int, p18: int, p19: java.lang.String): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static @org.jetbrains.annotations.NotNull method toString-impl(p0: int, p1: int, p2: int, p3: int, p4: int, p5: int, @org.jetbrains.annotations.NotNull p6: java.lang.String, p7: int, p8: int, @org.jetbrains.annotations.NotNull p9: java.lang.String, p10: int, p11: int, p12: int, p13: int, p14: int, p15: int, @org.jetbrains.annotations.NotNull p16: java.lang.String, p17: int, p18: int, @org.jetbrains.annotations.NotNull p19: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl-0(): A
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+ public synthetic final method unbox-impl-0-2(): F3
+ public synthetic final method unbox-impl-0-2-0(): int
+ public synthetic final method unbox-impl-0-2-1(): int
+ public synthetic final method unbox-impl-0-3(): int
+ public synthetic final method unbox-impl-0-4(): int
+ public synthetic final method unbox-impl-0-5(): java.lang.String
+ public synthetic final method unbox-impl-0-6(): int
+ public synthetic final method unbox-impl-0-7(): int
+ public synthetic final method unbox-impl-0-8(): java.lang.String
+ public synthetic final method unbox-impl-1(): A
+ public synthetic final method unbox-impl-1-0(): int
+ public synthetic final method unbox-impl-1-1(): int
+ public synthetic final method unbox-impl-1-2(): F3
+ public synthetic final method unbox-impl-1-2-0(): int
+ public synthetic final method unbox-impl-1-2-1(): int
+ public synthetic final method unbox-impl-1-3(): int
+ public synthetic final method unbox-impl-1-4(): int
+ public synthetic final method unbox-impl-1-5(): java.lang.String
+ public synthetic final method unbox-impl-1-6(): int
+ public synthetic final method unbox-impl-1-7(): int
+ public synthetic final method unbox-impl-1-8(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class EqualityKt {
+ // source: 'equality.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F1 {
+ // source: 'equality.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): F1
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F2 {
+ // source: 'equality.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): F2
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX-pVg5ArA(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F3 {
+ // source: 'equality.kt'
+ private final field field-0: int
+ private final field field-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): F3
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F4 {
+ // source: 'equality.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): F4
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F5 {
+ // source: 'equality.kt'
+ private final field x: int
+ private synthetic method <init>(p0: int): void
+ public synthetic final static method box-impl(p0: int): F5
+ public static method constructor-impl(p0: int): int
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int): boolean
+ public final method getX-pVg5ArA(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: int): java.lang.String
+ public synthetic final method unbox-impl(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class F6 {
+ // source: 'equality.kt'
+ private final @org.jetbrains.annotations.NotNull field x: java.lang.String
+ private synthetic method <init>(p0: java.lang.String): void
+ public synthetic final static method box-impl(p0: java.lang.String): F6
+ public static @org.jetbrains.annotations.NotNull method constructor-impl(@org.jetbrains.annotations.NotNull p0: java.lang.String): java.lang.String
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.String, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.String, p1: java.lang.String): boolean
+ public final @org.jetbrains.annotations.NotNull method getX(): java.lang.String
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.String): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.String): java.lang.String
+ public synthetic final method unbox-impl(): java.lang.String
+}
diff --git a/compiler/testData/codegen/box/valueClasses/forStatement.kt b/compiler/testData/codegen/box/valueClasses/forStatement.kt
new file mode 100644
index 0000000..3c0b96b
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/forStatement.kt
@@ -0,0 +1,16 @@
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+fun box(): String {
+ var res = 0.0
+ for (x in listOf(DPoint(1.0, 2.0), DPoint(3.0, 4.0))) {
+ res += x.x + x.y
+ }
+ require(res == 10.0)
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.kt b/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.kt
new file mode 100644
index 0000000..21a92ef
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.kt
@@ -0,0 +1,27 @@
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+// CHECK_BYTECODE_LISTING
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+class A(var x: DPoint) {
+ init { x = DPoint(2.0, 3.0) }
+}
+
+class B() {
+ var a = DPoint(4.0, 5.0)
+ val b = a
+ init { a = DPoint(6.0, 7.0) }
+ val c = a
+}
+
+fun box(): String {
+ require(A(DPoint(0.0, 1.0)).x == DPoint(2.0, 3.0)) { "No init used" }
+ require(B().a == DPoint(6.0, 7.0)) { "No init used" }
+ require(B().b == DPoint(4.0, 5.0)) { "Wrong init order used" }
+ require(B().c == DPoint(6.0, 7.0)) { "Wrong init order used" }
+ return "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.txt b/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.txt
new file mode 100644
index 0000000..fe8f71e
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.txt
@@ -0,0 +1,59 @@
+@kotlin.Metadata
+public final class A {
+ // source: 'mfvcFieldInitializationOrder.kt'
+ private field x-0: double
+ private field x-1: double
+ public method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method getX(): DPoint
+ public synthetic final method getX-0(): double
+ public synthetic final method getX-1(): double
+ public final method setX-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class B {
+ // source: 'mfvcFieldInitializationOrder.kt'
+ private field a-0: double
+ private field a-1: double
+ private final field b-0: double
+ private final field b-1: double
+ private final field c-0: double
+ private final field c-1: double
+ public method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method getA(): DPoint
+ public synthetic final method getA-0(): double
+ public synthetic final method getA-1(): double
+ public final @org.jetbrains.annotations.NotNull method getB(): DPoint
+ public synthetic final method getB-0(): double
+ public synthetic final method getB-1(): double
+ public final @org.jetbrains.annotations.NotNull method getC(): DPoint
+ public synthetic final method getC-0(): double
+ public synthetic final method getC-1(): double
+ public final method setA-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'mfvcFieldInitializationOrder.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.Metadata
+public final class MfvcFieldInitializationOrderKt {
+ // source: 'mfvcFieldInitializationOrder.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides.kt b/compiler/testData/codegen/box/valueClasses/overrides.kt
new file mode 100644
index 0000000..828a385
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides.kt
@@ -0,0 +1,311 @@
+// IGNORE_BACKEND_FIR: JVM_IR
+// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+// CHECK_BYTECODE_LISTING
+
+interface AbstractPoint<T> {
+ val x: T
+ val y: T
+}
+
+@JvmInline
+value class DPoint(override val x: Double, override val y: Double): AbstractPoint<Double>
+
+interface GenericMFVCHolder<T> {
+ var p: T
+ var p1: T
+}
+
+interface GenericMFVCHolderWithMFVCUpperBound<T : DPoint> {
+ var p: T
+ var p1: T
+}
+
+interface ReifiedMFVCHolder {
+ var p: DPoint
+ var p1: DPoint
+}
+
+data class DataClassException(val value: Any?): Exception()
+
+interface GenericMFVCHolderWithImpls<T> {
+ var p: T
+ get() = throw DataClassException(1)
+ set(value) = throw DataClassException(2 to value)
+
+ var p1: T
+ get() = throw DataClassException(3)
+ set(value) = throw DataClassException(4 to value)
+}
+
+interface GenericMFVCHolderWithMFVCUpperBoundWithImpls<T : DPoint> {
+ var p: T
+ get() = throw DataClassException(5)
+ set(value) = throw DataClassException(6 to value)
+
+ var p1: T
+ get() = throw DataClassException(7)
+ set(value) = throw DataClassException(8 to value)
+}
+
+interface ReifiedMFVCHolderWithImpls {
+ var p: DPoint
+ get() = throw DataClassException(9)
+ set(value) = throw DataClassException(10 to value)
+
+ var p1: DPoint
+ get() = throw DataClassException(11)
+ set(value) = throw DataClassException(12 to value)
+}
+
+class RealOverride(override var p: DPoint) : GenericMFVCHolder<DPoint>, ReifiedMFVCHolder, GenericMFVCHolderWithMFVCUpperBound<DPoint> {
+ override var p1: DPoint
+ get() = throw DataClassException(13)
+ set(value) = throw DataClassException(14 to value)
+}
+
+class GenericFakeOverride : GenericMFVCHolderWithImpls<DPoint>
+class ReifiedFakeOverride : ReifiedMFVCHolderWithImpls
+class GenericFakeOverrideWithMFVCUpperBound : GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>
+
+
+@JvmInline
+value class GenericFakeOverrideMFVC(val field1: Double, val field2: Double) : GenericMFVCHolderWithImpls<DPoint>
+@JvmInline
+value class ReifiedFakeOverrideMFVC(val field1: Double, val field2: Double) : ReifiedMFVCHolderWithImpls
+@JvmInline
+value class GenericFakeOverrideMFVCWithMFVCUpperBound(val field1: Double, val field2: Double) : GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>
+
+
+interface SomePointInterface<T> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: DPoint
+}
+
+interface SomePointInterfaceWithMFVCBound<T : DPoint> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: DPoint
+}
+
+@JvmInline
+value class DPointWithInterface(val x: Double, val y: Double) : SomePointInterface<DPoint>, SomePointInterfaceWithMFVCBound<DPoint> {
+ override var somethingGeneric: DPoint
+ get() = throw DataClassException(15)
+ set(value) = throw DataClassException(16 to value)
+
+ override var somethingMFVC: DPoint
+ get() = throw DataClassException(17)
+ set(value) = throw DataClassException(18 to value)
+
+ override var somethingRegular: Int
+ get() = throw DataClassException(19)
+ set(value) = throw DataClassException(20 to value)
+}
+
+
+interface AbstractSegment<T> {
+ val p1: T
+ val p2: T
+}
+
+@JvmInline
+value class DSegment(override val p1: DPoint, override val p2: DPoint): AbstractSegment<DPoint>
+
+fun <T> equal(expected: () -> T, actual: () -> T) {
+ val expectedResult = runCatching { expected() }
+ val actualResult = runCatching { actual() }
+ require(expectedResult == actualResult) { "Expected: $expectedResult\nActual: $actualResult" }
+}
+
+fun box(): String {
+ val dPoint = DPoint(1.0, 2.0)
+
+ val lam1: () -> DPoint = { throw DataClassException(1) }
+ val lam2: () -> Unit = { throw DataClassException(2 to dPoint) }
+ val lam3: () -> DPoint = { throw DataClassException(3) }
+ val lam4: () -> Unit = { throw DataClassException(4 to dPoint) }
+ val lam5: () -> DPoint = { throw DataClassException(5) }
+ val lam6: () -> Unit = { throw DataClassException(6 to dPoint) }
+ val lam7: () -> DPoint = { throw DataClassException(7) }
+ val lam8: () -> Unit = { throw DataClassException(8 to dPoint) }
+ val lam9: () -> DPoint = { throw DataClassException(9) }
+ val lam10: () -> Unit = { throw DataClassException(10 to dPoint) }
+ val lam11: () -> DPoint = { throw DataClassException(11) }
+ val lam12: () -> Unit = { throw DataClassException(12 to dPoint) }
+ val lam13: () -> DPoint = { throw DataClassException(13) }
+ val lam14: () -> Unit = { throw DataClassException(14 to dPoint) }
+ val lam15: () -> DPoint = { throw DataClassException(15) }
+ val lam16: () -> Unit = { throw DataClassException(16 to dPoint) }
+ val lam17: () -> DPoint = { throw DataClassException(17) }
+ val lam18: () -> Unit = { throw DataClassException(18 to dPoint) }
+ val lam19: () -> Int = { throw DataClassException(19) }
+ val lam20: () -> Unit = { throw DataClassException(20 to 1) }
+ val emptyLam = {}
+ val dPointLam = { dPoint }
+ val otherDPoint = DPoint(3.0, 4.0)
+ val otherDPointLam = { otherDPoint }
+ equal({ "DPoint(x=1.0, y=2.0)" }, { dPoint.toString() })
+ equal({ "DPoint(x=1.0, y=2.0)" }, { (dPoint as Any).toString() })
+
+ equal({ true }, { dPoint.equals(dPoint) })
+ equal({ true }, { dPoint.equals(dPoint as Any) })
+ equal({ true }, { (dPoint as Any).equals(dPoint) })
+ equal({ true }, { (dPoint as Any).equals(dPoint as Any) })
+
+ equal({ false }, { dPoint.equals(otherDPoint) })
+ equal({ false }, { dPoint.equals(otherDPoint as Any) })
+ equal({ false }, { (dPoint as Any).equals(otherDPoint) })
+ equal({ false }, { (dPoint as Any).equals(otherDPoint as Any) })
+
+ equal({ dPoint.hashCode() }, { (dPoint as Any).hashCode() })
+
+ equal({ 1.0 }, { dPoint.x })
+ equal({ 1.0 }, { (dPoint as AbstractPoint<Double>).x })
+ equal({ 2.0 }, { dPoint.y })
+ equal({ 2.0 }, { (dPoint as AbstractPoint<Double>).y })
+
+
+ val realOverride = RealOverride(dPoint)
+
+ equal(dPointLam, { realOverride.p })
+ equal(dPointLam, { (realOverride as GenericMFVCHolder<DPoint>).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as GenericMFVCHolder<DPoint>).p1 })
+ equal(dPointLam, { (realOverride as ReifiedMFVCHolder).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as ReifiedMFVCHolder).p1 })
+ equal(dPointLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p })
+ equal(lam13, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p1 })
+
+
+ equal(emptyLam, { realOverride.p = dPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolder<DPoint>).p = dPoint })
+ equal(lam14, { realOverride.p1 = dPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolder<DPoint>).p1 = dPoint })
+ equal(emptyLam, { (realOverride as ReifiedMFVCHolder).p = dPoint })
+ equal(lam14, { (realOverride as ReifiedMFVCHolder).p1 = dPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p = dPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p1 = dPoint })
+
+
+ val genericFakeOverride = GenericFakeOverride()
+
+ equal(lam1, { genericFakeOverride.p })
+ equal(lam1, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p })
+ equal(lam3, { genericFakeOverride.p1 })
+ equal(lam3, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p1 })
+ val reifiedFakeOverride = ReifiedFakeOverride()
+ equal(lam9, { reifiedFakeOverride.p })
+ equal(lam9, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p })
+ equal(lam11, { reifiedFakeOverride.p1 })
+ equal(lam11, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p1 })
+ val genericFakeOverrideWithMFVCUpperBound = GenericFakeOverrideWithMFVCUpperBound()
+ equal(lam5, { genericFakeOverrideWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p })
+ equal(lam7, { genericFakeOverrideWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 })
+
+ equal(lam2, { genericFakeOverride.p = dPoint })
+ equal(lam2, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p = dPoint })
+ equal(lam4, { genericFakeOverride.p1 = dPoint })
+ equal(lam4, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p1 = dPoint })
+ equal(lam10, { reifiedFakeOverride.p = dPoint })
+ equal(lam10, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p = dPoint })
+ equal(lam12, { reifiedFakeOverride.p1 = dPoint })
+ equal(lam12, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p1 = dPoint })
+ equal(lam6, { genericFakeOverrideWithMFVCUpperBound.p = dPoint })
+ equal(lam6, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p = dPoint })
+ equal(lam8, { genericFakeOverrideWithMFVCUpperBound.p1 = dPoint })
+ equal(lam8, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 = dPoint })
+
+
+ val genericFakeOverrideMFVC = GenericFakeOverrideMFVC(1.0, 2.0)
+
+ equal(lam1, { genericFakeOverrideMFVC.p })
+ equal(lam1, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p })
+ equal(lam3, { genericFakeOverrideMFVC.p1 })
+ equal(lam3, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p1 })
+
+ val reifiedFakeOverrideMFVC = ReifiedFakeOverrideMFVC(1.0, 2.0)
+ equal(lam9, { reifiedFakeOverrideMFVC.p })
+ equal(lam9, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p })
+ equal(lam11, { reifiedFakeOverrideMFVC.p1 })
+ equal(lam11, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p1 })
+
+ val genericFakeOverrideMFVCWithMFVCUpperBound = GenericFakeOverrideMFVCWithMFVCUpperBound(1.0, 2.0)
+ equal(lam5, { genericFakeOverrideMFVCWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p })
+ equal(lam7, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 })
+
+ equal(lam2, { genericFakeOverrideMFVC.p = dPoint })
+ equal(lam2, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p = dPoint })
+ equal(lam4, { genericFakeOverrideMFVC.p1 = dPoint })
+ equal(lam4, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p1 = dPoint })
+
+ equal(lam10, { reifiedFakeOverrideMFVC.p = dPoint })
+ equal(lam10, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p = dPoint })
+ equal(lam12, { reifiedFakeOverrideMFVC.p1 = dPoint })
+ equal(lam12, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p1 = dPoint })
+
+ equal(lam6, { genericFakeOverrideMFVCWithMFVCUpperBound.p = dPoint })
+ equal(lam6, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p = dPoint })
+ equal(lam8, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 = dPoint })
+ equal(lam8, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 = dPoint })
+
+
+ val dPointWithInterface = DPointWithInterface(1.0, 2.0)
+
+ equal(lam15, { dPointWithInterface.somethingGeneric })
+ equal(lam15, { (dPointWithInterface as SomePointInterface<DPoint>).somethingGeneric })
+ equal(lam19, { dPointWithInterface.somethingRegular })
+ equal(lam19, { (dPointWithInterface as SomePointInterface<DPoint>).somethingRegular })
+ equal(lam17, { dPointWithInterface.somethingMFVC })
+ equal(lam17, { (dPointWithInterface as SomePointInterface<DPoint>).somethingMFVC })
+
+ equal(lam15, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingGeneric })
+ equal(lam19, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingRegular })
+ equal(lam17, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingMFVC })
+
+ equal(lam16, { dPointWithInterface.somethingGeneric = dPoint })
+ equal(lam16, { (dPointWithInterface as SomePointInterface<DPoint>).somethingGeneric = dPoint })
+ equal(lam20, { dPointWithInterface.somethingRegular = 1 })
+ equal(lam20, { (dPointWithInterface as SomePointInterface<DPoint>).somethingRegular = 1 })
+ equal(lam18, { dPointWithInterface.somethingMFVC = dPoint })
+ equal(lam18, { (dPointWithInterface as SomePointInterface<DPoint>).somethingMFVC = dPoint })
+
+ equal(lam16, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingGeneric = dPoint })
+ equal(lam20, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingRegular = 1 })
+ equal(lam18, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingMFVC = dPoint })
+
+
+ val dSegment = DSegment(dPoint, otherDPoint)
+
+ equal(dPointLam, { dSegment.p1 })
+ equal(otherDPointLam, { dSegment.p2 })
+ equal({ 1.0 }, { dPoint.x })
+ equal({ 1.0 }, { dSegment.p1.x })
+ equal({ 3.0 }, { otherDPoint.x })
+ equal({ 3.0 }, { dSegment.p2.x })
+ equal({ 2.0 }, { dPoint.y })
+ equal({ 2.0 }, { dSegment.p1.y })
+ equal({ 4.0 }, { otherDPoint.y })
+ equal({ 4.0 }, { dSegment.p2.y })
+ equal(dPointLam, { (dSegment as AbstractSegment<DPoint>).p1 })
+ equal(otherDPointLam, { (dSegment as AbstractSegment<DPoint>).p2 })
+ equal({ 1.0 }, { (dSegment as AbstractSegment<DPoint>).p1.x })
+ equal({ 3.0 }, { (dSegment as AbstractSegment<DPoint>).p2.x })
+ equal({ 2.0 }, { (dSegment as AbstractSegment<DPoint>).p1.y })
+ equal({ 4.0 }, { (dSegment as AbstractSegment<DPoint>).p2.y })
+
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides.txt b/compiler/testData/codegen/box/valueClasses/overrides.txt
new file mode 100644
index 0000000..2cba3eb
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides.txt
@@ -0,0 +1,2586 @@
+@kotlin.Metadata
+public interface AbstractPoint {
+ // source: 'overrides.kt'
+ public abstract method getX(): java.lang.Object
+ public abstract method getY(): java.lang.Object
+}
+
+@kotlin.Metadata
+public interface AbstractSegment {
+ // source: 'overrides.kt'
+ public abstract method getP1(): java.lang.Object
+ public abstract method getP2(): java.lang.Object
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'overrides.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getX(): java.lang.Double
+ public synthetic bridge method getX(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getY(): java.lang.Double
+ public synthetic bridge method getY(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPointWithInterface {
+ // source: 'overrides.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPointWithInterface
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getSomethingGeneric(): DPoint
+ public synthetic bridge method getSomethingGeneric(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getSomethingGeneric-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getSomethingMFVC-impl(p0: double, p1: double): DPoint
+ public method getSomethingRegular(): int
+ public static method getSomethingRegular-impl(p0: double, p1: double): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public synthetic bridge method setSomethingGeneric(p0: java.lang.Object): void
+ public method setSomethingGeneric-sUp7gFk(p0: double, p1: double): void
+ public static method setSomethingGeneric-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public static method setSomethingMFVC-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setSomethingRegular(p0: int): void
+ public static method setSomethingRegular-impl(p0: double, p1: double, p2: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DSegment {
+ // source: 'overrides.kt'
+ private final field field-0-0: double
+ private final field field-0-1: double
+ private final field field-1-0: double
+ private final field field-1-1: double
+ private synthetic method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic final static method box-impl(p0: double, p1: double, p2: double, p3: double): DSegment
+ public final static method constructor-impl(p0: double, p1: double, p2: double, p3: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: double, p3: double, p4: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double, p4: double, p5: double, p6: double, p7: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP2(): DPoint
+ public synthetic bridge method getP2(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double, p2: double, p3: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double, p2: double, p3: double): java.lang.String
+ public synthetic final method unbox-impl-0(): DPoint
+ public synthetic final method unbox-impl-0-0(): double
+ public synthetic final method unbox-impl-0-1(): double
+ public synthetic final method unbox-impl-1(): DPoint
+ public synthetic final method unbox-impl-1-0(): double
+ public synthetic final method unbox-impl-1-1(): double
+}
+
+@kotlin.Metadata
+public final class DataClassException {
+ // source: 'overrides.kt'
+ private final @org.jetbrains.annotations.Nullable field value: java.lang.Object
+ public method <init>(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.Nullable method component1(): java.lang.Object
+ public synthetic static method copy$default(p0: DataClassException, p1: java.lang.Object, p2: int, p3: java.lang.Object): DataClassException
+ public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.Nullable p0: java.lang.Object): DataClassException
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public final @org.jetbrains.annotations.Nullable method getValue(): java.lang.Object
+ public method hashCode(): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverride {
+ // source: 'overrides.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public method setP(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP1(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVC {
+ // source: 'overrides.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): GenericFakeOverrideMFVC
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVCWithMFVCUpperBound {
+ // source: 'overrides.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): GenericFakeOverrideMFVCWithMFVCUpperBound
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverrideWithMFVCUpperBound {
+ // source: 'overrides.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolder {
+ // source: 'overrides.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides.kt'
+ public static method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method setP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public static method setP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithImpls {
+ // source: 'overrides.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBound {
+ // source: 'overrides.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls {
+ // source: 'overrides.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): DPoint
+ public synthetic static method getP-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public synthetic static method getP-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): DPoint
+ public synthetic static method getP1-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public synthetic static method getP1-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: double, p2: double): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: double, p2: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBoundWithImpls {
+ // source: 'overrides.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$1
+ inner (anonymous) class OverridesKt$box$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$10 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$10
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$100 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$100
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$101 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$101
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$102 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$102
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$103 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$103
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$104 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$104
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$105 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$105
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$106 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$106
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$107 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$107
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$108 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$108
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$109 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$109
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$11 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$11
+ inner (anonymous) class OverridesKt$box$11
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$110 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$110
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$111 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$111
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$112 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$112
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$113 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$113
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$114 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ inner (anonymous) class OverridesKt$box$114
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$115 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$115
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$116 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$116
+ inner (anonymous) class OverridesKt$box$116
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$117 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ inner (anonymous) class OverridesKt$box$117
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$118 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$118
+ inner (anonymous) class OverridesKt$box$118
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$119 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ inner (anonymous) class OverridesKt$box$119
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$12 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$12
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$120 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$120
+ inner (anonymous) class OverridesKt$box$120
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$121 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-0: double
+ inner (anonymous) class OverridesKt$box$121
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$122 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$122
+ inner (anonymous) class OverridesKt$box$122
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$123 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-0: double
+ inner (anonymous) class OverridesKt$box$123
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$124 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$124
+ inner (anonymous) class OverridesKt$box$124
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$125 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$125
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$126 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$126
+ inner (anonymous) class OverridesKt$box$126
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$127 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-1: double
+ inner (anonymous) class OverridesKt$box$127
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$128 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$128
+ inner (anonymous) class OverridesKt$box$128
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$129 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$129
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$13 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$13
+ inner (anonymous) class OverridesKt$box$13
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$130 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$130
+ inner (anonymous) class OverridesKt$box$130
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$131 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$131
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$132 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$132
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$133 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$133
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$134 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$134
+ inner (anonymous) class OverridesKt$box$134
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$135 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$135
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$136 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$136
+ inner (anonymous) class OverridesKt$box$136
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$137 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$137
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$138 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$138
+ inner (anonymous) class OverridesKt$box$138
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$139 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$139
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$14 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$14
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$140 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$140
+ inner (anonymous) class OverridesKt$box$140
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$141 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class OverridesKt$box$141
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$15 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$15
+ inner (anonymous) class OverridesKt$box$15
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$16 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$16
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$17 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$17
+ inner (anonymous) class OverridesKt$box$17
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$18 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$18
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$19 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$19
+ inner (anonymous) class OverridesKt$box$19
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$2 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$2
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$20 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$20
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$21 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$21
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$22 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$22
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$23 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$23
+ inner (anonymous) class OverridesKt$box$23
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$24 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ inner (anonymous) class OverridesKt$box$24
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$25 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$25
+ inner (anonymous) class OverridesKt$box$25
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$26 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$26
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$27 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$27
+ inner (anonymous) class OverridesKt$box$27
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$28 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$28
+ method <init>(p0: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$29 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$29
+ inner (anonymous) class OverridesKt$box$29
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$3 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$3
+ inner (anonymous) class OverridesKt$box$3
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$30 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$30
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$31 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$31
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$32 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$32
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$33 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$33
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$34 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$34
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$35 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$35
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$36 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$36
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$37 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$37
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$38 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$38
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$39 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$39
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$4 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$4
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$40 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$40
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$41 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$41
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$42 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$42
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$43 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$43
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$44 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$44
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$45 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$45
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$46 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$46
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$47 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class OverridesKt$box$47
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$48 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$48
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$49 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$49
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$5 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$5
+ inner (anonymous) class OverridesKt$box$5
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$50 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$50
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$51 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$51
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$52 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$52
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$53 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$53
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$54 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$54
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$55 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$55
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$56 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$56
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$57 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$57
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$58 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$58
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$59 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$59
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$6 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$6
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$60 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$60
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$61 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$61
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$62 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$62
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$63 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class OverridesKt$box$63
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$64 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$64
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$65 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$65
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$66 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$66
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$67 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class OverridesKt$box$67
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$68 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$68
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$69 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$69
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$7 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$7
+ inner (anonymous) class OverridesKt$box$7
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$70 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$70
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$71 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class OverridesKt$box$71
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$72 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$72
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$73 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$73
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$74 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$74
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$75 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$75
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$76 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$76
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$77 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$77
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$78 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$78
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$79 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$79
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$8 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$8
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$80 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$80
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$81 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$81
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$82 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$82
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$83 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$83
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$84 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$84
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$85 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$85
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$86 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$86
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$87 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$87
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$88 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$88
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$89 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$89
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$9 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$9
+ inner (anonymous) class OverridesKt$box$9
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$90 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$90
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$91 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class OverridesKt$box$91
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$92 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$92
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$93 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$93
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$94 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$94
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$95 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class OverridesKt$box$95
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$96 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$96
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$97 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$97
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$98 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$98
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$99 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class OverridesKt$box$99
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$dPointLam$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$dPointLam$1
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$emptyLam$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$emptyLam$1
+ inner (anonymous) class OverridesKt$box$emptyLam$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam1$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam1$1
+ inner (anonymous) class OverridesKt$box$lam1$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam10$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam10$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam11$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam11$1
+ inner (anonymous) class OverridesKt$box$lam11$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam12$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam12$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam13$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam13$1
+ inner (anonymous) class OverridesKt$box$lam13$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam14$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam14$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam15$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam15$1
+ inner (anonymous) class OverridesKt$box$lam15$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam16$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam16$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam17$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam17$1
+ inner (anonymous) class OverridesKt$box$lam17$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam18$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam18$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam19$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam19$1
+ inner (anonymous) class OverridesKt$box$lam19$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam2$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam2$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam20$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam20$1
+ inner (anonymous) class OverridesKt$box$lam20$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam3$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam3$1
+ inner (anonymous) class OverridesKt$box$lam3$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam4$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam4$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam5$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam5$1
+ inner (anonymous) class OverridesKt$box$lam5$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam6$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam6$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam7$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam7$1
+ inner (anonymous) class OverridesKt$box$lam7$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam8$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$lam8$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$lam9$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ public final static field INSTANCE: OverridesKt$box$lam9$1
+ inner (anonymous) class OverridesKt$box$lam9$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class OverridesKt$box$otherDPointLam$1 {
+ // source: 'overrides.kt'
+ enclosing method OverridesKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class OverridesKt$box$otherDPointLam$1
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+public final class OverridesKt {
+ // source: 'overrides.kt'
+ inner (anonymous) class OverridesKt$box$1
+ inner (anonymous) class OverridesKt$box$10
+ inner (anonymous) class OverridesKt$box$100
+ inner (anonymous) class OverridesKt$box$101
+ inner (anonymous) class OverridesKt$box$102
+ inner (anonymous) class OverridesKt$box$103
+ inner (anonymous) class OverridesKt$box$104
+ inner (anonymous) class OverridesKt$box$105
+ inner (anonymous) class OverridesKt$box$106
+ inner (anonymous) class OverridesKt$box$107
+ inner (anonymous) class OverridesKt$box$108
+ inner (anonymous) class OverridesKt$box$109
+ inner (anonymous) class OverridesKt$box$11
+ inner (anonymous) class OverridesKt$box$110
+ inner (anonymous) class OverridesKt$box$111
+ inner (anonymous) class OverridesKt$box$112
+ inner (anonymous) class OverridesKt$box$113
+ inner (anonymous) class OverridesKt$box$114
+ inner (anonymous) class OverridesKt$box$115
+ inner (anonymous) class OverridesKt$box$116
+ inner (anonymous) class OverridesKt$box$117
+ inner (anonymous) class OverridesKt$box$118
+ inner (anonymous) class OverridesKt$box$119
+ inner (anonymous) class OverridesKt$box$12
+ inner (anonymous) class OverridesKt$box$120
+ inner (anonymous) class OverridesKt$box$121
+ inner (anonymous) class OverridesKt$box$122
+ inner (anonymous) class OverridesKt$box$123
+ inner (anonymous) class OverridesKt$box$124
+ inner (anonymous) class OverridesKt$box$125
+ inner (anonymous) class OverridesKt$box$126
+ inner (anonymous) class OverridesKt$box$127
+ inner (anonymous) class OverridesKt$box$128
+ inner (anonymous) class OverridesKt$box$129
+ inner (anonymous) class OverridesKt$box$13
+ inner (anonymous) class OverridesKt$box$130
+ inner (anonymous) class OverridesKt$box$131
+ inner (anonymous) class OverridesKt$box$132
+ inner (anonymous) class OverridesKt$box$133
+ inner (anonymous) class OverridesKt$box$134
+ inner (anonymous) class OverridesKt$box$135
+ inner (anonymous) class OverridesKt$box$136
+ inner (anonymous) class OverridesKt$box$137
+ inner (anonymous) class OverridesKt$box$138
+ inner (anonymous) class OverridesKt$box$139
+ inner (anonymous) class OverridesKt$box$14
+ inner (anonymous) class OverridesKt$box$140
+ inner (anonymous) class OverridesKt$box$141
+ inner (anonymous) class OverridesKt$box$15
+ inner (anonymous) class OverridesKt$box$16
+ inner (anonymous) class OverridesKt$box$17
+ inner (anonymous) class OverridesKt$box$18
+ inner (anonymous) class OverridesKt$box$19
+ inner (anonymous) class OverridesKt$box$2
+ inner (anonymous) class OverridesKt$box$20
+ inner (anonymous) class OverridesKt$box$21
+ inner (anonymous) class OverridesKt$box$22
+ inner (anonymous) class OverridesKt$box$23
+ inner (anonymous) class OverridesKt$box$24
+ inner (anonymous) class OverridesKt$box$25
+ inner (anonymous) class OverridesKt$box$26
+ inner (anonymous) class OverridesKt$box$27
+ inner (anonymous) class OverridesKt$box$28
+ inner (anonymous) class OverridesKt$box$29
+ inner (anonymous) class OverridesKt$box$3
+ inner (anonymous) class OverridesKt$box$30
+ inner (anonymous) class OverridesKt$box$31
+ inner (anonymous) class OverridesKt$box$32
+ inner (anonymous) class OverridesKt$box$33
+ inner (anonymous) class OverridesKt$box$34
+ inner (anonymous) class OverridesKt$box$35
+ inner (anonymous) class OverridesKt$box$36
+ inner (anonymous) class OverridesKt$box$37
+ inner (anonymous) class OverridesKt$box$38
+ inner (anonymous) class OverridesKt$box$39
+ inner (anonymous) class OverridesKt$box$4
+ inner (anonymous) class OverridesKt$box$40
+ inner (anonymous) class OverridesKt$box$41
+ inner (anonymous) class OverridesKt$box$42
+ inner (anonymous) class OverridesKt$box$43
+ inner (anonymous) class OverridesKt$box$44
+ inner (anonymous) class OverridesKt$box$45
+ inner (anonymous) class OverridesKt$box$46
+ inner (anonymous) class OverridesKt$box$47
+ inner (anonymous) class OverridesKt$box$48
+ inner (anonymous) class OverridesKt$box$49
+ inner (anonymous) class OverridesKt$box$5
+ inner (anonymous) class OverridesKt$box$50
+ inner (anonymous) class OverridesKt$box$51
+ inner (anonymous) class OverridesKt$box$52
+ inner (anonymous) class OverridesKt$box$53
+ inner (anonymous) class OverridesKt$box$54
+ inner (anonymous) class OverridesKt$box$55
+ inner (anonymous) class OverridesKt$box$56
+ inner (anonymous) class OverridesKt$box$57
+ inner (anonymous) class OverridesKt$box$58
+ inner (anonymous) class OverridesKt$box$59
+ inner (anonymous) class OverridesKt$box$6
+ inner (anonymous) class OverridesKt$box$60
+ inner (anonymous) class OverridesKt$box$61
+ inner (anonymous) class OverridesKt$box$62
+ inner (anonymous) class OverridesKt$box$63
+ inner (anonymous) class OverridesKt$box$64
+ inner (anonymous) class OverridesKt$box$65
+ inner (anonymous) class OverridesKt$box$66
+ inner (anonymous) class OverridesKt$box$67
+ inner (anonymous) class OverridesKt$box$68
+ inner (anonymous) class OverridesKt$box$69
+ inner (anonymous) class OverridesKt$box$7
+ inner (anonymous) class OverridesKt$box$70
+ inner (anonymous) class OverridesKt$box$71
+ inner (anonymous) class OverridesKt$box$72
+ inner (anonymous) class OverridesKt$box$73
+ inner (anonymous) class OverridesKt$box$74
+ inner (anonymous) class OverridesKt$box$75
+ inner (anonymous) class OverridesKt$box$76
+ inner (anonymous) class OverridesKt$box$77
+ inner (anonymous) class OverridesKt$box$78
+ inner (anonymous) class OverridesKt$box$79
+ inner (anonymous) class OverridesKt$box$8
+ inner (anonymous) class OverridesKt$box$80
+ inner (anonymous) class OverridesKt$box$81
+ inner (anonymous) class OverridesKt$box$82
+ inner (anonymous) class OverridesKt$box$83
+ inner (anonymous) class OverridesKt$box$84
+ inner (anonymous) class OverridesKt$box$85
+ inner (anonymous) class OverridesKt$box$86
+ inner (anonymous) class OverridesKt$box$87
+ inner (anonymous) class OverridesKt$box$88
+ inner (anonymous) class OverridesKt$box$89
+ inner (anonymous) class OverridesKt$box$9
+ inner (anonymous) class OverridesKt$box$90
+ inner (anonymous) class OverridesKt$box$91
+ inner (anonymous) class OverridesKt$box$92
+ inner (anonymous) class OverridesKt$box$93
+ inner (anonymous) class OverridesKt$box$94
+ inner (anonymous) class OverridesKt$box$95
+ inner (anonymous) class OverridesKt$box$96
+ inner (anonymous) class OverridesKt$box$97
+ inner (anonymous) class OverridesKt$box$98
+ inner (anonymous) class OverridesKt$box$99
+ inner (anonymous) class OverridesKt$box$dPointLam$1
+ inner (anonymous) class OverridesKt$box$emptyLam$1
+ inner (anonymous) class OverridesKt$box$lam1$1
+ inner (anonymous) class OverridesKt$box$lam10$1
+ inner (anonymous) class OverridesKt$box$lam11$1
+ inner (anonymous) class OverridesKt$box$lam12$1
+ inner (anonymous) class OverridesKt$box$lam13$1
+ inner (anonymous) class OverridesKt$box$lam14$1
+ inner (anonymous) class OverridesKt$box$lam15$1
+ inner (anonymous) class OverridesKt$box$lam16$1
+ inner (anonymous) class OverridesKt$box$lam17$1
+ inner (anonymous) class OverridesKt$box$lam18$1
+ inner (anonymous) class OverridesKt$box$lam19$1
+ inner (anonymous) class OverridesKt$box$lam2$1
+ inner (anonymous) class OverridesKt$box$lam20$1
+ inner (anonymous) class OverridesKt$box$lam3$1
+ inner (anonymous) class OverridesKt$box$lam4$1
+ inner (anonymous) class OverridesKt$box$lam5$1
+ inner (anonymous) class OverridesKt$box$lam6$1
+ inner (anonymous) class OverridesKt$box$lam7$1
+ inner (anonymous) class OverridesKt$box$lam8$1
+ inner (anonymous) class OverridesKt$box$lam9$1
+ inner (anonymous) class OverridesKt$box$otherDPointLam$1
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method equal(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function0): void
+}
+
+@kotlin.Metadata
+public final class RealOverride {
+ // source: 'overrides.kt'
+ private field p-0: double
+ private field p-1: double
+ public method <init>(p0: double, p1: double): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public synthetic method getP-0(): double
+ public synthetic method getP-1(): double
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public synthetic method getP1-0(): double
+ public synthetic method getP1-1(): double
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class ReifiedFakeOverride {
+ // source: 'overrides.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class ReifiedFakeOverrideMFVC {
+ // source: 'overrides.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): ReifiedFakeOverrideMFVC
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolder {
+ // source: 'overrides.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class ReifiedMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): DPoint
+ public synthetic static method getP-0(p0: ReifiedMFVCHolderWithImpls): double
+ public synthetic static method getP-1(p0: ReifiedMFVCHolderWithImpls): double
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): DPoint
+ public synthetic static method getP1-0(p0: ReifiedMFVCHolderWithImpls): double
+ public synthetic static method getP1-1(p0: ReifiedMFVCHolderWithImpls): double
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: double, p2: double): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: double, p2: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolderWithImpls {
+ // source: 'overrides.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface SomePointInterface {
+ // source: 'overrides.kt'
+ public abstract method getSomethingGeneric(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public synthetic abstract method getSomethingMFVC-0(): double
+ public synthetic abstract method getSomethingMFVC-1(): double
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric(p0: java.lang.Object): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingRegular(p0: int): void
+}
+
+@kotlin.Metadata
+public interface SomePointInterfaceWithMFVCBound {
+ // source: 'overrides.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingGeneric(): DPoint
+ public synthetic abstract method getSomethingGeneric-0(): double
+ public synthetic abstract method getSomethingGeneric-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public synthetic abstract method getSomethingMFVC-0(): double
+ public synthetic abstract method getSomethingMFVC-1(): double
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingRegular(p0: int): void
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.kt b/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.kt
new file mode 100644
index 0000000..90c7396
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.kt
@@ -0,0 +1,317 @@
+// IGNORE_BACKEND_FIR: JVM_IR
+// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+// CHECK_BYTECODE_LISTING
+
+interface AbstractPoint<T> {
+ val x: T
+ val y: T
+}
+
+@JvmInline
+value class MyDouble(val value: Double)
+
+val Double.my
+ get() = MyDouble(this)
+
+@JvmInline
+value class DPoint(override val x: MyDouble, override val y: MyDouble): AbstractPoint<MyDouble>
+
+interface GenericMFVCHolder<T> {
+ var p: T
+ var p1: T
+}
+
+interface GenericMFVCHolderWithMFVCUpperBound<T : DPoint> {
+ var p: T
+ var p1: T
+}
+
+interface ReifiedMFVCHolder {
+ var p: DPoint
+ var p1: DPoint
+}
+
+data class DataClassException(val value: Any?): Exception()
+
+interface GenericMFVCHolderWithImpls<T> {
+ var p: T
+ get() = throw DataClassException(1)
+ set(value) = throw DataClassException(2 to value)
+
+ var p1: T
+ get() = throw DataClassException(3)
+ set(value) = throw DataClassException(4 to value)
+}
+
+interface GenericMFVCHolderWithMFVCUpperBoundWithImpls<T : DPoint> {
+ var p: T
+ get() = throw DataClassException(5)
+ set(value) = throw DataClassException(6 to value)
+
+ var p1: T
+ get() = throw DataClassException(7)
+ set(value) = throw DataClassException(8 to value)
+}
+
+interface ReifiedMFVCHolderWithImpls {
+ var p: DPoint
+ get() = throw DataClassException(9)
+ set(value) = throw DataClassException(10 to value)
+
+ var p1: DPoint
+ get() = throw DataClassException(11)
+ set(value) = throw DataClassException(12 to value)
+}
+
+class RealOverride(override var p: DPoint) : GenericMFVCHolder<DPoint>, ReifiedMFVCHolder, GenericMFVCHolderWithMFVCUpperBound<DPoint> {
+ override var p1: DPoint
+ get() = throw DataClassException(13)
+ set(value) = throw DataClassException(14 to value)
+}
+
+class GenericFakeOverride : GenericMFVCHolderWithImpls<DPoint>
+class ReifiedFakeOverride : ReifiedMFVCHolderWithImpls
+class GenericFakeOverrideWithMFVCUpperBound : GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>
+
+
+@JvmInline
+value class GenericFakeOverrideMFVC(val field1: MyDouble, val field2: MyDouble) : GenericMFVCHolderWithImpls<DPoint>
+@JvmInline
+value class ReifiedFakeOverrideMFVC(val field1: MyDouble, val field2: MyDouble) : ReifiedMFVCHolderWithImpls
+@JvmInline
+value class GenericFakeOverrideMFVCWithMFVCUpperBound(val field1: MyDouble, val field2: MyDouble) : GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>
+
+
+interface SomePointInterface<T> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: DPoint
+}
+
+interface SomePointInterfaceWithMFVCBound<T : DPoint> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: DPoint
+}
+
+@JvmInline
+value class DPointWithInterface(val x: MyDouble, val y: MyDouble) : SomePointInterface<DPoint>, SomePointInterfaceWithMFVCBound<DPoint> {
+ override var somethingGeneric: DPoint
+ get() = throw DataClassException(15)
+ set(value) = throw DataClassException(16 to value)
+
+ override var somethingMFVC: DPoint
+ get() = throw DataClassException(17)
+ set(value) = throw DataClassException(18 to value)
+
+ override var somethingRegular: Int
+ get() = throw DataClassException(19)
+ set(value) = throw DataClassException(20 to value)
+}
+
+
+interface AbstractSegment<T> {
+ val p1: T
+ val p2: T
+}
+
+@JvmInline
+value class DSegment(override val p1: DPoint, override val p2: DPoint): AbstractSegment<DPoint>
+
+fun <T> equal(expected: () -> T, actual: () -> T) {
+ val expectedResult = runCatching { expected() }
+ val actualResult = runCatching { actual() }
+ require(expectedResult == actualResult) { "Expected: $expectedResult\nActual: $actualResult" }
+}
+
+fun box(): String {
+ val dPoint = DPoint(1.0.my, 2.0.my)
+
+ val lam1: () -> DPoint = { throw DataClassException(1) }
+ val lam2: () -> Unit = { throw DataClassException(2 to dPoint) }
+ val lam3: () -> DPoint = { throw DataClassException(3) }
+ val lam4: () -> Unit = { throw DataClassException(4 to dPoint) }
+ val lam5: () -> DPoint = { throw DataClassException(5) }
+ val lam6: () -> Unit = { throw DataClassException(6 to dPoint) }
+ val lam7: () -> DPoint = { throw DataClassException(7) }
+ val lam8: () -> Unit = { throw DataClassException(8 to dPoint) }
+ val lam9: () -> DPoint = { throw DataClassException(9) }
+ val lam10: () -> Unit = { throw DataClassException(10 to dPoint) }
+ val lam11: () -> DPoint = { throw DataClassException(11) }
+ val lam12: () -> Unit = { throw DataClassException(12 to dPoint) }
+ val lam13: () -> DPoint = { throw DataClassException(13) }
+ val lam14: () -> Unit = { throw DataClassException(14 to dPoint) }
+ val lam15: () -> DPoint = { throw DataClassException(15) }
+ val lam16: () -> Unit = { throw DataClassException(16 to dPoint) }
+ val lam17: () -> DPoint = { throw DataClassException(17) }
+ val lam18: () -> Unit = { throw DataClassException(18 to dPoint) }
+ val lam19: () -> Int = { throw DataClassException(19) }
+ val lam20: () -> Unit = { throw DataClassException(20 to 1) }
+ val emptyLam = {}
+ val dPointLam = { dPoint }
+ val otherDPoint = DPoint(3.0.my, 4.0.my)
+ val otherDPointLam = { otherDPoint }
+ equal({ "DPoint(x=MyDouble(value=1.0), y=MyDouble(value=2.0))" }, { dPoint.toString() })
+ equal({ "DPoint(x=MyDouble(value=1.0), y=MyDouble(value=2.0))" }, { (dPoint as Any).toString() })
+
+ equal({ true }, { dPoint.equals(dPoint) })
+ equal({ true }, { dPoint.equals(dPoint as Any) })
+ equal({ true }, { (dPoint as Any).equals(dPoint) })
+ equal({ true }, { (dPoint as Any).equals(dPoint as Any) })
+
+ equal({ false }, { dPoint.equals(otherDPoint) })
+ equal({ false }, { dPoint.equals(otherDPoint as Any) })
+ equal({ false }, { (dPoint as Any).equals(otherDPoint) })
+ equal({ false }, { (dPoint as Any).equals(otherDPoint as Any) })
+
+ equal({ dPoint.hashCode() }, { (dPoint as Any).hashCode() })
+
+ equal({ 1.0.my }, { dPoint.x })
+ equal({ 1.0.my }, { (dPoint as AbstractPoint<Double>).x })
+ equal({ 2.0.my }, { dPoint.y })
+ equal({ 2.0.my }, { (dPoint as AbstractPoint<Double>).y })
+
+
+ val realOverride = RealOverride(dPoint)
+
+ equal(dPointLam, { realOverride.p })
+ equal(dPointLam, { (realOverride as GenericMFVCHolder<DPoint>).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as GenericMFVCHolder<DPoint>).p1 })
+ equal(dPointLam, { (realOverride as ReifiedMFVCHolder).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as ReifiedMFVCHolder).p1 })
+ equal(dPointLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p })
+ equal(lam13, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p1 })
+
+
+ equal(emptyLam, { realOverride.p = dPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolder<DPoint>).p = dPoint })
+ equal(lam14, { realOverride.p1 = dPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolder<DPoint>).p1 = dPoint })
+ equal(emptyLam, { (realOverride as ReifiedMFVCHolder).p = dPoint })
+ equal(lam14, { (realOverride as ReifiedMFVCHolder).p1 = dPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p = dPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<DPoint>).p1 = dPoint })
+
+
+ val genericFakeOverride = GenericFakeOverride()
+
+ equal(lam1, { genericFakeOverride.p })
+ equal(lam1, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p })
+ equal(lam3, { genericFakeOverride.p1 })
+ equal(lam3, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p1 })
+ val reifiedFakeOverride = ReifiedFakeOverride()
+ equal(lam9, { reifiedFakeOverride.p })
+ equal(lam9, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p })
+ equal(lam11, { reifiedFakeOverride.p1 })
+ equal(lam11, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p1 })
+ val genericFakeOverrideWithMFVCUpperBound = GenericFakeOverrideWithMFVCUpperBound()
+ equal(lam5, { genericFakeOverrideWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p })
+ equal(lam7, { genericFakeOverrideWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 })
+
+ equal(lam2, { genericFakeOverride.p = dPoint })
+ equal(lam2, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p = dPoint })
+ equal(lam4, { genericFakeOverride.p1 = dPoint })
+ equal(lam4, { (genericFakeOverride as GenericMFVCHolderWithImpls<DPoint>).p1 = dPoint })
+ equal(lam10, { reifiedFakeOverride.p = dPoint })
+ equal(lam10, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p = dPoint })
+ equal(lam12, { reifiedFakeOverride.p1 = dPoint })
+ equal(lam12, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls).p1 = dPoint })
+ equal(lam6, { genericFakeOverrideWithMFVCUpperBound.p = dPoint })
+ equal(lam6, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p = dPoint })
+ equal(lam8, { genericFakeOverrideWithMFVCUpperBound.p1 = dPoint })
+ equal(lam8, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 = dPoint })
+
+
+ val genericFakeOverrideMFVC = GenericFakeOverrideMFVC(1.0.my, 2.0.my)
+
+ equal(lam1, { genericFakeOverrideMFVC.p })
+ equal(lam1, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p })
+ equal(lam3, { genericFakeOverrideMFVC.p1 })
+ equal(lam3, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p1 })
+
+ val reifiedFakeOverrideMFVC = ReifiedFakeOverrideMFVC(1.0.my, 2.0.my)
+ equal(lam9, { reifiedFakeOverrideMFVC.p })
+ equal(lam9, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p })
+ equal(lam11, { reifiedFakeOverrideMFVC.p1 })
+ equal(lam11, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p1 })
+
+ val genericFakeOverrideMFVCWithMFVCUpperBound = GenericFakeOverrideMFVCWithMFVCUpperBound(1.0.my, 2.0.my)
+ equal(lam5, { genericFakeOverrideMFVCWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p })
+ equal(lam7, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 })
+
+ equal(lam2, { genericFakeOverrideMFVC.p = dPoint })
+ equal(lam2, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p = dPoint })
+ equal(lam4, { genericFakeOverrideMFVC.p1 = dPoint })
+ equal(lam4, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<DPoint>).p1 = dPoint })
+
+ equal(lam10, { reifiedFakeOverrideMFVC.p = dPoint })
+ equal(lam10, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p = dPoint })
+ equal(lam12, { reifiedFakeOverrideMFVC.p1 = dPoint })
+ equal(lam12, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls).p1 = dPoint })
+
+ equal(lam6, { genericFakeOverrideMFVCWithMFVCUpperBound.p = dPoint })
+ equal(lam6, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p = dPoint })
+ equal(lam8, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 = dPoint })
+ equal(lam8, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<DPoint>).p1 = dPoint })
+
+
+ val dPointWithInterface = DPointWithInterface(1.0.my, 2.0.my)
+
+ equal(lam15, { dPointWithInterface.somethingGeneric })
+ equal(lam15, { (dPointWithInterface as SomePointInterface<DPoint>).somethingGeneric })
+ equal(lam19, { dPointWithInterface.somethingRegular })
+ equal(lam19, { (dPointWithInterface as SomePointInterface<DPoint>).somethingRegular })
+ equal(lam17, { dPointWithInterface.somethingMFVC })
+ equal(lam17, { (dPointWithInterface as SomePointInterface<DPoint>).somethingMFVC })
+
+ equal(lam15, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingGeneric })
+ equal(lam19, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingRegular })
+ equal(lam17, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingMFVC })
+
+ equal(lam16, { dPointWithInterface.somethingGeneric = dPoint })
+ equal(lam16, { (dPointWithInterface as SomePointInterface<DPoint>).somethingGeneric = dPoint })
+ equal(lam20, { dPointWithInterface.somethingRegular = 1 })
+ equal(lam20, { (dPointWithInterface as SomePointInterface<DPoint>).somethingRegular = 1 })
+ equal(lam18, { dPointWithInterface.somethingMFVC = dPoint })
+ equal(lam18, { (dPointWithInterface as SomePointInterface<DPoint>).somethingMFVC = dPoint })
+
+ equal(lam16, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingGeneric = dPoint })
+ equal(lam20, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingRegular = 1 })
+ equal(lam18, { (dPointWithInterface as SomePointInterfaceWithMFVCBound<DPoint>).somethingMFVC = dPoint })
+
+
+ val dSegment = DSegment(dPoint, otherDPoint)
+
+ equal(dPointLam, { dSegment.p1 })
+ equal(otherDPointLam, { dSegment.p2 })
+ equal({ 1.0.my }, { dPoint.x })
+ equal({ 1.0.my }, { dSegment.p1.x })
+ equal({ 3.0.my }, { otherDPoint.x })
+ equal({ 3.0.my }, { dSegment.p2.x })
+ equal({ 2.0.my }, { dPoint.y })
+ equal({ 2.0.my }, { dSegment.p1.y })
+ equal({ 4.0.my }, { otherDPoint.y })
+ equal({ 4.0.my }, { dSegment.p2.y })
+ equal(dPointLam, { (dSegment as AbstractSegment<DPoint>).p1 })
+ equal(otherDPointLam, { (dSegment as AbstractSegment<DPoint>).p2 })
+ equal({ 1.0.my }, { (dSegment as AbstractSegment<DPoint>).p1.x })
+ equal({ 3.0.my }, { (dSegment as AbstractSegment<DPoint>).p2.x })
+ equal({ 2.0.my }, { (dSegment as AbstractSegment<DPoint>).p1.y })
+ equal({ 4.0.my }, { (dSegment as AbstractSegment<DPoint>).p2.y })
+
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.txt b/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.txt
new file mode 100644
index 0000000..697dc29
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides_inlineClass.txt
@@ -0,0 +1,2603 @@
+@kotlin.Metadata
+public interface AbstractPoint {
+ // source: 'overrides_inlineClass.kt'
+ public abstract method getX(): java.lang.Object
+ public abstract method getY(): java.lang.Object
+}
+
+@kotlin.Metadata
+public interface AbstractSegment {
+ // source: 'overrides_inlineClass.kt'
+ public abstract method getP1(): java.lang.Object
+ public abstract method getP2(): java.lang.Object
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public synthetic bridge method getX(): java.lang.Object
+ public method getX-3cLST_U(): double
+ public synthetic bridge method getY(): java.lang.Object
+ public method getY-3cLST_U(): double
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPointWithInterface {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPointWithInterface
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getSomethingGeneric(): DPoint
+ public synthetic bridge method getSomethingGeneric(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getSomethingGeneric-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getSomethingMFVC-impl(p0: double, p1: double): DPoint
+ public method getSomethingRegular(): int
+ public static method getSomethingRegular-impl(p0: double, p1: double): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public synthetic bridge method setSomethingGeneric(p0: java.lang.Object): void
+ public method setSomethingGeneric-sUp7gFk(p0: double, p1: double): void
+ public static method setSomethingGeneric-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public static method setSomethingMFVC-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setSomethingRegular(p0: int): void
+ public static method setSomethingRegular-impl(p0: double, p1: double, p2: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DSegment {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0-0: double
+ private final field field-0-1: double
+ private final field field-1-0: double
+ private final field field-1-1: double
+ private synthetic method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic final static method box-impl(p0: double, p1: double, p2: double, p3: double): DSegment
+ public final static method constructor-impl(p0: double, p1: double, p2: double, p3: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: double, p3: double, p4: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double, p4: double, p5: double, p6: double, p7: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP2(): DPoint
+ public synthetic bridge method getP2(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double, p2: double, p3: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double, p2: double, p3: double): java.lang.String
+ public synthetic final method unbox-impl-0(): DPoint
+ public synthetic final method unbox-impl-0-0(): double
+ public synthetic final method unbox-impl-0-1(): double
+ public synthetic final method unbox-impl-1(): DPoint
+ public synthetic final method unbox-impl-1-0(): double
+ public synthetic final method unbox-impl-1-1(): double
+}
+
+@kotlin.Metadata
+public final class DataClassException {
+ // source: 'overrides_inlineClass.kt'
+ private final @org.jetbrains.annotations.Nullable field value: java.lang.Object
+ public method <init>(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.Nullable method component1(): java.lang.Object
+ public synthetic static method copy$default(p0: DataClassException, p1: java.lang.Object, p2: int, p3: java.lang.Object): DataClassException
+ public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.Nullable p0: java.lang.Object): DataClassException
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public final @org.jetbrains.annotations.Nullable method getValue(): java.lang.Object
+ public method hashCode(): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverride {
+ // source: 'overrides_inlineClass.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public method setP(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP1(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVC {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): GenericFakeOverrideMFVC
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: DPoint): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVCWithMFVCUpperBound {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): GenericFakeOverrideMFVCWithMFVCUpperBound
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverrideWithMFVCUpperBound {
+ // source: 'overrides_inlineClass.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolder {
+ // source: 'overrides_inlineClass.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides_inlineClass.kt'
+ public static method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method setP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public static method setP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithImpls {
+ // source: 'overrides_inlineClass.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBound {
+ // source: 'overrides_inlineClass.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls {
+ // source: 'overrides_inlineClass.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): DPoint
+ public synthetic static method getP-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public synthetic static method getP-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): DPoint
+ public synthetic static method getP1-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public synthetic static method getP1-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): double
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: double, p2: double): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: double, p2: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBoundWithImpls {
+ // source: 'overrides_inlineClass.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class MyDouble {
+ // source: 'overrides_inlineClass.kt'
+ private final field value: double
+ private synthetic method <init>(p0: double): void
+ public synthetic final static method box-impl(p0: double): MyDouble
+ public static method constructor-impl(p0: double): double
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double): boolean
+ public final method getValue(): double
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: double): java.lang.String
+ public synthetic final method unbox-impl(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$1
+ inner (anonymous) class Overrides_inlineClassKt$box$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$10 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$10
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$100 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$100
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$101 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$101
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$102 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$102
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$103 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$103
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$104 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$104
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$105 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$105
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$106 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$106
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$107 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$107
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$108 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$108
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$109 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$109
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$11 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$11
+ inner (anonymous) class Overrides_inlineClassKt$box$11
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$110 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$110
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$111 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$111
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$112 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$112
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$113 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$113
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$114 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$114
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$115 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$115
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$116 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$116
+ inner (anonymous) class Overrides_inlineClassKt$box$116
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$117 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ inner (anonymous) class Overrides_inlineClassKt$box$117
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$118 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$118
+ inner (anonymous) class Overrides_inlineClassKt$box$118
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$119 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ inner (anonymous) class Overrides_inlineClassKt$box$119
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$12 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$12
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$120 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$120
+ inner (anonymous) class Overrides_inlineClassKt$box$120
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$121 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-0: double
+ inner (anonymous) class Overrides_inlineClassKt$box$121
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$122 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$122
+ inner (anonymous) class Overrides_inlineClassKt$box$122
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$123 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-0: double
+ inner (anonymous) class Overrides_inlineClassKt$box$123
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$124 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$124
+ inner (anonymous) class Overrides_inlineClassKt$box$124
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$125 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$125
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$126 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$126
+ inner (anonymous) class Overrides_inlineClassKt$box$126
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$127 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$127
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$128 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$128
+ inner (anonymous) class Overrides_inlineClassKt$box$128
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$129 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$129
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$13 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$13
+ inner (anonymous) class Overrides_inlineClassKt$box$13
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$130 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$130
+ inner (anonymous) class Overrides_inlineClassKt$box$130
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$131 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$131
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$132 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$132
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$133 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$133
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$134 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$134
+ inner (anonymous) class Overrides_inlineClassKt$box$134
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$135 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$135
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$136 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$136
+ inner (anonymous) class Overrides_inlineClassKt$box$136
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$137 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$137
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$138 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$138
+ inner (anonymous) class Overrides_inlineClassKt$box$138
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$139 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$139
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$14 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$14
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$140 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$140
+ inner (anonymous) class Overrides_inlineClassKt$box$140
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$141 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dSegment-field-0-0: double
+ synthetic final field $dSegment-field-0-1: double
+ synthetic final field $dSegment-field-1-0: double
+ synthetic final field $dSegment-field-1-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$141
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$15 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$15
+ inner (anonymous) class Overrides_inlineClassKt$box$15
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$16 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$16
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$17 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$17
+ inner (anonymous) class Overrides_inlineClassKt$box$17
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$18 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$18
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$19 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$19
+ inner (anonymous) class Overrides_inlineClassKt$box$19
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$2 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$2
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$20 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$20
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$21 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$21
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$22 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$22
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$23 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$23
+ inner (anonymous) class Overrides_inlineClassKt$box$23
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$24 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ inner (anonymous) class Overrides_inlineClassKt$box$24
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$25 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$25
+ inner (anonymous) class Overrides_inlineClassKt$box$25
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$26 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$26
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$27 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$27
+ inner (anonymous) class Overrides_inlineClassKt$box$27
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$28 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$28
+ method <init>(p0: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke-3cLST_U(): double
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$29 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$29
+ inner (anonymous) class Overrides_inlineClassKt$box$29
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$3 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$3
+ inner (anonymous) class Overrides_inlineClassKt$box$3
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$30 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$30
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$31 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$31
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$32 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$32
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$33 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$33
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$34 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$34
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$35 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$35
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$36 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$36
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$37 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$37
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$38 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$38
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$39 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$39
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$4 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$4
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$40 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$40
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$41 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$41
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$42 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$42
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$43 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$43
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$44 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$44
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$45 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$45
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$46 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$46
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$47 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$47
+ method <init>(p0: RealOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$48 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$48
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$49 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$49
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$5 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$5
+ inner (anonymous) class Overrides_inlineClassKt$box$5
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$50 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$50
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$51 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$51
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$52 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$52
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$53 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$53
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$54 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$54
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$55 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$55
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$56 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$56
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$57 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$57
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$58 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$58
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$59 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$59
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$6 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$6
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$60 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$60
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$61 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$61
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$62 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$62
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$63 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$63
+ method <init>(p0: GenericFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$64 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$64
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$65 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$65
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$66 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$66
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$67 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_inlineClassKt$box$67
+ method <init>(p0: ReifiedFakeOverride, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$68 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$68
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$69 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$69
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$7 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$7
+ inner (anonymous) class Overrides_inlineClassKt$box$7
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$70 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$70
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$71 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_inlineClassKt$box$71
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: double, p2: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$72 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$72
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$73 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$73
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$74 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$74
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$75 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$75
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$76 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$76
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$77 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$77
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$78 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$78
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$79 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$79
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$8 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$8
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$80 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$80
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$81 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$81
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$82 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$82
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$83 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$83
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$84 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$84
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$85 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$85
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$86 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$86
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$87 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVC-field-0: double
+ synthetic final field $genericFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$87
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$88 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$88
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$89 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$89
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$9 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$9
+ inner (anonymous) class Overrides_inlineClassKt$box$9
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$90 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$90
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$91 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: double
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$91
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$92 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$92
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$93 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$93
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$94 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$94
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$95 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: double
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$95
+ method <init>(p0: double, p1: double, p2: double, p3: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$96 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$96
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$97 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$97
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$98 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$98
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$99 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPointWithInterface-field-0: double
+ synthetic final field $dPointWithInterface-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$99
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$dPointLam$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$dPointLam$1
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$emptyLam$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$emptyLam$1
+ inner (anonymous) class Overrides_inlineClassKt$box$emptyLam$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam1$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam1$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam1$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam10$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam10$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam11$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam11$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam11$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam12$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam12$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam13$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam13$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam13$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam14$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam14$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam15$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam15$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam15$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam16$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam16$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam17$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam17$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam17$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam18$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam18$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam19$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam19$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam19$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam2$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam2$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam20$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam20$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam20$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam3$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam3$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam3$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam4$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam4$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam5$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam5$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam5$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam6$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam6$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam7$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam7$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam7$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam8$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $dPoint-field-0: double
+ synthetic final field $dPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$lam8$1
+ method <init>(p0: double, p1: double): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$lam9$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_inlineClassKt$box$lam9$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam9$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_inlineClassKt$box$otherDPointLam$1 {
+ // source: 'overrides_inlineClass.kt'
+ enclosing method Overrides_inlineClassKt.box()Ljava/lang/String;
+ synthetic final field $otherDPoint-field-0: double
+ synthetic final field $otherDPoint-field-1: double
+ inner (anonymous) class Overrides_inlineClassKt$box$otherDPointLam$1
+ method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): DPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+public final class Overrides_inlineClassKt {
+ // source: 'overrides_inlineClass.kt'
+ inner (anonymous) class Overrides_inlineClassKt$box$1
+ inner (anonymous) class Overrides_inlineClassKt$box$10
+ inner (anonymous) class Overrides_inlineClassKt$box$100
+ inner (anonymous) class Overrides_inlineClassKt$box$101
+ inner (anonymous) class Overrides_inlineClassKt$box$102
+ inner (anonymous) class Overrides_inlineClassKt$box$103
+ inner (anonymous) class Overrides_inlineClassKt$box$104
+ inner (anonymous) class Overrides_inlineClassKt$box$105
+ inner (anonymous) class Overrides_inlineClassKt$box$106
+ inner (anonymous) class Overrides_inlineClassKt$box$107
+ inner (anonymous) class Overrides_inlineClassKt$box$108
+ inner (anonymous) class Overrides_inlineClassKt$box$109
+ inner (anonymous) class Overrides_inlineClassKt$box$11
+ inner (anonymous) class Overrides_inlineClassKt$box$110
+ inner (anonymous) class Overrides_inlineClassKt$box$111
+ inner (anonymous) class Overrides_inlineClassKt$box$112
+ inner (anonymous) class Overrides_inlineClassKt$box$113
+ inner (anonymous) class Overrides_inlineClassKt$box$114
+ inner (anonymous) class Overrides_inlineClassKt$box$115
+ inner (anonymous) class Overrides_inlineClassKt$box$116
+ inner (anonymous) class Overrides_inlineClassKt$box$117
+ inner (anonymous) class Overrides_inlineClassKt$box$118
+ inner (anonymous) class Overrides_inlineClassKt$box$119
+ inner (anonymous) class Overrides_inlineClassKt$box$12
+ inner (anonymous) class Overrides_inlineClassKt$box$120
+ inner (anonymous) class Overrides_inlineClassKt$box$121
+ inner (anonymous) class Overrides_inlineClassKt$box$122
+ inner (anonymous) class Overrides_inlineClassKt$box$123
+ inner (anonymous) class Overrides_inlineClassKt$box$124
+ inner (anonymous) class Overrides_inlineClassKt$box$125
+ inner (anonymous) class Overrides_inlineClassKt$box$126
+ inner (anonymous) class Overrides_inlineClassKt$box$127
+ inner (anonymous) class Overrides_inlineClassKt$box$128
+ inner (anonymous) class Overrides_inlineClassKt$box$129
+ inner (anonymous) class Overrides_inlineClassKt$box$13
+ inner (anonymous) class Overrides_inlineClassKt$box$130
+ inner (anonymous) class Overrides_inlineClassKt$box$131
+ inner (anonymous) class Overrides_inlineClassKt$box$132
+ inner (anonymous) class Overrides_inlineClassKt$box$133
+ inner (anonymous) class Overrides_inlineClassKt$box$134
+ inner (anonymous) class Overrides_inlineClassKt$box$135
+ inner (anonymous) class Overrides_inlineClassKt$box$136
+ inner (anonymous) class Overrides_inlineClassKt$box$137
+ inner (anonymous) class Overrides_inlineClassKt$box$138
+ inner (anonymous) class Overrides_inlineClassKt$box$139
+ inner (anonymous) class Overrides_inlineClassKt$box$14
+ inner (anonymous) class Overrides_inlineClassKt$box$140
+ inner (anonymous) class Overrides_inlineClassKt$box$141
+ inner (anonymous) class Overrides_inlineClassKt$box$15
+ inner (anonymous) class Overrides_inlineClassKt$box$16
+ inner (anonymous) class Overrides_inlineClassKt$box$17
+ inner (anonymous) class Overrides_inlineClassKt$box$18
+ inner (anonymous) class Overrides_inlineClassKt$box$19
+ inner (anonymous) class Overrides_inlineClassKt$box$2
+ inner (anonymous) class Overrides_inlineClassKt$box$20
+ inner (anonymous) class Overrides_inlineClassKt$box$21
+ inner (anonymous) class Overrides_inlineClassKt$box$22
+ inner (anonymous) class Overrides_inlineClassKt$box$23
+ inner (anonymous) class Overrides_inlineClassKt$box$24
+ inner (anonymous) class Overrides_inlineClassKt$box$25
+ inner (anonymous) class Overrides_inlineClassKt$box$26
+ inner (anonymous) class Overrides_inlineClassKt$box$27
+ inner (anonymous) class Overrides_inlineClassKt$box$28
+ inner (anonymous) class Overrides_inlineClassKt$box$29
+ inner (anonymous) class Overrides_inlineClassKt$box$3
+ inner (anonymous) class Overrides_inlineClassKt$box$30
+ inner (anonymous) class Overrides_inlineClassKt$box$31
+ inner (anonymous) class Overrides_inlineClassKt$box$32
+ inner (anonymous) class Overrides_inlineClassKt$box$33
+ inner (anonymous) class Overrides_inlineClassKt$box$34
+ inner (anonymous) class Overrides_inlineClassKt$box$35
+ inner (anonymous) class Overrides_inlineClassKt$box$36
+ inner (anonymous) class Overrides_inlineClassKt$box$37
+ inner (anonymous) class Overrides_inlineClassKt$box$38
+ inner (anonymous) class Overrides_inlineClassKt$box$39
+ inner (anonymous) class Overrides_inlineClassKt$box$4
+ inner (anonymous) class Overrides_inlineClassKt$box$40
+ inner (anonymous) class Overrides_inlineClassKt$box$41
+ inner (anonymous) class Overrides_inlineClassKt$box$42
+ inner (anonymous) class Overrides_inlineClassKt$box$43
+ inner (anonymous) class Overrides_inlineClassKt$box$44
+ inner (anonymous) class Overrides_inlineClassKt$box$45
+ inner (anonymous) class Overrides_inlineClassKt$box$46
+ inner (anonymous) class Overrides_inlineClassKt$box$47
+ inner (anonymous) class Overrides_inlineClassKt$box$48
+ inner (anonymous) class Overrides_inlineClassKt$box$49
+ inner (anonymous) class Overrides_inlineClassKt$box$5
+ inner (anonymous) class Overrides_inlineClassKt$box$50
+ inner (anonymous) class Overrides_inlineClassKt$box$51
+ inner (anonymous) class Overrides_inlineClassKt$box$52
+ inner (anonymous) class Overrides_inlineClassKt$box$53
+ inner (anonymous) class Overrides_inlineClassKt$box$54
+ inner (anonymous) class Overrides_inlineClassKt$box$55
+ inner (anonymous) class Overrides_inlineClassKt$box$56
+ inner (anonymous) class Overrides_inlineClassKt$box$57
+ inner (anonymous) class Overrides_inlineClassKt$box$58
+ inner (anonymous) class Overrides_inlineClassKt$box$59
+ inner (anonymous) class Overrides_inlineClassKt$box$6
+ inner (anonymous) class Overrides_inlineClassKt$box$60
+ inner (anonymous) class Overrides_inlineClassKt$box$61
+ inner (anonymous) class Overrides_inlineClassKt$box$62
+ inner (anonymous) class Overrides_inlineClassKt$box$63
+ inner (anonymous) class Overrides_inlineClassKt$box$64
+ inner (anonymous) class Overrides_inlineClassKt$box$65
+ inner (anonymous) class Overrides_inlineClassKt$box$66
+ inner (anonymous) class Overrides_inlineClassKt$box$67
+ inner (anonymous) class Overrides_inlineClassKt$box$68
+ inner (anonymous) class Overrides_inlineClassKt$box$69
+ inner (anonymous) class Overrides_inlineClassKt$box$7
+ inner (anonymous) class Overrides_inlineClassKt$box$70
+ inner (anonymous) class Overrides_inlineClassKt$box$71
+ inner (anonymous) class Overrides_inlineClassKt$box$72
+ inner (anonymous) class Overrides_inlineClassKt$box$73
+ inner (anonymous) class Overrides_inlineClassKt$box$74
+ inner (anonymous) class Overrides_inlineClassKt$box$75
+ inner (anonymous) class Overrides_inlineClassKt$box$76
+ inner (anonymous) class Overrides_inlineClassKt$box$77
+ inner (anonymous) class Overrides_inlineClassKt$box$78
+ inner (anonymous) class Overrides_inlineClassKt$box$79
+ inner (anonymous) class Overrides_inlineClassKt$box$8
+ inner (anonymous) class Overrides_inlineClassKt$box$80
+ inner (anonymous) class Overrides_inlineClassKt$box$81
+ inner (anonymous) class Overrides_inlineClassKt$box$82
+ inner (anonymous) class Overrides_inlineClassKt$box$83
+ inner (anonymous) class Overrides_inlineClassKt$box$84
+ inner (anonymous) class Overrides_inlineClassKt$box$85
+ inner (anonymous) class Overrides_inlineClassKt$box$86
+ inner (anonymous) class Overrides_inlineClassKt$box$87
+ inner (anonymous) class Overrides_inlineClassKt$box$88
+ inner (anonymous) class Overrides_inlineClassKt$box$89
+ inner (anonymous) class Overrides_inlineClassKt$box$9
+ inner (anonymous) class Overrides_inlineClassKt$box$90
+ inner (anonymous) class Overrides_inlineClassKt$box$91
+ inner (anonymous) class Overrides_inlineClassKt$box$92
+ inner (anonymous) class Overrides_inlineClassKt$box$93
+ inner (anonymous) class Overrides_inlineClassKt$box$94
+ inner (anonymous) class Overrides_inlineClassKt$box$95
+ inner (anonymous) class Overrides_inlineClassKt$box$96
+ inner (anonymous) class Overrides_inlineClassKt$box$97
+ inner (anonymous) class Overrides_inlineClassKt$box$98
+ inner (anonymous) class Overrides_inlineClassKt$box$99
+ inner (anonymous) class Overrides_inlineClassKt$box$dPointLam$1
+ inner (anonymous) class Overrides_inlineClassKt$box$emptyLam$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam1$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam10$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam11$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam12$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam13$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam14$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam15$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam16$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam17$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam18$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam19$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam2$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam20$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam3$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam4$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam5$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam6$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam7$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam8$1
+ inner (anonymous) class Overrides_inlineClassKt$box$lam9$1
+ inner (anonymous) class Overrides_inlineClassKt$box$otherDPointLam$1
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method equal(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function0): void
+ public final static method getMy(p0: double): double
+}
+
+@kotlin.Metadata
+public final class RealOverride {
+ // source: 'overrides_inlineClass.kt'
+ private field p-0: double
+ private field p-1: double
+ private method <init>(p0: double, p1: double): void
+ public synthetic method <init>(p0: double, p1: double, p2: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public synthetic method getP-0(): double
+ public synthetic method getP-1(): double
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public synthetic method getP1-0(): double
+ public synthetic method getP1-1(): double
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class ReifiedFakeOverride {
+ // source: 'overrides_inlineClass.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class ReifiedFakeOverrideMFVC {
+ // source: 'overrides_inlineClass.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): ReifiedFakeOverrideMFVC
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: double, p1: double): DPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: double, p1: double): DPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public method setP-sUp7gFk(p0: double, p1: double): void
+ public static method setP-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public method setP1-sUp7gFk(p0: double, p1: double): void
+ public static method setP1-sUp7gFk(p0: double, p1: double, p2: double, p3: double): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolder {
+ // source: 'overrides_inlineClass.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class ReifiedMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides_inlineClass.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): DPoint
+ public synthetic static method getP-0(p0: ReifiedMFVCHolderWithImpls): double
+ public synthetic static method getP-1(p0: ReifiedMFVCHolderWithImpls): double
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): DPoint
+ public synthetic static method getP1-0(p0: ReifiedMFVCHolderWithImpls): double
+ public synthetic static method getP1-1(p0: ReifiedMFVCHolderWithImpls): double
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: double, p2: double): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: double, p2: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolderWithImpls {
+ // source: 'overrides_inlineClass.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): DPoint
+ public synthetic abstract method getP-0(): double
+ public synthetic abstract method getP-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): DPoint
+ public synthetic abstract method getP1-0(): double
+ public synthetic abstract method getP1-1(): double
+ public abstract method setP-sUp7gFk(p0: double, p1: double): void
+ public abstract method setP1-sUp7gFk(p0: double, p1: double): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface SomePointInterface {
+ // source: 'overrides_inlineClass.kt'
+ public abstract method getSomethingGeneric(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public synthetic abstract method getSomethingMFVC-0(): double
+ public synthetic abstract method getSomethingMFVC-1(): double
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric(p0: java.lang.Object): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingRegular(p0: int): void
+}
+
+@kotlin.Metadata
+public interface SomePointInterfaceWithMFVCBound {
+ // source: 'overrides_inlineClass.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingGeneric(): DPoint
+ public synthetic abstract method getSomethingGeneric-0(): double
+ public synthetic abstract method getSomethingGeneric-1(): double
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): DPoint
+ public synthetic abstract method getSomethingMFVC-0(): double
+ public synthetic abstract method getSomethingMFVC-1(): double
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: double, p1: double): void
+ public abstract method setSomethingRegular(p0: int): void
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.kt b/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.kt
new file mode 100644
index 0000000..ecb515c
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.kt
@@ -0,0 +1,327 @@
+// IGNORE_BACKEND_FIR: JVM_IR
+// https://youtrack.jetbrains.com/issue/KT-52236/Different-modality-in-psi-and-fir
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+// LANGUAGE: +GenericInlineClassParameter
+// CHECK_BYTECODE_LISTING
+
+interface AbstractPoint<T> {
+ val x: T
+ val y: T
+}
+
+interface SomeInterface<X> {
+ fun <T, R: X> someFunction1(x: X, t: T, r: R) = Unit
+ fun <T, R: X> someFunction2(x: XPoint<X>, t: XPoint<T>, r: XPoint<R>) = Unit
+
+}
+
+@JvmInline
+value class XPoint<X>(override val x: X, override val y: X): AbstractPoint<X>, SomeInterface<X> {
+ override fun <T, R: X> someFunction1(x: X, t: T, r: R) = Unit
+ override fun <T, R: X> someFunction2(x: XPoint<X>, t: XPoint<T>, r: XPoint<R>) = Unit
+}
+
+@JvmInline
+value class YPoint<X>(val x: X)
+
+fun <S: List<Int>> genericFunctionMFVC(v: XPoint<S>) {}
+fun <S: List<Int>> genericFunctionIC(v: YPoint<S>) {}
+
+interface GenericMFVCHolder<T> {
+ var p: T
+ var p1: T
+}
+
+interface GenericMFVCHolderWithMFVCUpperBound<X, T : XPoint<X>> {
+ var p: T
+ var p1: T
+}
+
+interface ReifiedMFVCHolder<X> {
+ var p: XPoint<X>
+ var p1: XPoint<X>
+}
+
+data class DataClassException(val value: Any?): Exception()
+
+interface GenericMFVCHolderWithImpls<T> {
+ var p: T
+ get() = throw DataClassException(1)
+ set(value) = throw DataClassException(2 to value)
+
+ var p1: T
+ get() = throw DataClassException(3)
+ set(value) = throw DataClassException(4 to value)
+}
+
+interface GenericMFVCHolderWithMFVCUpperBoundWithImpls<X, T : XPoint<X>> {
+ var p: T
+ get() = throw DataClassException(5)
+ set(value) = throw DataClassException(6 to value)
+
+ var p1: T
+ get() = throw DataClassException(7)
+ set(value) = throw DataClassException(8 to value)
+}
+
+interface ReifiedMFVCHolderWithImpls<X> {
+ var p: XPoint<X>
+ get() = throw DataClassException(9)
+ set(value) = throw DataClassException(10 to value)
+
+ var p1: XPoint<X>
+ get() = throw DataClassException(11)
+ set(value) = throw DataClassException(12 to value)
+}
+
+class RealOverride<X>(override var p: XPoint<X>) : GenericMFVCHolder<XPoint<X>>, ReifiedMFVCHolder<X>, GenericMFVCHolderWithMFVCUpperBound<X, XPoint<X>> {
+ override var p1: XPoint<X>
+ get() = throw DataClassException(13)
+ set(value) = throw DataClassException(14 to value)
+}
+
+class GenericFakeOverride<X> : GenericMFVCHolderWithImpls<XPoint<X>>
+class ReifiedFakeOverride<X> : ReifiedMFVCHolderWithImpls<X>
+class GenericFakeOverrideWithMFVCUpperBound<X> : GenericMFVCHolderWithMFVCUpperBoundWithImpls<X, XPoint<X>>
+
+
+@JvmInline
+value class GenericFakeOverrideMFVC<X>(val field1: X, val field2: X) : GenericMFVCHolderWithImpls<XPoint<X>>
+@JvmInline
+value class ReifiedFakeOverrideMFVC<X>(val field1: X, val field2: X) : ReifiedMFVCHolderWithImpls<X>
+@JvmInline
+value class GenericFakeOverrideMFVCWithMFVCUpperBound<X>(val field1: X, val field2: X) : GenericMFVCHolderWithMFVCUpperBoundWithImpls<X, XPoint<X>>
+
+
+interface SomePointInterface<X, T> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: XPoint<X>
+}
+
+interface SomePointInterfaceWithMFVCBound<X, T : XPoint<X>> {
+ var somethingRegular: Int
+
+ var somethingGeneric: T
+
+ var somethingMFVC: XPoint<X>
+}
+
+@JvmInline
+value class XPointWithInterface<X, Y, Z>(val x: Y, val y: Z) : SomePointInterface<X, XPoint<X>>, SomePointInterfaceWithMFVCBound<X, XPoint<X>> {
+ override var somethingGeneric: XPoint<X>
+ get() = throw DataClassException(15)
+ set(value) = throw DataClassException(16 to value)
+
+ override var somethingMFVC: XPoint<X>
+ get() = throw DataClassException(17)
+ set(value) = throw DataClassException(18 to value)
+
+ override var somethingRegular: Int
+ get() = throw DataClassException(19)
+ set(value) = throw DataClassException(20 to value)
+}
+
+
+interface AbstractSegment<T> {
+ val p1: T
+ val p2: T
+}
+
+@JvmInline
+value class XSegment<X>(override val p1: XPoint<X>, override val p2: XPoint<X>): AbstractSegment<XPoint<X>>
+
+fun <T> equal(expected: () -> T, actual: () -> T) {
+ val expectedResult = runCatching { expected() }
+ val actualResult = runCatching { actual() }
+ require(expectedResult == actualResult) { "Expected: $expectedResult\nActual: $actualResult" }
+}
+
+fun box(): String {
+ val xPoint = XPoint(1.0, 2.0)
+
+ val lam1: () -> XPoint<Double> = { throw DataClassException(1) }
+ val lam2: () -> Unit = { throw DataClassException(2 to xPoint) }
+ val lam3: () -> XPoint<Double> = { throw DataClassException(3) }
+ val lam4: () -> Unit = { throw DataClassException(4 to xPoint) }
+ val lam5: () -> XPoint<Double> = { throw DataClassException(5) }
+ val lam6: () -> Unit = { throw DataClassException(6 to xPoint) }
+ val lam7: () -> XPoint<Double> = { throw DataClassException(7) }
+ val lam8: () -> Unit = { throw DataClassException(8 to xPoint) }
+ val lam9: () -> XPoint<Double> = { throw DataClassException(9) }
+ val lam10: () -> Unit = { throw DataClassException(10 to xPoint) }
+ val lam11: () -> XPoint<Double> = { throw DataClassException(11) }
+ val lam12: () -> Unit = { throw DataClassException(12 to xPoint) }
+ val lam13: () -> XPoint<Double> = { throw DataClassException(13) }
+ val lam14: () -> Unit = { throw DataClassException(14 to xPoint) }
+ val lam15: () -> XPoint<Double> = { throw DataClassException(15) }
+ val lam16: () -> Unit = { throw DataClassException(16 to xPoint) }
+ val lam17: () -> XPoint<Double> = { throw DataClassException(17) }
+ val lam18: () -> Unit = { throw DataClassException(18 to xPoint) }
+ val lam19: () -> Int = { throw DataClassException(19) }
+ val lam20: () -> Unit = { throw DataClassException(20 to 1) }
+ val emptyLam = {}
+ val xPointLam = { xPoint }
+ val otherXPoint = XPoint(3.0, 4.0)
+ val otherXPointLam = { otherXPoint }
+ equal({ "XPoint(x=1.0, y=2.0)" }, { xPoint.toString() })
+ equal({ "XPoint(x=1.0, y=2.0)" }, { (xPoint as Any).toString() })
+
+ equal({ true }, { xPoint.equals(xPoint) })
+ equal({ true }, { xPoint.equals(xPoint as Any) })
+ equal({ true }, { (xPoint as Any).equals(xPoint) })
+ equal({ true }, { (xPoint as Any).equals(xPoint as Any) })
+
+ equal({ false }, { xPoint.equals(otherXPoint) })
+ equal({ false }, { xPoint.equals(otherXPoint as Any) })
+ equal({ false }, { (xPoint as Any).equals(otherXPoint) })
+ equal({ false }, { (xPoint as Any).equals(otherXPoint as Any) })
+
+ equal({ xPoint.hashCode() }, { (xPoint as Any).hashCode() })
+
+ equal({ 1.0 }, { xPoint.x })
+ equal({ 1.0 }, { (xPoint as AbstractPoint<Double>).x })
+ equal({ 2.0 }, { xPoint.y })
+ equal({ 2.0 }, { (xPoint as AbstractPoint<Double>).y })
+
+
+ val realOverride = RealOverride(xPoint)
+
+ equal(xPointLam, { realOverride.p })
+ equal(xPointLam, { (realOverride as GenericMFVCHolder<XPoint<Double>>).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as GenericMFVCHolder<XPoint<Double>>).p1 })
+ equal(xPointLam, { (realOverride as ReifiedMFVCHolder<Double>).p })
+ equal(lam13, { realOverride.p1 })
+ equal(lam13, { (realOverride as ReifiedMFVCHolder<Double>).p1 })
+ equal(xPointLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<Double, XPoint<Double>>).p })
+ equal(lam13, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<Double, XPoint<Double>>).p1 })
+
+
+ equal(emptyLam, { realOverride.p = xPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolder<XPoint<Double>>).p = xPoint })
+ equal(lam14, { realOverride.p1 = xPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolder<XPoint<Double>>).p1 = xPoint })
+ equal(emptyLam, { (realOverride as ReifiedMFVCHolder<Double>).p = xPoint })
+ equal(lam14, { (realOverride as ReifiedMFVCHolder<Double>).p1 = xPoint })
+ equal(emptyLam, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<Double, XPoint<Double>>).p = xPoint })
+ equal(lam14, { (realOverride as GenericMFVCHolderWithMFVCUpperBound<Double, XPoint<Double>>).p1 = xPoint })
+
+
+ val genericFakeOverride = GenericFakeOverride<Double>()
+
+ equal(lam1, { genericFakeOverride.p })
+ equal(lam1, { (genericFakeOverride as GenericMFVCHolderWithImpls<XPoint<Double>>).p })
+ equal(lam3, { genericFakeOverride.p1 })
+ equal(lam3, { (genericFakeOverride as GenericMFVCHolderWithImpls<XPoint<Double>>).p1 })
+ val reifiedFakeOverride = ReifiedFakeOverride<Double>()
+ equal(lam9, { reifiedFakeOverride.p })
+ equal(lam9, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls<Double>).p })
+ equal(lam11, { reifiedFakeOverride.p1 })
+ equal(lam11, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls<Double>).p1 })
+ val genericFakeOverrideWithMFVCUpperBound = GenericFakeOverrideWithMFVCUpperBound<Double>()
+ equal(lam5, { genericFakeOverrideWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p })
+ equal(lam7, { genericFakeOverrideWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p1 })
+
+ equal(lam2, { genericFakeOverride.p = xPoint })
+ equal(lam2, { (genericFakeOverride as GenericMFVCHolderWithImpls<XPoint<Double>>).p = xPoint })
+ equal(lam4, { genericFakeOverride.p1 = xPoint })
+ equal(lam4, { (genericFakeOverride as GenericMFVCHolderWithImpls<XPoint<Double>>).p1 = xPoint })
+ equal(lam10, { reifiedFakeOverride.p = xPoint })
+ equal(lam10, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls<Double>).p = xPoint })
+ equal(lam12, { reifiedFakeOverride.p1 = xPoint })
+ equal(lam12, { (reifiedFakeOverride as ReifiedMFVCHolderWithImpls<Double>).p1 = xPoint })
+ equal(lam6, { genericFakeOverrideWithMFVCUpperBound.p = xPoint })
+ equal(lam6, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p = xPoint })
+ equal(lam8, { genericFakeOverrideWithMFVCUpperBound.p1 = xPoint })
+ equal(lam8, { (genericFakeOverrideWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p1 = xPoint })
+
+
+ val genericFakeOverrideMFVC = GenericFakeOverrideMFVC(1.0, 2.0)
+
+ equal(lam1, { genericFakeOverrideMFVC.p })
+ equal(lam1, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<XPoint<Double>>).p })
+ equal(lam3, { genericFakeOverrideMFVC.p1 })
+ equal(lam3, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<XPoint<Double>>).p1 })
+
+ val reifiedFakeOverrideMFVC = ReifiedFakeOverrideMFVC(1.0, 2.0)
+ equal(lam9, { reifiedFakeOverrideMFVC.p })
+ equal(lam9, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls<Double>).p })
+ equal(lam11, { reifiedFakeOverrideMFVC.p1 })
+ equal(lam11, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls<Double>).p1 })
+
+ val genericFakeOverrideMFVCWithMFVCUpperBound = GenericFakeOverrideMFVCWithMFVCUpperBound(1.0, 2.0)
+ equal(lam5, { genericFakeOverrideMFVCWithMFVCUpperBound.p })
+ equal(lam5, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p })
+ equal(lam7, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 })
+ equal(lam7, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p1 })
+
+ equal(lam2, { genericFakeOverrideMFVC.p = xPoint })
+ equal(lam2, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<XPoint<Double>>).p = xPoint })
+ equal(lam4, { genericFakeOverrideMFVC.p1 = xPoint })
+ equal(lam4, { (genericFakeOverrideMFVC as GenericMFVCHolderWithImpls<XPoint<Double>>).p1 = xPoint })
+
+ equal(lam10, { reifiedFakeOverrideMFVC.p = xPoint })
+ equal(lam10, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls<Double>).p = xPoint })
+ equal(lam12, { reifiedFakeOverrideMFVC.p1 = xPoint })
+ equal(lam12, { (reifiedFakeOverrideMFVC as ReifiedMFVCHolderWithImpls<Double>).p1 = xPoint })
+
+ equal(lam6, { genericFakeOverrideMFVCWithMFVCUpperBound.p = xPoint })
+ equal(lam6, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p = xPoint })
+ equal(lam8, { genericFakeOverrideMFVCWithMFVCUpperBound.p1 = xPoint })
+ equal(lam8, { (genericFakeOverrideMFVCWithMFVCUpperBound as GenericMFVCHolderWithMFVCUpperBoundWithImpls<Double, XPoint<Double>>).p1 = xPoint })
+
+
+ val xPointWithInterface = XPointWithInterface<Double, Double, Double>(1.0, 2.0)
+
+ equal(lam15, { xPointWithInterface.somethingGeneric })
+ equal(lam15, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingGeneric })
+ equal(lam19, { xPointWithInterface.somethingRegular })
+ equal(lam19, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingRegular })
+ equal(lam17, { xPointWithInterface.somethingMFVC })
+ equal(lam17, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingMFVC })
+
+ equal(lam15, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingGeneric })
+ equal(lam19, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingRegular })
+ equal(lam17, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingMFVC })
+
+ equal(lam16, { xPointWithInterface.somethingGeneric = xPoint })
+ equal(lam16, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingGeneric = xPoint })
+ equal(lam20, { xPointWithInterface.somethingRegular = 1 })
+ equal(lam20, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingRegular = 1 })
+ equal(lam18, { xPointWithInterface.somethingMFVC = xPoint })
+ equal(lam18, { (xPointWithInterface as SomePointInterface<Double, XPoint<Double>>).somethingMFVC = xPoint })
+
+ equal(lam16, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingGeneric = xPoint })
+ equal(lam20, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingRegular = 1 })
+ equal(lam18, { (xPointWithInterface as SomePointInterfaceWithMFVCBound<Double, XPoint<Double>>).somethingMFVC = xPoint })
+
+
+ val xSegment = XSegment(xPoint, otherXPoint)
+
+ equal(xPointLam, { xSegment.p1 })
+ equal(otherXPointLam, { xSegment.p2 })
+ equal({ 1.0 }, { xPoint.x })
+ equal({ 1.0 }, { xSegment.p1.x })
+ equal({ 3.0 }, { otherXPoint.x })
+ equal({ 3.0 }, { xSegment.p2.x })
+ equal({ 2.0 }, { xPoint.y })
+ equal({ 2.0 }, { xSegment.p1.y })
+ equal({ 4.0 }, { otherXPoint.y })
+ equal({ 4.0 }, { xSegment.p2.y })
+ equal(xPointLam, { (xSegment as AbstractSegment<XPoint<Double>>).p1 })
+ equal(otherXPointLam, { (xSegment as AbstractSegment<XPoint<Double>>).p2 })
+ equal({ 1.0 }, { (xSegment as AbstractSegment<XPoint<Double>>).p1.x })
+ equal({ 3.0 }, { (xSegment as AbstractSegment<XPoint<Double>>).p2.x })
+ equal({ 2.0 }, { (xSegment as AbstractSegment<XPoint<Double>>).p1.y })
+ equal({ 4.0 }, { (xSegment as AbstractSegment<XPoint<Double>>).p2.y })
+
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.txt b/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.txt
new file mode 100644
index 0000000..de1c921
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/overrides_typeParameters.txt
@@ -0,0 +1,2625 @@
+@kotlin.Metadata
+public interface AbstractPoint {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method getX(): java.lang.Object
+ public abstract method getY(): java.lang.Object
+}
+
+@kotlin.Metadata
+public interface AbstractSegment {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method getP1(): java.lang.Object
+ public abstract method getP2(): java.lang.Object
+}
+
+@kotlin.Metadata
+public final class DataClassException {
+ // source: 'overrides_typeParameters.kt'
+ private final @org.jetbrains.annotations.Nullable field value: java.lang.Object
+ public method <init>(@org.jetbrains.annotations.Nullable p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.Nullable method component1(): java.lang.Object
+ public synthetic static method copy$default(p0: DataClassException, p1: java.lang.Object, p2: int, p3: java.lang.Object): DataClassException
+ public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.Nullable p0: java.lang.Object): DataClassException
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public final @org.jetbrains.annotations.Nullable method getValue(): java.lang.Object
+ public method hashCode(): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverride {
+ // source: 'overrides_typeParameters.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public method setP(@org.jetbrains.annotations.NotNull p0: XPoint): void
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP1(@org.jetbrains.annotations.NotNull p0: XPoint): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVC {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0: java.lang.Object
+ private final field field-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object): GenericFakeOverrideMFVC
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: XPoint): void
+ public static method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: XPoint): void
+ public static method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): java.lang.Object
+ public synthetic final method unbox-impl-1(): java.lang.Object
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class GenericFakeOverrideMFVCWithMFVCUpperBound {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0: java.lang.Object
+ private final field field-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object): GenericFakeOverrideMFVCWithMFVCUpperBound
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): java.lang.Object
+ public synthetic final method unbox-impl-1(): java.lang.Object
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public final class GenericFakeOverrideWithMFVCUpperBound {
+ // source: 'overrides_typeParameters.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolder {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides_typeParameters.kt'
+ public static method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls): java.lang.Object
+ public static method setP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public static method setP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithImpls, p1: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithImpls {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method getP(): java.lang.Object
+ public abstract method getP1(): java.lang.Object
+ public abstract method setP(p0: java.lang.Object): void
+ public abstract method setP1(p0: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBound {
+ // source: 'overrides_typeParameters.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic abstract method getP-0(): java.lang.Object
+ public synthetic abstract method getP-1(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic abstract method getP1-0(): java.lang.Object
+ public synthetic abstract method getP1-1(): java.lang.Object
+ public abstract method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls {
+ // source: 'overrides_typeParameters.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): XPoint
+ public synthetic static method getP-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): java.lang.Object
+ public synthetic static method getP-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): XPoint
+ public synthetic static method getP1-0(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): java.lang.Object
+ public synthetic static method getP1-1(p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls): java.lang.Object
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: java.lang.Object, p2: java.lang.Object): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: GenericMFVCHolderWithMFVCUpperBoundWithImpls, p1: java.lang.Object, p2: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface GenericMFVCHolderWithMFVCUpperBoundWithImpls {
+ // source: 'overrides_typeParameters.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic abstract method getP-0(): java.lang.Object
+ public synthetic abstract method getP-1(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic abstract method getP1-0(): java.lang.Object
+ public synthetic abstract method getP1-1(): java.lang.Object
+ public abstract method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public final inner class GenericMFVCHolderWithMFVCUpperBoundWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$1
+ inner (anonymous) class Overrides_typeParametersKt$box$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$10 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$10
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$100 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$100
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$101 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$101
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$102 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$102
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$103 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$103
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$104 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$104
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$105 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$105
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$106 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$106
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$107 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$107
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$108 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$108
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$109 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$109
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$11 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$11
+ inner (anonymous) class Overrides_typeParametersKt$box$11
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$110 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$110
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$111 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$111
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$112 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$112
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$113 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$113
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$114 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$114
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$115 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$115
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$116 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$116
+ inner (anonymous) class Overrides_typeParametersKt$box$116
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$117 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$117
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$118 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$118
+ inner (anonymous) class Overrides_typeParametersKt$box$118
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$119 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$119
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$12 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$12
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$120 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$120
+ inner (anonymous) class Overrides_typeParametersKt$box$120
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$121 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$121
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$122 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$122
+ inner (anonymous) class Overrides_typeParametersKt$box$122
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$123 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$123
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$124 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$124
+ inner (anonymous) class Overrides_typeParametersKt$box$124
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$125 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$125
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$126 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$126
+ inner (anonymous) class Overrides_typeParametersKt$box$126
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$127 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$127
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$128 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$128
+ inner (anonymous) class Overrides_typeParametersKt$box$128
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$129 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$129
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$13 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$13
+ inner (anonymous) class Overrides_typeParametersKt$box$13
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$130 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$130
+ inner (anonymous) class Overrides_typeParametersKt$box$130
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$131 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$131
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$132 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$132
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$133 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$133
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$134 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$134
+ inner (anonymous) class Overrides_typeParametersKt$box$134
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$135 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$135
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$136 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$136
+ inner (anonymous) class Overrides_typeParametersKt$box$136
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$137 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$137
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$138 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$138
+ inner (anonymous) class Overrides_typeParametersKt$box$138
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$139 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$139
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$14 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$14
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$140 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$140
+ inner (anonymous) class Overrides_typeParametersKt$box$140
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$141 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xSegment-field-0-0: java.lang.Object
+ synthetic final field $xSegment-field-0-1: java.lang.Object
+ synthetic final field $xSegment-field-1-0: java.lang.Object
+ synthetic final field $xSegment-field-1-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$141
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$15 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$15
+ inner (anonymous) class Overrides_typeParametersKt$box$15
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$16 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$16
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$17 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$17
+ inner (anonymous) class Overrides_typeParametersKt$box$17
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$18 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$18
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$19 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$19
+ inner (anonymous) class Overrides_typeParametersKt$box$19
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$2 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$2
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$20 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$20
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$21 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$21
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$22 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$22
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$23 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$23
+ inner (anonymous) class Overrides_typeParametersKt$box$23
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$24 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$24
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$25 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$25
+ inner (anonymous) class Overrides_typeParametersKt$box$25
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$26 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$26
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$27 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$27
+ inner (anonymous) class Overrides_typeParametersKt$box$27
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$28 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$28
+ method <init>(p0: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$29 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$29
+ inner (anonymous) class Overrides_typeParametersKt$box$29
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$3 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$3
+ inner (anonymous) class Overrides_typeParametersKt$box$3
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$30 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$30
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Double
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$31 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$31
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$32 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$32
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$33 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$33
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$34 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$34
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$35 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$35
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$36 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$36
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$37 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$37
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$38 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$38
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$39 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$39
+ method <init>(p0: RealOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$4 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$4
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.String
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$40 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$40
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$41 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$41
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$42 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$42
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$43 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$43
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$44 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$44
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$45 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$45
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$46 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$46
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$47 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $realOverride: RealOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$47
+ method <init>(p0: RealOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$48 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$48
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$49 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$49
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$5 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$5
+ inner (anonymous) class Overrides_typeParametersKt$box$5
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$50 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$50
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$51 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$51
+ method <init>(p0: GenericFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$52 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$52
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$53 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$53
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$54 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$54
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$55 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ inner (anonymous) class Overrides_typeParametersKt$box$55
+ method <init>(p0: ReifiedFakeOverride): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$56 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_typeParametersKt$box$56
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$57 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_typeParametersKt$box$57
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$58 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_typeParametersKt$box$58
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$59 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ inner (anonymous) class Overrides_typeParametersKt$box$59
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$6 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$6
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$60 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$60
+ method <init>(p0: GenericFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$61 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$61
+ method <init>(p0: GenericFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$62 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$62
+ method <init>(p0: GenericFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$63 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverride: GenericFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$63
+ method <init>(p0: GenericFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$64 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$64
+ method <init>(p0: ReifiedFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$65 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$65
+ method <init>(p0: ReifiedFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$66 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$66
+ method <init>(p0: ReifiedFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$67 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverride: ReifiedFakeOverride
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$67
+ method <init>(p0: ReifiedFakeOverride, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$68 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$68
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$69 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$69
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$7 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$7
+ inner (anonymous) class Overrides_typeParametersKt$box$7
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$70 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$70
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$71 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideWithMFVCUpperBound: GenericFakeOverrideWithMFVCUpperBound
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$71
+ method <init>(p0: GenericFakeOverrideWithMFVCUpperBound, p1: java.lang.Object, p2: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$72 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$72
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$73 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$73
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$74 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$74
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$75 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$75
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$76 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$76
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$77 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$77
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$78 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$78
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$79 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$79
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$8 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$8
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$80 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$80
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$81 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$81
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$82 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$82
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$83 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$83
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$84 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$84
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$85 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$85
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$86 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$86
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$87 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$87
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$88 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$88
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$89 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$89
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$9 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$9
+ inner (anonymous) class Overrides_typeParametersKt$box$9
+ static method <clinit>(): void
+ method <init>(): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Boolean
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$90 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$90
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$91 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $reifiedFakeOverrideMFVC-field-0: java.lang.Object
+ synthetic final field $reifiedFakeOverrideMFVC-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$91
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$92 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$92
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$93 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$93
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$94 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$94
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$95 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-0: java.lang.Object
+ synthetic final field $genericFakeOverrideMFVCWithMFVCUpperBound-field-1: java.lang.Object
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$95
+ method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$96 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$96
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$97 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$97
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$98 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$98
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$99 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPointWithInterface-field-0: java.lang.Object
+ synthetic final field $xPointWithInterface-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$99
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Integer
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$emptyLam$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$emptyLam$1
+ inner (anonymous) class Overrides_typeParametersKt$box$emptyLam$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam1$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam1$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam1$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam10$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam10$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam11$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam11$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam11$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam12$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam12$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam13$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam13$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam13$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam14$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam14$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam15$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam15$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam15$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam16$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam16$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam17$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam17$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam17$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam18$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam18$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam19$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam19$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam19$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam2$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam2$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam20$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam20$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam20$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam3$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam3$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam3$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam4$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam4$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam5$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam5$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam5$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam6$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam6$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam7$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam7$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam7$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam8$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$lam8$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final method invoke(): void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$lam9$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ public final static field INSTANCE: Overrides_typeParametersKt$box$lam9$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam9$1
+ static method <clinit>(): void
+ method <init>(): void
+ public synthetic bridge method invoke(): java.lang.Object
+ public final @org.jetbrains.annotations.NotNull method invoke(): java.lang.Void
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$otherXPointLam$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $otherXPoint-field-0: java.lang.Object
+ synthetic final field $otherXPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$otherXPointLam$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+final class Overrides_typeParametersKt$box$xPointLam$1 {
+ // source: 'overrides_typeParameters.kt'
+ enclosing method Overrides_typeParametersKt.box()Ljava/lang/String;
+ synthetic final field $xPoint-field-0: java.lang.Object
+ synthetic final field $xPoint-field-1: java.lang.Object
+ inner (anonymous) class Overrides_typeParametersKt$box$xPointLam$1
+ method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public final @org.jetbrains.annotations.NotNull method invoke(): XPoint
+ public synthetic bridge method invoke(): java.lang.Object
+}
+
+@kotlin.Metadata
+public final class Overrides_typeParametersKt {
+ // source: 'overrides_typeParameters.kt'
+ inner (anonymous) class Overrides_typeParametersKt$box$1
+ inner (anonymous) class Overrides_typeParametersKt$box$10
+ inner (anonymous) class Overrides_typeParametersKt$box$100
+ inner (anonymous) class Overrides_typeParametersKt$box$101
+ inner (anonymous) class Overrides_typeParametersKt$box$102
+ inner (anonymous) class Overrides_typeParametersKt$box$103
+ inner (anonymous) class Overrides_typeParametersKt$box$104
+ inner (anonymous) class Overrides_typeParametersKt$box$105
+ inner (anonymous) class Overrides_typeParametersKt$box$106
+ inner (anonymous) class Overrides_typeParametersKt$box$107
+ inner (anonymous) class Overrides_typeParametersKt$box$108
+ inner (anonymous) class Overrides_typeParametersKt$box$109
+ inner (anonymous) class Overrides_typeParametersKt$box$11
+ inner (anonymous) class Overrides_typeParametersKt$box$110
+ inner (anonymous) class Overrides_typeParametersKt$box$111
+ inner (anonymous) class Overrides_typeParametersKt$box$112
+ inner (anonymous) class Overrides_typeParametersKt$box$113
+ inner (anonymous) class Overrides_typeParametersKt$box$114
+ inner (anonymous) class Overrides_typeParametersKt$box$115
+ inner (anonymous) class Overrides_typeParametersKt$box$116
+ inner (anonymous) class Overrides_typeParametersKt$box$117
+ inner (anonymous) class Overrides_typeParametersKt$box$118
+ inner (anonymous) class Overrides_typeParametersKt$box$119
+ inner (anonymous) class Overrides_typeParametersKt$box$12
+ inner (anonymous) class Overrides_typeParametersKt$box$120
+ inner (anonymous) class Overrides_typeParametersKt$box$121
+ inner (anonymous) class Overrides_typeParametersKt$box$122
+ inner (anonymous) class Overrides_typeParametersKt$box$123
+ inner (anonymous) class Overrides_typeParametersKt$box$124
+ inner (anonymous) class Overrides_typeParametersKt$box$125
+ inner (anonymous) class Overrides_typeParametersKt$box$126
+ inner (anonymous) class Overrides_typeParametersKt$box$127
+ inner (anonymous) class Overrides_typeParametersKt$box$128
+ inner (anonymous) class Overrides_typeParametersKt$box$129
+ inner (anonymous) class Overrides_typeParametersKt$box$13
+ inner (anonymous) class Overrides_typeParametersKt$box$130
+ inner (anonymous) class Overrides_typeParametersKt$box$131
+ inner (anonymous) class Overrides_typeParametersKt$box$132
+ inner (anonymous) class Overrides_typeParametersKt$box$133
+ inner (anonymous) class Overrides_typeParametersKt$box$134
+ inner (anonymous) class Overrides_typeParametersKt$box$135
+ inner (anonymous) class Overrides_typeParametersKt$box$136
+ inner (anonymous) class Overrides_typeParametersKt$box$137
+ inner (anonymous) class Overrides_typeParametersKt$box$138
+ inner (anonymous) class Overrides_typeParametersKt$box$139
+ inner (anonymous) class Overrides_typeParametersKt$box$14
+ inner (anonymous) class Overrides_typeParametersKt$box$140
+ inner (anonymous) class Overrides_typeParametersKt$box$141
+ inner (anonymous) class Overrides_typeParametersKt$box$15
+ inner (anonymous) class Overrides_typeParametersKt$box$16
+ inner (anonymous) class Overrides_typeParametersKt$box$17
+ inner (anonymous) class Overrides_typeParametersKt$box$18
+ inner (anonymous) class Overrides_typeParametersKt$box$19
+ inner (anonymous) class Overrides_typeParametersKt$box$2
+ inner (anonymous) class Overrides_typeParametersKt$box$20
+ inner (anonymous) class Overrides_typeParametersKt$box$21
+ inner (anonymous) class Overrides_typeParametersKt$box$22
+ inner (anonymous) class Overrides_typeParametersKt$box$23
+ inner (anonymous) class Overrides_typeParametersKt$box$24
+ inner (anonymous) class Overrides_typeParametersKt$box$25
+ inner (anonymous) class Overrides_typeParametersKt$box$26
+ inner (anonymous) class Overrides_typeParametersKt$box$27
+ inner (anonymous) class Overrides_typeParametersKt$box$28
+ inner (anonymous) class Overrides_typeParametersKt$box$29
+ inner (anonymous) class Overrides_typeParametersKt$box$3
+ inner (anonymous) class Overrides_typeParametersKt$box$30
+ inner (anonymous) class Overrides_typeParametersKt$box$31
+ inner (anonymous) class Overrides_typeParametersKt$box$32
+ inner (anonymous) class Overrides_typeParametersKt$box$33
+ inner (anonymous) class Overrides_typeParametersKt$box$34
+ inner (anonymous) class Overrides_typeParametersKt$box$35
+ inner (anonymous) class Overrides_typeParametersKt$box$36
+ inner (anonymous) class Overrides_typeParametersKt$box$37
+ inner (anonymous) class Overrides_typeParametersKt$box$38
+ inner (anonymous) class Overrides_typeParametersKt$box$39
+ inner (anonymous) class Overrides_typeParametersKt$box$4
+ inner (anonymous) class Overrides_typeParametersKt$box$40
+ inner (anonymous) class Overrides_typeParametersKt$box$41
+ inner (anonymous) class Overrides_typeParametersKt$box$42
+ inner (anonymous) class Overrides_typeParametersKt$box$43
+ inner (anonymous) class Overrides_typeParametersKt$box$44
+ inner (anonymous) class Overrides_typeParametersKt$box$45
+ inner (anonymous) class Overrides_typeParametersKt$box$46
+ inner (anonymous) class Overrides_typeParametersKt$box$47
+ inner (anonymous) class Overrides_typeParametersKt$box$48
+ inner (anonymous) class Overrides_typeParametersKt$box$49
+ inner (anonymous) class Overrides_typeParametersKt$box$5
+ inner (anonymous) class Overrides_typeParametersKt$box$50
+ inner (anonymous) class Overrides_typeParametersKt$box$51
+ inner (anonymous) class Overrides_typeParametersKt$box$52
+ inner (anonymous) class Overrides_typeParametersKt$box$53
+ inner (anonymous) class Overrides_typeParametersKt$box$54
+ inner (anonymous) class Overrides_typeParametersKt$box$55
+ inner (anonymous) class Overrides_typeParametersKt$box$56
+ inner (anonymous) class Overrides_typeParametersKt$box$57
+ inner (anonymous) class Overrides_typeParametersKt$box$58
+ inner (anonymous) class Overrides_typeParametersKt$box$59
+ inner (anonymous) class Overrides_typeParametersKt$box$6
+ inner (anonymous) class Overrides_typeParametersKt$box$60
+ inner (anonymous) class Overrides_typeParametersKt$box$61
+ inner (anonymous) class Overrides_typeParametersKt$box$62
+ inner (anonymous) class Overrides_typeParametersKt$box$63
+ inner (anonymous) class Overrides_typeParametersKt$box$64
+ inner (anonymous) class Overrides_typeParametersKt$box$65
+ inner (anonymous) class Overrides_typeParametersKt$box$66
+ inner (anonymous) class Overrides_typeParametersKt$box$67
+ inner (anonymous) class Overrides_typeParametersKt$box$68
+ inner (anonymous) class Overrides_typeParametersKt$box$69
+ inner (anonymous) class Overrides_typeParametersKt$box$7
+ inner (anonymous) class Overrides_typeParametersKt$box$70
+ inner (anonymous) class Overrides_typeParametersKt$box$71
+ inner (anonymous) class Overrides_typeParametersKt$box$72
+ inner (anonymous) class Overrides_typeParametersKt$box$73
+ inner (anonymous) class Overrides_typeParametersKt$box$74
+ inner (anonymous) class Overrides_typeParametersKt$box$75
+ inner (anonymous) class Overrides_typeParametersKt$box$76
+ inner (anonymous) class Overrides_typeParametersKt$box$77
+ inner (anonymous) class Overrides_typeParametersKt$box$78
+ inner (anonymous) class Overrides_typeParametersKt$box$79
+ inner (anonymous) class Overrides_typeParametersKt$box$8
+ inner (anonymous) class Overrides_typeParametersKt$box$80
+ inner (anonymous) class Overrides_typeParametersKt$box$81
+ inner (anonymous) class Overrides_typeParametersKt$box$82
+ inner (anonymous) class Overrides_typeParametersKt$box$83
+ inner (anonymous) class Overrides_typeParametersKt$box$84
+ inner (anonymous) class Overrides_typeParametersKt$box$85
+ inner (anonymous) class Overrides_typeParametersKt$box$86
+ inner (anonymous) class Overrides_typeParametersKt$box$87
+ inner (anonymous) class Overrides_typeParametersKt$box$88
+ inner (anonymous) class Overrides_typeParametersKt$box$89
+ inner (anonymous) class Overrides_typeParametersKt$box$9
+ inner (anonymous) class Overrides_typeParametersKt$box$90
+ inner (anonymous) class Overrides_typeParametersKt$box$91
+ inner (anonymous) class Overrides_typeParametersKt$box$92
+ inner (anonymous) class Overrides_typeParametersKt$box$93
+ inner (anonymous) class Overrides_typeParametersKt$box$94
+ inner (anonymous) class Overrides_typeParametersKt$box$95
+ inner (anonymous) class Overrides_typeParametersKt$box$96
+ inner (anonymous) class Overrides_typeParametersKt$box$97
+ inner (anonymous) class Overrides_typeParametersKt$box$98
+ inner (anonymous) class Overrides_typeParametersKt$box$99
+ inner (anonymous) class Overrides_typeParametersKt$box$emptyLam$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam1$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam10$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam11$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam12$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam13$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam14$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam15$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam16$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam17$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam18$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam19$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam2$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam20$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam3$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam4$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam5$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam6$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam7$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam8$1
+ inner (anonymous) class Overrides_typeParametersKt$box$lam9$1
+ inner (anonymous) class Overrides_typeParametersKt$box$otherXPointLam$1
+ inner (anonymous) class Overrides_typeParametersKt$box$xPointLam$1
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static method equal(@org.jetbrains.annotations.NotNull p0: kotlin.jvm.functions.Function0, @org.jetbrains.annotations.NotNull p1: kotlin.jvm.functions.Function0): void
+ public final static method genericFunctionIC-lld4ICU(@org.jetbrains.annotations.NotNull p0: java.lang.Object): void
+ public final static method genericFunctionMFVC-sUp7gFk(@org.jetbrains.annotations.NotNull p0: java.util.List, @org.jetbrains.annotations.NotNull p1: java.util.List): void
+}
+
+@kotlin.Metadata
+public final class RealOverride {
+ // source: 'overrides_typeParameters.kt'
+ private field p-0: java.lang.Object
+ private field p-1: java.lang.Object
+ public method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic bridge method getP(): java.lang.Object
+ public synthetic method getP-0(): java.lang.Object
+ public synthetic method getP-1(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public synthetic method getP1-0(): java.lang.Object
+ public synthetic method getP1-1(): java.lang.Object
+ public synthetic bridge method setP(p0: java.lang.Object): void
+ public method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic bridge method setP1(p0: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class ReifiedFakeOverride {
+ // source: 'overrides_typeParameters.kt'
+ public method <init>(): void
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class ReifiedFakeOverrideMFVC {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0: java.lang.Object
+ private final field field-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object): ReifiedFakeOverrideMFVC
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): boolean
+ public @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public static @org.jetbrains.annotations.NotNull method getP-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public static @org.jetbrains.annotations.NotNull method getP1-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): java.lang.Object
+ public synthetic final method unbox-impl-1(): java.lang.Object
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolder {
+ // source: 'overrides_typeParameters.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic abstract method getP-0(): java.lang.Object
+ public synthetic abstract method getP-1(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic abstract method getP1-0(): java.lang.Object
+ public synthetic abstract method getP1-1(): java.lang.Object
+ public abstract method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+}
+
+@kotlin.Metadata
+public final class ReifiedMFVCHolderWithImpls$DefaultImpls {
+ // source: 'overrides_typeParameters.kt'
+ public static @org.jetbrains.annotations.NotNull method getP(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): XPoint
+ public synthetic static method getP-0(p0: ReifiedMFVCHolderWithImpls): java.lang.Object
+ public synthetic static method getP-1(p0: ReifiedMFVCHolderWithImpls): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getP1(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls): XPoint
+ public synthetic static method getP1-0(p0: ReifiedMFVCHolderWithImpls): java.lang.Object
+ public synthetic static method getP1-1(p0: ReifiedMFVCHolderWithImpls): java.lang.Object
+ public static method setP-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: java.lang.Object, p2: java.lang.Object): void
+ public static method setP1-sUp7gFk(@org.jetbrains.annotations.NotNull p0: ReifiedMFVCHolderWithImpls, p1: java.lang.Object, p2: java.lang.Object): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface ReifiedMFVCHolderWithImpls {
+ // source: 'overrides_typeParameters.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getP(): XPoint
+ public synthetic abstract method getP-0(): java.lang.Object
+ public synthetic abstract method getP-1(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic abstract method getP1-0(): java.lang.Object
+ public synthetic abstract method getP1-1(): java.lang.Object
+ public abstract method setP-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setP1-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public final inner class ReifiedMFVCHolderWithImpls$DefaultImpls
+}
+
+@kotlin.Metadata
+public final class SomeInterface$DefaultImpls {
+ // source: 'overrides_typeParameters.kt'
+ public static method someFunction1(@org.jetbrains.annotations.NotNull p0: SomeInterface, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public static method someFunction2-lIoT8es(@org.jetbrains.annotations.NotNull p0: SomeInterface, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object): void
+ public final inner class SomeInterface$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface SomeInterface {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method someFunction1(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): void
+ public abstract method someFunction2-lIoT8es(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object): void
+ public final inner class SomeInterface$DefaultImpls
+}
+
+@kotlin.Metadata
+public interface SomePointInterface {
+ // source: 'overrides_typeParameters.kt'
+ public abstract method getSomethingGeneric(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): XPoint
+ public synthetic abstract method getSomethingMFVC-0(): java.lang.Object
+ public synthetic abstract method getSomethingMFVC-1(): java.lang.Object
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric(p0: java.lang.Object): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setSomethingRegular(p0: int): void
+}
+
+@kotlin.Metadata
+public interface SomePointInterfaceWithMFVCBound {
+ // source: 'overrides_typeParameters.kt'
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingGeneric(): XPoint
+ public synthetic abstract method getSomethingGeneric-0(): java.lang.Object
+ public synthetic abstract method getSomethingGeneric-1(): java.lang.Object
+ public abstract @org.jetbrains.annotations.NotNull method getSomethingMFVC(): XPoint
+ public synthetic abstract method getSomethingMFVC-0(): java.lang.Object
+ public synthetic abstract method getSomethingMFVC-1(): java.lang.Object
+ public abstract method getSomethingRegular(): int
+ public abstract method setSomethingGeneric-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setSomethingMFVC-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public abstract method setSomethingRegular(p0: int): void
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class XPoint {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0: java.lang.Object
+ private final field field-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): boolean
+ public method getX(): java.lang.Object
+ public method getY(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public method someFunction1(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): void
+ public static method someFunction1-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object): void
+ public method someFunction2-lIoT8es(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object): void
+ public static method someFunction2-lIoT8es(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object, p7: java.lang.Object): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): java.lang.Object
+ public synthetic final method unbox-impl-1(): java.lang.Object
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class XPointWithInterface {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0: java.lang.Object
+ private final field field-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object): XPointWithInterface
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): boolean
+ public @org.jetbrains.annotations.NotNull method getSomethingGeneric(): XPoint
+ public synthetic bridge method getSomethingGeneric(): java.lang.Object
+ public static @org.jetbrains.annotations.NotNull method getSomethingGeneric-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public @org.jetbrains.annotations.NotNull method getSomethingMFVC(): XPoint
+ public static @org.jetbrains.annotations.NotNull method getSomethingMFVC-impl(p0: java.lang.Object, p1: java.lang.Object): XPoint
+ public method getSomethingRegular(): int
+ public static method getSomethingRegular-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object): int
+ public synthetic bridge method setSomethingGeneric(p0: java.lang.Object): void
+ public method setSomethingGeneric-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setSomethingGeneric-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public method setSomethingMFVC-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object): void
+ public static method setSomethingMFVC-sUp7gFk(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public method setSomethingRegular(p0: int): void
+ public static method setSomethingRegular-impl(p0: java.lang.Object, p1: java.lang.Object, p2: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): java.lang.Object
+ public synthetic final method unbox-impl-1(): java.lang.Object
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class XSegment {
+ // source: 'overrides_typeParameters.kt'
+ private final field field-0-0: java.lang.Object
+ private final field field-0-1: java.lang.Object
+ private final field field-1-0: java.lang.Object
+ private final field field-1-1: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): XSegment
+ public final static method constructor-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object, p4: java.lang.Object, p5: java.lang.Object, p6: java.lang.Object, p7: java.lang.Object): boolean
+ public @org.jetbrains.annotations.NotNull method getP1(): XPoint
+ public synthetic bridge method getP1(): java.lang.Object
+ public @org.jetbrains.annotations.NotNull method getP2(): XPoint
+ public synthetic bridge method getP2(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object, p1: java.lang.Object, p2: java.lang.Object, p3: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl-0(): XPoint
+ public synthetic final method unbox-impl-0-0(): java.lang.Object
+ public synthetic final method unbox-impl-0-1(): java.lang.Object
+ public synthetic final method unbox-impl-1(): XPoint
+ public synthetic final method unbox-impl-1-0(): java.lang.Object
+ public synthetic final method unbox-impl-1-1(): java.lang.Object
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class YPoint {
+ // source: 'overrides_typeParameters.kt'
+ private final field x: java.lang.Object
+ private synthetic method <init>(p0: java.lang.Object): void
+ public synthetic final static method box-impl(p0: java.lang.Object): YPoint
+ public static @org.jetbrains.annotations.NotNull method constructor-impl(p0: java.lang.Object): java.lang.Object
+ public method equals(p0: java.lang.Object): boolean
+ public static method equals-impl(p0: java.lang.Object, p1: java.lang.Object): boolean
+ public final static method equals-impl0(p0: java.lang.Object, p1: java.lang.Object): boolean
+ public final method getX(): java.lang.Object
+ public method hashCode(): int
+ public static method hashCode-impl(p0: java.lang.Object): int
+ public method toString(): java.lang.String
+ public static method toString-impl(p0: java.lang.Object): java.lang.String
+ public synthetic final method unbox-impl(): java.lang.Object
+}
diff --git a/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.kt b/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.kt
new file mode 100644
index 0000000..0e2f899
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.kt
@@ -0,0 +1,34 @@
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+// CHECK_BYTECODE_LISTING
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+class PointBox(var value: DPoint)
+
+fun box(): String {
+ var p = DPoint(1.0, 2.0)
+ try {
+ p = DPoint(3.0, error("Failure"))
+ } catch (_: Exception) {
+ }
+ if (p != DPoint(1.0, 2.0)) {
+ return "Partially reassigned variable"
+ }
+
+ val box = PointBox(p)
+
+ try {
+ box.value = DPoint(3.0, error("Failure"))
+ } catch (_: Exception) {
+ }
+
+ if (box.value != DPoint(1.0, 2.0)) {
+ return "Partially reassigned field"
+ }
+
+ return "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.txt b/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.txt
new file mode 100644
index 0000000..a644d18
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.txt
@@ -0,0 +1,37 @@
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'throwingMFVCReassignments.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.Metadata
+public final class PointBox {
+ // source: 'throwingMFVCReassignments.kt'
+ private field value-0: double
+ private field value-1: double
+ public method <init>(p0: double, p1: double): void
+ public final @org.jetbrains.annotations.NotNull method getValue(): DPoint
+ public synthetic final method getValue-0(): double
+ public synthetic final method getValue-1(): double
+ public final method setValue-sUp7gFk(p0: double, p1: double): void
+}
+
+@kotlin.Metadata
+public final class ThrowingMFVCReassignmentsKt {
+ // source: 'throwingMFVCReassignments.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+}
diff --git a/compiler/testData/codegen/box/valueClasses/tryExpressions.kt b/compiler/testData/codegen/box/valueClasses/tryExpressions.kt
new file mode 100644
index 0000000..7447986
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/tryExpressions.kt
@@ -0,0 +1,43 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double) {
+ init {
+ require(x != 0.0 && y != 0.0)
+ }
+}
+
+fun tryOk() = try {
+ DPoint(1.0, 2.0)
+} catch(_: Throwable) {
+ DPoint(0.0, 3.0)
+} finally {
+ DPoint(4.0, 5.0)
+}
+
+fun tryFail1() = try {
+ DPoint(0.0, 1.0)
+} catch(_: Throwable) {
+ DPoint(2.0, 3.0)
+} finally {
+ DPoint(4.0, 5.0)
+}
+
+fun tryFail2() = try {
+ DPoint(1.0, 2.0)
+} catch(_: Throwable) {
+ DPoint(3.0, 4.0)
+} finally {
+ DPoint(5.0, 0.0)
+}
+
+fun box(): String {
+ require(runCatching { tryOk() } == Result.success(DPoint(1.0, 2.0)))
+ require(runCatching { tryFail1() } == Result.success(DPoint(2.0, 3.0)))
+ require(runCatching { tryFail2() }.isFailure)
+ return "OK"
+}
diff --git a/compiler/testData/codegen/box/valueClasses/tryExpressions.txt b/compiler/testData/codegen/box/valueClasses/tryExpressions.txt
new file mode 100644
index 0000000..eb2ecb0
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/tryExpressions.txt
@@ -0,0 +1,29 @@
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class DPoint {
+ // source: 'tryExpressions.kt'
+ private final field field-0: double
+ private final field field-1: double
+ private synthetic method <init>(p0: double, p1: double): void
+ public synthetic final static method box-impl(p0: double, p1: double): DPoint
+ public final static method constructor-impl(p0: double, p1: double): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: double, p1: double, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: double, p1: double, p2: double, p3: double): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: double, p1: double): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: double, p1: double): java.lang.String
+ public synthetic final method unbox-impl-0(): double
+ public synthetic final method unbox-impl-1(): double
+}
+
+@kotlin.Metadata
+public final class TryExpressionsKt {
+ // source: 'tryExpressions.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final static @org.jetbrains.annotations.NotNull method tryFail1(): DPoint
+ public final static @org.jetbrains.annotations.NotNull method tryFail2(): DPoint
+ public final static @org.jetbrains.annotations.NotNull method tryOk(): DPoint
+ public final inner class kotlin/Result$Companion
+}
diff --git a/compiler/testData/codegen/box/valueClasses/visibility.kt b/compiler/testData/codegen/box/valueClasses/visibility.kt
new file mode 100644
index 0000000..14272fd
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/visibility.kt
@@ -0,0 +1,296 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class Public(val x: Int, val y: Int) {
+ companion object {
+ var x: Int = 0
+ val y: Int
+ get() = 1
+ var z: Public = Public(0, 0)
+ val t: Public
+ get() = Public(0, 0)
+ }
+}
+
+@JvmInline
+value class Internal(internal val x: Int, internal val y: Int) {
+ companion object {
+ @JvmStatic
+ var x: Int = 0
+
+ @JvmStatic
+ val y: Int
+ get() = 1
+ var z: Internal = Internal(0, 0)
+
+ @JvmStatic
+ val t: Internal
+ get() = Internal(0, 0)
+ }
+}
+
+@JvmInline
+value class Private(private val x: Int, private val y: Int)
+
+@JvmInline
+value class PublicPublic(val value: Public)
+
+@JvmInline
+value class InternalPublic(internal val value: Public)
+
+@JvmInline
+value class PrivatePublic(private val value: Public)
+
+@JvmInline
+value class PublicInternal(val value: Internal)
+
+@JvmInline
+value class InternalInternal(internal val value: Internal)
+
+@JvmInline
+value class PrivateInternal(private val value: Internal)
+
+@JvmInline
+value class PublicPrivate(val value: Private)
+
+@JvmInline
+value class InternalPrivate(internal val value: Private)
+
+@JvmInline
+value class PrivatePrivate(private val value: Private)
+
+class Regular {
+ var x1: Public = Public(1, 2)
+ internal var x2: Public = Public(3, 4)
+ private var x3: Public = Public(5, 6)
+
+ var x4: Public = Public(7, 8)
+ private set
+ internal var x5: Public = Public(9, 10)
+ private set
+
+ var x6: Public = Public(11, 12)
+ internal set
+
+
+ var y1: Internal = Internal(13, 14)
+ internal var y2: Internal = Internal(15, 16)
+ private var y3: Internal = Internal(17, 18)
+
+ var y4: Internal = Internal(19, 20)
+ private set
+ internal var y5: Internal = Internal(21, 22)
+ private set
+
+ var y6: Internal = Internal(23, 24)
+ internal set
+
+
+ var z1: Private = Private(25, 26)
+ internal var z2: Private = Private(27, 28)
+ private var z3: Private = Private(29, 30)
+
+ var z4: Private = Private(31, 32)
+ private set
+ internal var z5: Private = Private(33, 34)
+ private set
+
+ var z6: Private = Private(35, 36)
+ internal set
+
+ companion object {
+ var staticX1: Public = Public(-1, -2)
+ internal var staticX2: Public = Public(-3, -4)
+ private var staticX3: Public = Public(-5, -6)
+
+ var staticX4: Public = Public(-7, -8)
+ private set
+ internal var staticX5: Public = Public(-9, -10)
+ private set
+
+ var staticX6: Public = Public(-11, -12)
+ internal set
+
+
+ var staticY1: Internal = Internal(-13, -14)
+ internal var staticY2: Internal = Internal(-15, -16)
+ private var staticY3: Internal = Internal(-17, -18)
+
+ var staticY4: Internal = Internal(-19, -20)
+ private set
+ internal var staticY5: Internal = Internal(-21, -22)
+ private set
+
+ var staticY6: Internal = Internal(-23, -24)
+ internal set
+
+
+ var staticZ1: Private = Private(-25, -26)
+ internal var staticZ2: Private = Private(-27, -28)
+ private var staticZ3: Private = Private(-29, -30)
+
+ var staticZ4: Private = Private(-31, -32)
+ private set
+ internal var staticZ5: Private = Private(-33, -34)
+ private set
+
+ var staticZ6: Private = Private(-35, -36)
+ internal set
+
+ @JvmStatic
+ var jvmStaticX1: Public = Public(-1, -2)
+
+ @JvmStatic
+ internal var jvmStaticX2: Public = Public(-3, -4)
+
+ @JvmStatic
+ private var jvmStaticX3: Public = Public(-5, -6)
+
+ @JvmStatic
+ var jvmStaticX4: Public = Public(-7, -8)
+ private set
+
+ @JvmStatic
+ internal var jvmStaticX5: Public = Public(-9, -10)
+ private set
+
+ @JvmStatic
+ var jvmStaticX6: Public = Public(-11, -12)
+ internal set
+
+
+ @JvmStatic
+ var jvmStaticY1: Internal = Internal(-13, -14)
+
+ @JvmStatic
+ internal var jvmStaticY2: Internal = Internal(-15, -16)
+
+ @JvmStatic
+ private var jvmStaticY3: Internal = Internal(-17, -18)
+
+ @JvmStatic
+ var jvmStaticY4: Internal = Internal(-19, -20)
+ private set
+
+ @JvmStatic
+ internal var jvmStaticY5: Internal = Internal(-21, -22)
+ private set
+
+ @JvmStatic
+ var jvmStaticY6: Internal = Internal(-23, -24)
+ internal set
+
+
+ @JvmStatic
+ var jvmStaticZ1: Private = Private(-25, -26)
+
+ @JvmStatic
+ internal var jvmStaticZ2: Private = Private(-27, -28)
+
+ @JvmStatic
+ private var jvmStaticZ3: Private = Private(-29, -30)
+
+ @JvmStatic
+ var jvmStaticZ4: Private = Private(-31, -32)
+ private set
+
+ @JvmStatic
+ internal var jvmStaticZ5: Private = Private(-33, -34)
+ private set
+
+ @JvmStatic
+ var jvmStaticZ6: Private = Private(-35, -36)
+ internal set
+
+ }
+
+ fun callAll() {
+ x1; x2; x3; x4; x5; x6
+ x1.x; x1.y; x2.x; x2.y; x3.x; x3.y; x4.x; x4.y; x5.x; x5.y; x6.x; x6.y
+ x1 = x1; x2 = x2; x3 = x3; x4 = x4; x5 = x5; x6 = x6
+
+ y1; y2; y3; y4; y5; y6
+ y1.x; y1.y; y2.x; y2.y; y3.x; y3.y; y4.x; y4.y; y5.x; y5.y; y6.x; y6.y
+ y1 = y1; y2 = y2; y3 = y3; y4 = y4; y5 = y5; y6 = y6
+
+ z1; z2; z3; z4; z5; z6
+ z1 = z1; z2 = z2; z3 = z3; z4 = z4; z5 = z5; z6 = z6
+
+
+ staticX1; staticX2; staticX3; staticX4; staticX5; staticX6
+ staticX1.x; staticX1.y; staticX2.x; staticX2.y; staticX3.x; staticX3.y; staticX4.x; staticX4.y; staticX5.x; staticX5.y; staticX6.x; staticX6.y
+ staticX1 = staticX1; staticX2 = staticX2; staticX3 = staticX3; staticX4 = staticX4; staticX5 = staticX5; staticX6 = staticX6
+
+ staticY1; staticY2; staticY3; staticY4; staticY5; staticY6
+ staticY1.x; staticY1.y; staticY2.x; staticY2.y; staticY3.x; staticY3.y; staticY4.x; staticY4.y; staticY5.x; staticY5.y; staticY6.x; staticY6.y
+ staticY1 = staticY1; staticY2 = staticY2; staticY3 = staticY3; staticY4 = staticY4; staticY5 = staticY5; staticY6 = staticY6
+
+ staticZ1; staticZ2; staticZ3; staticZ4; staticZ5; staticZ6
+ staticZ1 = staticZ1; staticZ2 = staticZ2; staticZ3 = staticZ3; staticZ4 = staticZ4; staticZ5 = staticZ5; staticZ6 = staticZ6
+
+
+ jvmStaticX1; jvmStaticX2; jvmStaticX3; jvmStaticX4; jvmStaticX5; jvmStaticX6
+ jvmStaticX1.x; jvmStaticX1.y; jvmStaticX2.x; jvmStaticX2.y; jvmStaticX3.x; jvmStaticX3.y; jvmStaticX4.x; jvmStaticX4.y; jvmStaticX5.x; jvmStaticX5.y; jvmStaticX6.x; jvmStaticX6.y
+ jvmStaticX1 = jvmStaticX1; jvmStaticX2 = jvmStaticX2; jvmStaticX3 = jvmStaticX3; jvmStaticX4 = jvmStaticX4; jvmStaticX5 =
+ jvmStaticX5; jvmStaticX6 = jvmStaticX6
+
+ jvmStaticY1; jvmStaticY2; jvmStaticY3; jvmStaticY4; jvmStaticY5; jvmStaticY6
+ jvmStaticY1.x; jvmStaticY1.y; jvmStaticY2.x; jvmStaticY2.y; jvmStaticY3.x; jvmStaticY3.y; jvmStaticY4.x; jvmStaticY4.y; jvmStaticY5.x; jvmStaticY5.y; jvmStaticY6.x; jvmStaticY6.y
+ jvmStaticY1 = jvmStaticY1; jvmStaticY2 = jvmStaticY2; jvmStaticY3 = jvmStaticY3; jvmStaticY4 = jvmStaticY4; jvmStaticY5 =
+ jvmStaticY5; jvmStaticY6 = jvmStaticY6
+
+ jvmStaticZ1; jvmStaticZ2; jvmStaticZ3; jvmStaticZ4; jvmStaticZ5; jvmStaticZ6
+ jvmStaticZ1 = jvmStaticZ1; jvmStaticZ2 = jvmStaticZ2; jvmStaticZ3 = jvmStaticZ3; jvmStaticZ4 = jvmStaticZ4; jvmStaticZ5 =
+ jvmStaticZ5; jvmStaticZ6 = jvmStaticZ6
+ }
+}
+
+fun box(): String {
+ val r = Regular()
+ r.apply {
+ callAll()
+
+
+ x1; x2; x4; x5; x6
+ x1.x; x1.y; x2.x; x2.y; x4.x; x4.y; x5.x; x5.y; x6.x; x6.y
+ x1 = x1; x2 = x2; x6 = x6
+
+ y1; y2; y4; y5; y6
+ y1.x; y1.y; y2.x; y2.y; y4.x; y4.y; y5.x; y5.y; y6.x; y6.y
+ y1 = y1; y2 = y2; y6 = y6
+
+ z1; z2; z4; z5; z6
+ z1 = z1; z2 = z2; z6 = z6
+ }
+
+ Regular.Companion.apply {
+ staticX1; staticX2; staticX4; staticX5; staticX6
+ staticX1.x; staticX1.y; staticX2.x; staticX2.y; staticX4.x; staticX4.y; staticX5.x; staticX5.y; staticX6.x; staticX6.y
+ staticX1 = staticX1; staticX2 = staticX2; staticX6 = staticX6
+
+ staticY1; staticY2; staticY4; staticY5; staticY6
+ staticY1.x; staticY1.y; staticY2.x; staticY2.y; staticY4.x; staticY4.y; staticY5.x; staticY5.y; staticY6.x; staticY6.y
+ staticY1 = staticY1; staticY2 = staticY2; staticY6 = staticY6
+
+ staticZ1; staticZ2; staticZ4; staticZ5; staticZ6
+ staticZ1 = staticZ1; staticZ2 = staticZ2; staticZ6 = staticZ6
+
+
+ jvmStaticX1; jvmStaticX2; jvmStaticX4; jvmStaticX5; jvmStaticX6
+ jvmStaticX1.x; jvmStaticX1.y; jvmStaticX2.x; jvmStaticX2.y; jvmStaticX4.x; jvmStaticX4.y; jvmStaticX5.x; jvmStaticX5.y; jvmStaticX6.x; jvmStaticX6.y
+ jvmStaticX1 = jvmStaticX1; jvmStaticX2 = jvmStaticX2; jvmStaticX6 = jvmStaticX6
+
+ jvmStaticY1; jvmStaticY2; jvmStaticY4; jvmStaticY5; jvmStaticY6
+ jvmStaticY1.x; jvmStaticY1.y; jvmStaticY2.x; jvmStaticY2.y; jvmStaticY4.x; jvmStaticY4.y; jvmStaticY5.x; jvmStaticY5.y; jvmStaticY6.x; jvmStaticY6.y
+ jvmStaticY1 = jvmStaticY1; jvmStaticY2 = jvmStaticY2; jvmStaticY6 = jvmStaticY6
+
+ jvmStaticZ1; jvmStaticZ2; jvmStaticZ4; jvmStaticZ5; jvmStaticZ6
+ jvmStaticZ1 = jvmStaticZ1; jvmStaticZ2 = jvmStaticZ2; jvmStaticZ6 = jvmStaticZ6
+ }
+
+ return "OK"
+}
\ No newline at end of file
diff --git a/compiler/testData/codegen/box/valueClasses/visibility.txt b/compiler/testData/codegen/box/valueClasses/visibility.txt
new file mode 100644
index 0000000..8189433e5
--- /dev/null
+++ b/compiler/testData/codegen/box/valueClasses/visibility.txt
@@ -0,0 +1,780 @@
+@kotlin.Metadata
+public final class Internal$Companion {
+ // source: 'visibility.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getT$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getT(): Internal
+ public synthetic final method getT-0(): int
+ public synthetic final method getT-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getX$annotations(): void
+ public final method getX(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getY$annotations(): void
+ public final method getY(): int
+ public final @org.jetbrains.annotations.NotNull method getZ(): Internal
+ public synthetic final method getZ-0(): int
+ public synthetic final method getZ-1(): int
+ public final method setX(p0: int): void
+ public final method setZ-sUp7gFk(p0: int, p1: int): void
+ public final inner class Internal$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class Internal {
+ // source: 'visibility.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: Internal$Companion
+ private final field field-0: int
+ private final field field-1: int
+ private static field x: int
+ static method <clinit>(): void
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method access$getX$cp(): int
+ public synthetic final static method access$getZ-0$cp(): int
+ public synthetic final static method access$getZ-1$cp(): int
+ public synthetic final static method access$setX$cp(p0: int): void
+ public synthetic final static method access$setZ-0$cp(p0: int): void
+ public synthetic final static method access$setZ-1$cp(p0: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): Internal
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public final static @org.jetbrains.annotations.NotNull method getT(): Internal
+ public final static method getX(): int
+ public final static method getY(): int
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public final static method setX(p0: int): void
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public final inner class Internal$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class InternalInternal {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): InternalInternal
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Internal
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class InternalPrivate {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): InternalPrivate
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Private
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class InternalPublic {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): InternalPublic
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Public
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class Private {
+ // source: 'visibility.kt'
+ private final field field-0: int
+ private final field field-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): Private
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PrivateInternal {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PrivateInternal
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Internal
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PrivatePrivate {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PrivatePrivate
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Private
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PrivatePublic {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PrivatePublic
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Public
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.Metadata
+public final class Public$Companion {
+ // source: 'visibility.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public final @org.jetbrains.annotations.NotNull method getT(): Public
+ public synthetic final method getT-0(): int
+ public synthetic final method getT-1(): int
+ public final method getX(): int
+ public final method getY(): int
+ public final @org.jetbrains.annotations.NotNull method getZ(): Public
+ public synthetic final method getZ-0(): int
+ public synthetic final method getZ-1(): int
+ public final method setX(p0: int): void
+ public final method setZ-sUp7gFk(p0: int, p1: int): void
+ public final inner class Public$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class Public {
+ // source: 'visibility.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: Public$Companion
+ private final field field-0: int
+ private final field field-1: int
+ private static field x: int
+ static method <clinit>(): void
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method access$getX$cp(): int
+ public synthetic final static method access$getZ-0$cp(): int
+ public synthetic final static method access$getZ-1$cp(): int
+ public synthetic final static method access$setX$cp(p0: int): void
+ public synthetic final static method access$setZ-0$cp(p0: int): void
+ public synthetic final static method access$setZ-1$cp(p0: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): Public
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): int
+ public synthetic final method unbox-impl-1(): int
+ public final inner class Public$Companion
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PublicInternal {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PublicInternal
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Internal
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PublicPrivate {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PublicPrivate
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Private
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.jvm.JvmInline
+@kotlin.Metadata
+public final class PublicPublic {
+ // source: 'visibility.kt'
+ private final field field-0-0: int
+ private final field field-0-1: int
+ private synthetic method <init>(p0: int, p1: int): void
+ public synthetic final static method box-impl(p0: int, p1: int): PublicPublic
+ public final static method constructor-impl(p0: int, p1: int): void
+ public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
+ public static method equals-impl(p0: int, p1: int, p2: java.lang.Object): boolean
+ public final static method equals-impl0(p0: int, p1: int, p2: int, p3: int): boolean
+ public method hashCode(): int
+ public static method hashCode-impl(p0: int, p1: int): int
+ public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
+ public static method toString-impl(p0: int, p1: int): java.lang.String
+ public synthetic final method unbox-impl-0(): Public
+ public synthetic final method unbox-impl-0-0(): int
+ public synthetic final method unbox-impl-0-1(): int
+}
+
+@kotlin.Metadata
+public final class Regular$Companion {
+ // source: 'visibility.kt'
+ private method <init>(): void
+ public synthetic method <init>(p0: kotlin.jvm.internal.DefaultConstructorMarker): void
+ public synthetic final static method access$getJvmStaticX3(p0: Regular$Companion): Public
+ public synthetic final static method access$getJvmStaticY3(p0: Regular$Companion): Internal
+ public synthetic final static method access$getJvmStaticZ3(p0: Regular$Companion): Private
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX1$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticX1(): Public
+ public synthetic final method getJvmStaticX1-0(): int
+ public synthetic final method getJvmStaticX1-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX2$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticX2$main(): Public
+ public synthetic final method getJvmStaticX2-0(): int
+ public synthetic final method getJvmStaticX2-1(): int
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX3$annotations(): void
+ private final method getJvmStaticX3(): Public
+ public synthetic final method getJvmStaticX3-0(): int
+ public synthetic final method getJvmStaticX3-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX4$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticX4(): Public
+ public synthetic final method getJvmStaticX4-0(): int
+ public synthetic final method getJvmStaticX4-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX5$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticX5$main(): Public
+ public synthetic final method getJvmStaticX5-0(): int
+ public synthetic final method getJvmStaticX5-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticX6$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticX6(): Public
+ public synthetic final method getJvmStaticX6-0(): int
+ public synthetic final method getJvmStaticX6-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY1$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticY1(): Internal
+ public synthetic final method getJvmStaticY1-0(): int
+ public synthetic final method getJvmStaticY1-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY2$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticY2$main(): Internal
+ public synthetic final method getJvmStaticY2-0(): int
+ public synthetic final method getJvmStaticY2-1(): int
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY3$annotations(): void
+ private final method getJvmStaticY3(): Internal
+ public synthetic final method getJvmStaticY3-0(): int
+ public synthetic final method getJvmStaticY3-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY4$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticY4(): Internal
+ public synthetic final method getJvmStaticY4-0(): int
+ public synthetic final method getJvmStaticY4-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY5$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticY5$main(): Internal
+ public synthetic final method getJvmStaticY5-0(): int
+ public synthetic final method getJvmStaticY5-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticY6$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticY6(): Internal
+ public synthetic final method getJvmStaticY6-0(): int
+ public synthetic final method getJvmStaticY6-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ1$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticZ1(): Private
+ public synthetic final method getJvmStaticZ1-0(): int
+ public synthetic final method getJvmStaticZ1-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ2$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticZ2$main(): Private
+ public synthetic final method getJvmStaticZ2-0(): int
+ public synthetic final method getJvmStaticZ2-1(): int
+ private synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ3$annotations(): void
+ private final method getJvmStaticZ3(): Private
+ public synthetic final method getJvmStaticZ3-0(): int
+ public synthetic final method getJvmStaticZ3-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ4$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticZ4(): Private
+ public synthetic final method getJvmStaticZ4-0(): int
+ public synthetic final method getJvmStaticZ4-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ5$main$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticZ5$main(): Private
+ public synthetic final method getJvmStaticZ5-0(): int
+ public synthetic final method getJvmStaticZ5-1(): int
+ public synthetic deprecated static @kotlin.jvm.JvmStatic method getJvmStaticZ6$annotations(): void
+ public final @org.jetbrains.annotations.NotNull method getJvmStaticZ6(): Private
+ public synthetic final method getJvmStaticZ6-0(): int
+ public synthetic final method getJvmStaticZ6-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticX1(): Public
+ public synthetic final method getStaticX1-0(): int
+ public synthetic final method getStaticX1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticX2$main(): Public
+ public synthetic final method getStaticX2-0(): int
+ public synthetic final method getStaticX2-1(): int
+ private final method getStaticX3(): Public
+ public synthetic final method getStaticX3-0(): int
+ public synthetic final method getStaticX3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticX4(): Public
+ public synthetic final method getStaticX4-0(): int
+ public synthetic final method getStaticX4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticX5$main(): Public
+ public synthetic final method getStaticX5-0(): int
+ public synthetic final method getStaticX5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticX6(): Public
+ public synthetic final method getStaticX6-0(): int
+ public synthetic final method getStaticX6-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticY1(): Internal
+ public synthetic final method getStaticY1-0(): int
+ public synthetic final method getStaticY1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticY2$main(): Internal
+ public synthetic final method getStaticY2-0(): int
+ public synthetic final method getStaticY2-1(): int
+ private final method getStaticY3(): Internal
+ public synthetic final method getStaticY3-0(): int
+ public synthetic final method getStaticY3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticY4(): Internal
+ public synthetic final method getStaticY4-0(): int
+ public synthetic final method getStaticY4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticY5$main(): Internal
+ public synthetic final method getStaticY5-0(): int
+ public synthetic final method getStaticY5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticY6(): Internal
+ public synthetic final method getStaticY6-0(): int
+ public synthetic final method getStaticY6-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticZ1(): Private
+ public synthetic final method getStaticZ1-0(): int
+ public synthetic final method getStaticZ1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticZ2$main(): Private
+ public synthetic final method getStaticZ2-0(): int
+ public synthetic final method getStaticZ2-1(): int
+ private final method getStaticZ3(): Private
+ public synthetic final method getStaticZ3-0(): int
+ public synthetic final method getStaticZ3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticZ4(): Private
+ public synthetic final method getStaticZ4-0(): int
+ public synthetic final method getStaticZ4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticZ5$main(): Private
+ public synthetic final method getStaticZ5-0(): int
+ public synthetic final method getStaticZ5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getStaticZ6(): Private
+ public synthetic final method getStaticZ6-0(): int
+ public synthetic final method getStaticZ6-1(): int
+ public final method setJvmStaticX1-sUp7gFk(p0: int, p1: int): void
+ public final method setJvmStaticX2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setJvmStaticX6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setJvmStaticY1-sUp7gFk(p0: int, p1: int): void
+ public final method setJvmStaticY2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setJvmStaticY6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setJvmStaticZ1-sUp7gFk(p0: int, p1: int): void
+ public final method setJvmStaticZ2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setJvmStaticZ6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticX1-sUp7gFk(p0: int, p1: int): void
+ public final method setStaticX2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticX6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticY1-sUp7gFk(p0: int, p1: int): void
+ public final method setStaticY2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticY6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticZ1-sUp7gFk(p0: int, p1: int): void
+ public final method setStaticZ2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setStaticZ6-sUp7gFk$main(p0: int, p1: int): void
+ public final inner class Regular$Companion
+}
+
+@kotlin.Metadata
+public final class Regular {
+ // source: 'visibility.kt'
+ public final static @org.jetbrains.annotations.NotNull field Companion: Regular$Companion
+ private static field jvmStaticX1-0: int
+ private static field jvmStaticX1-1: int
+ private static field jvmStaticX2-0: int
+ private static field jvmStaticX2-1: int
+ private static field jvmStaticX3-0: int
+ private static field jvmStaticX3-1: int
+ private static field jvmStaticX4-0: int
+ private static field jvmStaticX4-1: int
+ private static field jvmStaticX5-0: int
+ private static field jvmStaticX5-1: int
+ private static field jvmStaticX6-0: int
+ private static field jvmStaticX6-1: int
+ private static field jvmStaticY1-0: int
+ private static field jvmStaticY1-1: int
+ private static field jvmStaticY2-0: int
+ private static field jvmStaticY2-1: int
+ private static field jvmStaticY3-0: int
+ private static field jvmStaticY3-1: int
+ private static field jvmStaticY4-0: int
+ private static field jvmStaticY4-1: int
+ private static field jvmStaticY5-0: int
+ private static field jvmStaticY5-1: int
+ private static field jvmStaticY6-0: int
+ private static field jvmStaticY6-1: int
+ private static field jvmStaticZ1-0: int
+ private static field jvmStaticZ1-1: int
+ private static field jvmStaticZ2-0: int
+ private static field jvmStaticZ2-1: int
+ private static field jvmStaticZ3-0: int
+ private static field jvmStaticZ3-1: int
+ private static field jvmStaticZ4-0: int
+ private static field jvmStaticZ4-1: int
+ private static field jvmStaticZ5-0: int
+ private static field jvmStaticZ5-1: int
+ private static field jvmStaticZ6-0: int
+ private static field jvmStaticZ6-1: int
+ private static field staticX1-0: int
+ private static field staticX1-1: int
+ private static field staticX2-0: int
+ private static field staticX2-1: int
+ private static field staticX3-0: int
+ private static field staticX3-1: int
+ private static field staticX4-0: int
+ private static field staticX4-1: int
+ private static field staticX5-0: int
+ private static field staticX5-1: int
+ private static field staticX6-0: int
+ private static field staticX6-1: int
+ private static field staticY1-0: int
+ private static field staticY1-1: int
+ private static field staticY2-0: int
+ private static field staticY2-1: int
+ private static field staticY3-0: int
+ private static field staticY3-1: int
+ private static field staticY4-0: int
+ private static field staticY4-1: int
+ private static field staticY5-0: int
+ private static field staticY5-1: int
+ private static field staticY6-0: int
+ private static field staticY6-1: int
+ private static field staticZ1-0: int
+ private static field staticZ1-1: int
+ private static field staticZ2-0: int
+ private static field staticZ2-1: int
+ private static field staticZ3-0: int
+ private static field staticZ3-1: int
+ private static field staticZ4-0: int
+ private static field staticZ4-1: int
+ private static field staticZ5-0: int
+ private static field staticZ5-1: int
+ private static field staticZ6-0: int
+ private static field staticZ6-1: int
+ private field x1-0: int
+ private field x1-1: int
+ private field x2-0: int
+ private field x2-1: int
+ private field x3-0: int
+ private field x3-1: int
+ private field x4-0: int
+ private field x4-1: int
+ private field x5-0: int
+ private field x5-1: int
+ private field x6-0: int
+ private field x6-1: int
+ private field y1-0: int
+ private field y1-1: int
+ private field y2-0: int
+ private field y2-1: int
+ private field y3-0: int
+ private field y3-1: int
+ private field y4-0: int
+ private field y4-1: int
+ private field y5-0: int
+ private field y5-1: int
+ private field y6-0: int
+ private field y6-1: int
+ private field z1-0: int
+ private field z1-1: int
+ private field z2-0: int
+ private field z2-1: int
+ private field z3-0: int
+ private field z3-1: int
+ private field z4-0: int
+ private field z4-1: int
+ private field z5-0: int
+ private field z5-1: int
+ private field z6-0: int
+ private field z6-1: int
+ static method <clinit>(): void
+ public method <init>(): void
+ public synthetic final static method access$getJvmStaticX1-0$cp(): int
+ public synthetic final static method access$getJvmStaticX1-1$cp(): int
+ public synthetic final static method access$getJvmStaticX2-0$cp(): int
+ public synthetic final static method access$getJvmStaticX2-1$cp(): int
+ public synthetic final static method access$getJvmStaticX3-0$cp(): int
+ public synthetic final static method access$getJvmStaticX3-1$cp(): int
+ public synthetic final static method access$getJvmStaticX4-0$cp(): int
+ public synthetic final static method access$getJvmStaticX4-1$cp(): int
+ public synthetic final static method access$getJvmStaticX5-0$cp(): int
+ public synthetic final static method access$getJvmStaticX5-1$cp(): int
+ public synthetic final static method access$getJvmStaticX6-0$cp(): int
+ public synthetic final static method access$getJvmStaticX6-1$cp(): int
+ public synthetic final static method access$getJvmStaticY1-0$cp(): int
+ public synthetic final static method access$getJvmStaticY1-1$cp(): int
+ public synthetic final static method access$getJvmStaticY2-0$cp(): int
+ public synthetic final static method access$getJvmStaticY2-1$cp(): int
+ public synthetic final static method access$getJvmStaticY3-0$cp(): int
+ public synthetic final static method access$getJvmStaticY3-1$cp(): int
+ public synthetic final static method access$getJvmStaticY4-0$cp(): int
+ public synthetic final static method access$getJvmStaticY4-1$cp(): int
+ public synthetic final static method access$getJvmStaticY5-0$cp(): int
+ public synthetic final static method access$getJvmStaticY5-1$cp(): int
+ public synthetic final static method access$getJvmStaticY6-0$cp(): int
+ public synthetic final static method access$getJvmStaticY6-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ1-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ1-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ2-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ2-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ3-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ3-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ4-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ4-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ5-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ5-1$cp(): int
+ public synthetic final static method access$getJvmStaticZ6-0$cp(): int
+ public synthetic final static method access$getJvmStaticZ6-1$cp(): int
+ public synthetic final static method access$getStaticX1-0$cp(): int
+ public synthetic final static method access$getStaticX1-1$cp(): int
+ public synthetic final static method access$getStaticX2-0$cp(): int
+ public synthetic final static method access$getStaticX2-1$cp(): int
+ public synthetic final static method access$getStaticX3-0$cp(): int
+ public synthetic final static method access$getStaticX3-1$cp(): int
+ public synthetic final static method access$getStaticX4-0$cp(): int
+ public synthetic final static method access$getStaticX4-1$cp(): int
+ public synthetic final static method access$getStaticX5-0$cp(): int
+ public synthetic final static method access$getStaticX5-1$cp(): int
+ public synthetic final static method access$getStaticX6-0$cp(): int
+ public synthetic final static method access$getStaticX6-1$cp(): int
+ public synthetic final static method access$getStaticY1-0$cp(): int
+ public synthetic final static method access$getStaticY1-1$cp(): int
+ public synthetic final static method access$getStaticY2-0$cp(): int
+ public synthetic final static method access$getStaticY2-1$cp(): int
+ public synthetic final static method access$getStaticY3-0$cp(): int
+ public synthetic final static method access$getStaticY3-1$cp(): int
+ public synthetic final static method access$getStaticY4-0$cp(): int
+ public synthetic final static method access$getStaticY4-1$cp(): int
+ public synthetic final static method access$getStaticY5-0$cp(): int
+ public synthetic final static method access$getStaticY5-1$cp(): int
+ public synthetic final static method access$getStaticY6-0$cp(): int
+ public synthetic final static method access$getStaticY6-1$cp(): int
+ public synthetic final static method access$getStaticZ1-0$cp(): int
+ public synthetic final static method access$getStaticZ1-1$cp(): int
+ public synthetic final static method access$getStaticZ2-0$cp(): int
+ public synthetic final static method access$getStaticZ2-1$cp(): int
+ public synthetic final static method access$getStaticZ3-0$cp(): int
+ public synthetic final static method access$getStaticZ3-1$cp(): int
+ public synthetic final static method access$getStaticZ4-0$cp(): int
+ public synthetic final static method access$getStaticZ4-1$cp(): int
+ public synthetic final static method access$getStaticZ5-0$cp(): int
+ public synthetic final static method access$getStaticZ5-1$cp(): int
+ public synthetic final static method access$getStaticZ6-0$cp(): int
+ public synthetic final static method access$getStaticZ6-1$cp(): int
+ public synthetic final static method access$setJvmStaticX1-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticX1-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticX2-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticX2-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticX6-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticX6-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY1-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY1-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY2-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY2-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY6-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticY6-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ1-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ1-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ2-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ2-1$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ6-0$cp(p0: int): void
+ public synthetic final static method access$setJvmStaticZ6-1$cp(p0: int): void
+ public synthetic final static method access$setStaticX1-0$cp(p0: int): void
+ public synthetic final static method access$setStaticX1-1$cp(p0: int): void
+ public synthetic final static method access$setStaticX2-0$cp(p0: int): void
+ public synthetic final static method access$setStaticX2-1$cp(p0: int): void
+ public synthetic final static method access$setStaticX6-0$cp(p0: int): void
+ public synthetic final static method access$setStaticX6-1$cp(p0: int): void
+ public synthetic final static method access$setStaticY1-0$cp(p0: int): void
+ public synthetic final static method access$setStaticY1-1$cp(p0: int): void
+ public synthetic final static method access$setStaticY2-0$cp(p0: int): void
+ public synthetic final static method access$setStaticY2-1$cp(p0: int): void
+ public synthetic final static method access$setStaticY6-0$cp(p0: int): void
+ public synthetic final static method access$setStaticY6-1$cp(p0: int): void
+ public synthetic final static method access$setStaticZ1-0$cp(p0: int): void
+ public synthetic final static method access$setStaticZ1-1$cp(p0: int): void
+ public synthetic final static method access$setStaticZ2-0$cp(p0: int): void
+ public synthetic final static method access$setStaticZ2-1$cp(p0: int): void
+ public synthetic final static method access$setStaticZ6-0$cp(p0: int): void
+ public synthetic final static method access$setStaticZ6-1$cp(p0: int): void
+ public final method callAll(): void
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticX1(): Public
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticX2$main(): Public
+ private final static method getJvmStaticX3(): Public
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticX4(): Public
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticX5$main(): Public
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticX6(): Public
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticY1(): Internal
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticY2$main(): Internal
+ private final static method getJvmStaticY3(): Internal
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticY4(): Internal
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticY5$main(): Internal
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticY6(): Internal
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticZ1(): Private
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticZ2$main(): Private
+ private final static method getJvmStaticZ3(): Private
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticZ4(): Private
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticZ5$main(): Private
+ public final static @org.jetbrains.annotations.NotNull method getJvmStaticZ6(): Private
+ public final @org.jetbrains.annotations.NotNull method getX1(): Public
+ public synthetic final method getX1-0(): int
+ public synthetic final method getX1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getX2$main(): Public
+ public synthetic final method getX2-0(): int
+ public synthetic final method getX2-1(): int
+ private final method getX3(): Public
+ public synthetic final method getX3-0(): int
+ public synthetic final method getX3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getX4(): Public
+ public synthetic final method getX4-0(): int
+ public synthetic final method getX4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getX5$main(): Public
+ public synthetic final method getX5-0(): int
+ public synthetic final method getX5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getX6(): Public
+ public synthetic final method getX6-0(): int
+ public synthetic final method getX6-1(): int
+ public final @org.jetbrains.annotations.NotNull method getY1(): Internal
+ public synthetic final method getY1-0(): int
+ public synthetic final method getY1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getY2$main(): Internal
+ public synthetic final method getY2-0(): int
+ public synthetic final method getY2-1(): int
+ private final method getY3(): Internal
+ public synthetic final method getY3-0(): int
+ public synthetic final method getY3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getY4(): Internal
+ public synthetic final method getY4-0(): int
+ public synthetic final method getY4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getY5$main(): Internal
+ public synthetic final method getY5-0(): int
+ public synthetic final method getY5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getY6(): Internal
+ public synthetic final method getY6-0(): int
+ public synthetic final method getY6-1(): int
+ public final @org.jetbrains.annotations.NotNull method getZ1(): Private
+ public synthetic final method getZ1-0(): int
+ public synthetic final method getZ1-1(): int
+ public final @org.jetbrains.annotations.NotNull method getZ2$main(): Private
+ public synthetic final method getZ2-0(): int
+ public synthetic final method getZ2-1(): int
+ private final method getZ3(): Private
+ public synthetic final method getZ3-0(): int
+ public synthetic final method getZ3-1(): int
+ public final @org.jetbrains.annotations.NotNull method getZ4(): Private
+ public synthetic final method getZ4-0(): int
+ public synthetic final method getZ4-1(): int
+ public final @org.jetbrains.annotations.NotNull method getZ5$main(): Private
+ public synthetic final method getZ5-0(): int
+ public synthetic final method getZ5-1(): int
+ public final @org.jetbrains.annotations.NotNull method getZ6(): Private
+ public synthetic final method getZ6-0(): int
+ public synthetic final method getZ6-1(): int
+ public final method setX1-sUp7gFk(p0: int, p1: int): void
+ public final method setX2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setX6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setY1-sUp7gFk(p0: int, p1: int): void
+ public final method setY2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setY6-sUp7gFk$main(p0: int, p1: int): void
+ public final method setZ1-sUp7gFk(p0: int, p1: int): void
+ public final method setZ2-sUp7gFk$main(p0: int, p1: int): void
+ public final method setZ6-sUp7gFk$main(p0: int, p1: int): void
+ public final inner class Regular$Companion
+}
+
+@kotlin.Metadata
+public final class VisibilityKt {
+ // source: 'visibility.kt'
+ public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
+ public final inner class Regular$Companion
+}
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/conditionalExpressions.kt b/compiler/testData/codegen/bytecodeText/valueClasses/conditionalExpressions.kt
new file mode 100644
index 0000000..8cadc8d
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/conditionalExpressions.kt
@@ -0,0 +1,41 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+fun ifExpr() = if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+
+fun whenExpr() = when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+}
+
+fun ifBody() {
+ if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+ val x = if (DPoint(0.0, 1.0).x > 0.0) DPoint(2.0, 3.0) else DPoint(4.0, 5.0)
+}
+
+fun whenBody() {
+ when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+ }
+ val x = when {
+ DPoint(6.0, 7.0).x > 0.0 -> DPoint(8.0, 9.0)
+ DPoint(10.0, 11.0).x > 0.0 -> DPoint(12.0, 13.0)
+ else -> DPoint(14.0, 15.0)
+ }
+}
+
+// 1 ifExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 0 ifExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 1 whenExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 0 whenExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 0 ifBody.*(\n .*)*(\n .*box-impl.*)
+// 0 whenBody.*(\n .*)*(\n .*box-impl.*)
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/equalsBoxTest.kt b/compiler/testData/codegen/bytecodeText/valueClasses/equalsBoxTest.kt
new file mode 100644
index 0000000..939d65e
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/equalsBoxTest.kt
@@ -0,0 +1,67 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+fun require(index: Int, condition: Boolean) = require(condition) { "$index" }
+
+fun DPoint.toObject() = this as Any
+fun DPoint.toDPointOrNull() = this as DPoint?
+fun Nothing?.toDPointOrNull() = this as DPoint?
+
+// separate to escape from StackOverflow in regex
+
+fun equalsChecks1(left: DPoint, right: DPoint) {
+ require(100, left == right)
+}
+
+fun equalsChecks2(left: DPoint, right: DPoint) {
+ require(101, left.toObject() == right)
+}
+fun equalsChecks3(left: DPoint, right: DPoint) {
+ require(102, left == right.toObject())
+}
+fun equalsChecks4(left: DPoint, right: DPoint) {
+ require(103, left.toObject() == right.toObject())
+}
+fun equalsChecks5(left: DPoint, right: DPoint) {
+ require(104, null == right)
+}
+fun equalsChecks6(left: DPoint, right: DPoint) {
+ require(105, left == null)
+}
+fun equalsChecks7(left: DPoint, right: DPoint) {
+ require(106, null as Any? == right)
+}
+fun equalsChecks8(left: DPoint, right: DPoint) {
+ require(107, left == null as Any?)
+}
+fun equalsChecks9(left: DPoint, right: DPoint) {
+ require(108, null.toDPointOrNull() == right)
+}
+fun equalsChecks10(left: DPoint, right: DPoint) {
+ require(109, left == null.toDPointOrNull())
+}
+fun equalsChecks11(left: DPoint, right: DPoint) {
+ require(110, left.toDPointOrNull() == right)
+}
+fun equalsChecks12(left: DPoint, right: DPoint) {
+ require(111, left == right.toDPointOrNull())
+}
+
+// 1 BIPUSH 100\n {4}DLOAD 0\n {4}DLOAD 2\n {4}DLOAD 4\n {4}DLOAD 6\n {4}INVOKESTATIC .*equals-impl0.*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 101\n {4}DLOAD 0\n {4}DLOAD 2\n {4}.*toObject.*\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*box-impl.*\n {4}INVOKESTATIC .*Intrinsics.areEqual.*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 102\n {4}DLOAD 0\n {4}DLOAD 2\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*toObject.*\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 103\n {4}DLOAD 0\n {4}DLOAD 2\n {4}.*toObject.*\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*toObject.*\n {4}INVOKESTATIC .*Intrinsics.areEqual.*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 104\n {4}ICONST_0\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 105\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 106\n {4}ACONST_NULL\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*box.*\n {4}INVOKESTATIC .*Intrinsics.areEqual.*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 107\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 108\n {4}ACONST_NULL\n {4}.*toDPointOrNull.*\n {4}ASTORE.*\n {4}ALOAD.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl-\d)+)*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 109\n {4}DLOAD 0\n {4}DLOAD 2\n {4}ACONST_NULL\n {4}.*toDPointOrNull.*\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 110\n {4}DLOAD 0\n {4}DLOAD 2\n {4}.*toDPointOrNull.*\n {4}ASTORE.*\n {4}ALOAD.*\n {4}DUP\n {4}IFNONNULL.*(\n {3}([^b\n]|b[^o\n]|bo[^x\n]|box-impl-\d)+)*\n {4}INVOKESTATIC .*require
+// 1 BIPUSH 111\n {4}DLOAD 0\n {4}DLOAD 2\n {4}DLOAD 4\n {4}DLOAD 6\n {4}.*toDPointOrNull.*\n {4}INVOKESTATIC .*equals-impl .*\n {4}INVOKESTATIC .*require
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt
new file mode 100644
index 0000000..dbb658f
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt
@@ -0,0 +1,76 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class A<T : Any>(val x: List<T>)
+
+@JvmInline
+value class B(val x: UInt)
+
+@JvmInline
+value class C(val x: Int, val y: B, val z: String = "3")
+
+@JvmInline
+value class D(val x: C) {
+ constructor(x: Int, y: UInt, z: Int) : this(C(x, B(y), z.toString()))
+
+ init {
+ println(x.x)
+ }
+}
+
+class Regular(private val x: D) {
+ fun privateAccess() {
+ listOf(x.x.x)
+ listOf(x.x)
+ listOf(x)
+ }
+}
+
+fun functionWithoutBoxes(x: D, y: D) {
+ var z: D = x
+ val t: D = D(C(1, B(3U), "4"))
+ z = t
+ require(z == y)
+}
+
+// 2 public static toString-impl\(IILjava/lang/String;\)Ljava/lang/String;
+// 2 INVOKESTATIC C.toString-impl \(IILjava/lang/String;\)Ljava/lang/String;
+// 1 INVOKESTATIC D.toString-impl \(IILjava/lang/String;\)Ljava/lang/String;
+// 2 public static hashCode-impl\(IILjava/lang/String;\)I
+// 2 INVOKESTATIC C.hashCode-impl \(IILjava/lang/String;\)I
+// 1 INVOKESTATIC D.hashCode-impl \(IILjava/lang/String;\)I
+// 2 public static equals-impl\(IILjava/lang/String;Ljava/lang/Object;\)Z
+// 2 public final static equals-impl0\(IILjava/lang/String;IILjava/lang/String;\)Z
+// 1 public final static constructor-impl\(III\)LD;
+// 2 public final static constructor-impl\(IILjava/lang/String;\)V
+// 2 INVOKESTATIC D.constructor-impl \(IILjava/lang/String;\)V
+// 2 INVOKESTATIC C.constructor-impl \(IILjava/lang/String;\)V
+// 0 public final getX\(\)LC;
+// 1 public final synthetic unbox-impl-0-0\(\)I
+// 1 public final synthetic unbox-impl-0-1\(\)I
+// 1 public final synthetic unbox-impl-0-2\(\)Ljava/lang/String;
+// 2 private synthetic <init>\(IILjava/lang/String;\)V
+// 1 public final static synthetic box-impl\(IILjava/lang/String;\)LD;
+// 1 public final static synthetic box-impl\(IILjava/lang/String;\)LC;
+// 1 public final synthetic unbox-impl-0\(\)I
+// 1 public final synthetic unbox-impl-1\(\)I
+// 1 public final synthetic unbox-impl-2\(\)Ljava/lang/String;
+// 1 private final I field-0-0\n
+// 1 private final I field-0-1\n
+// 1 private final Ljava/lang/String; field-0-2\n
+// 0 private final LC; (field.*)x\n
+// 1 private final I x\n
+// 1 private final I field-0\n
+// 1 private final I field-1\n
+// 1 private final Ljava/lang/String; field-2\n
+// 1 INVOKESPECIAL C.<init> \(IILjava/lang/String;\)V
+// 1 INVOKESPECIAL D.<init> \(IILjava/lang/String;\)V
+// 2 INVOKESTATIC D.box-impl \(IILjava/lang/String;\)LD;
+// 2 INVOKESTATIC C.box-impl \(IILjava/lang/String;\)LC;
+// 1 public final static functionWithoutBoxes-GPBa7dw\(IILjava/lang/String;IILjava/lang/String;\)V
+// 0 functionWithoutBoxes.*(\n {3}.*)*(\n {4}(NEW [ABCD]|.*(box|[ABCD]\.<init>|LA;|LB;|LC;|LD;)))
+// 1 privateAccess.*(\n .+)*(\n GETFIELD Regular\.x-0-0 : I)(\n .+)*(\n INVOKEVIRTUAL Regular\.getX-0 \(\)LC;)(\n .+)*(\n INVOKESPECIAL Regular\.getX \(\)LD;)
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/mfvcReassignments.kt b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcReassignments.kt
new file mode 100644
index 0000000..13430de
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcReassignments.kt
@@ -0,0 +1,71 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+class Box(var value: DPoint)
+
+fun supplier(index: Int) {} // to make usage of the argument
+fun supplier(index: Int, x: DPoint) {} // to make usage of the argument
+
+fun reassignVariable(x: DPoint, box: Box) {
+ supplier(100)
+ var p = DPoint(1.0, 2.0) // should not use temporary variables
+ supplier(101, p)
+ p = p // should not use temporary variables
+ supplier(102, p)
+ p = DPoint(3.0, 4.0) // should use tempVars
+ supplier(103, p)
+ p = x // should not use temporary variables
+ supplier(104, p)
+ p = box.value // should use temporary variables
+ supplier(105, p)
+ p = listOf(p)[0] // should use temporary variables
+ supplier(106, p)
+}
+
+fun reassignField(x: DPoint, box: Box) {
+ supplier(107)
+ val p = DPoint(5.0, 6.0)
+ supplier(108, p)
+ var b = Box(p) // should not use temporary variables
+ supplier(109)
+ b.value = b.value // should not use temporary variables
+ supplier(110)
+ b.value = DPoint(7.0, 8.0) // should use tempVars
+ supplier(111)
+ b.value = x // should not use temporary variables
+ supplier(112)
+ b.value = box.value // should not use temporary variables
+ supplier(113)
+ b.value = listOf(p)[0] // should use temporary variables
+ supplier(114)
+}
+
+// 1 100(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}101
+// 0 100(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}101
+// 1 101(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}102
+// 0 101(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}102
+// 1 102(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){4}103
+// 0 102(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){5}103
+// 1 103(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}104
+// 0 103(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}104
+// 1 104(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){4}105
+// 0 104(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){5}105
+// 1 105(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){4}106
+// 0 105(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){5}106
+
+// 1 107(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}108
+// 0 107(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}108
+// 0 108(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){1}109
+// 0 109(\D|\d\D|\d\d\D)*([DA]STORE(\D|\d\D|\d\d\D)*){1}110
+// 1 110(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){2}111
+// 0 110(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){3}111
+// 0 111(\D|\d\D|\d\d\D)*(DSTORE(\D|\d\D|\d\d\D)*){1}112
+// 0 112(\D|\d\D|\d\d\D)*([DA]STORE(\D|\d\D|\d\d\D)*){1}113
+// 1 113(\D|\d\D|\d\d\D)*(ASTORE(\D|\d\D|\d\d\D)*){1}114
+// 0 113(\D|\d\D|\d\d\D)*(ASTORE(\D|\d\D|\d\d\D)*){2}114
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/passingMFVC2Functions.kt b/compiler/testData/codegen/bytecodeText/valueClasses/passingMFVC2Functions.kt
new file mode 100644
index 0000000..1bb0077
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/passingMFVC2Functions.kt
@@ -0,0 +1,49 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+fun acceptBoxed(x: Any?) {}
+fun acceptFlattened(x: DPoint) {}
+fun returnBoxed() = DPoint(3.0, 4.0)
+
+fun testFlattened2Boxed() {
+ acceptBoxed(DPoint(1.0, 2.0))
+}
+
+fun testBoxed2Boxed() {
+ acceptBoxed(returnBoxed())
+}
+
+fun testFlattened2Flattened() {
+ acceptFlattened(DPoint(1.0, 2.0))
+}
+
+fun testBoxed2Flattened() {
+ acceptFlattened(returnBoxed())
+}
+
+fun testIgnoredFlattened() {
+ DPoint(1.0, 2.0)
+ DPoint(1.0, 2.0)
+}
+
+fun testIgnoredBoxed() {
+ returnBoxed()
+}
+
+// 1 testFlattened2Boxed\(\)V(\n {3}.*)*((\n {3}.*box-impl .*)(\n {3}.*)*){1}
+// 0 testFlattened2Boxed\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){2}
+// 0 testBoxed2Boxed\(\)V(\n {3}.*)*((\n {3}.*(box-impl|DSTORE|DLOAD).*)(\n {3}.*)*){1}
+// 0 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1}
+// 1 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*DSTORE.*)(\n {3}.*)*){2}
+// 0 testFlattened2Flattened\(\)V(\n {3}.*)*((\n {3}.*DSTORE.*)(\n {3}.*)*){3}
+// 0 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*box-impl .*)(\n {3}.*)*){1}
+// 1 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*unbox-impl.*)(\n {3}.*)*){2}
+// 0 testBoxed2Flattened\(\)V(\n {3}.*)*((\n {3}.*unbox-impl.*)(\n {3}.*)*){3}
+// 0 testIgnoredFlattened\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1}
+// 0 testIgnoredBoxed\(\)V(\n {3}.*)*((\n {3}.*box-impl.*)(\n {3}.*)*){1}
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/regularClassWithMFVC.kt b/compiler/testData/codegen/bytecodeText/valueClasses/regularClassWithMFVC.kt
new file mode 100644
index 0000000..548ecf7
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/regularClassWithMFVC.kt
@@ -0,0 +1,144 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double) {
+ val opposite: DPoint
+ get() = DPoint(-x, -y)
+}
+
+class DSegment(var p1: DPoint, var p2: DPoint) {
+
+ val center: DPoint
+ get() = DPoint(p1.x / 2 + p2.x / 2, p1.y / 2 + p2.y / 2)
+
+ var notImplemented: DPoint
+ get() = TODO()
+ set(_) = TODO()
+
+ var point1WithBackingFieldAndDefaultGetter: DPoint = p1
+ var point2WithBackingFieldAndDefaultGetter: DPoint = p1
+ get() = field
+ set(value) {
+ field = value
+ require("${2 + 2}" == "4")
+ }
+
+ var pointWithBackingFieldAndCustomGetter: DPoint = p1
+ get() = field.also { require("${2 + 2}" == "4") }
+ set(value) {
+ field = value
+ require("${2 + 2}" == "4")
+ }
+
+ init {
+ p1 = p1
+ }
+}
+
+fun tryGetSegment(segment: DSegment) {
+ segment.p1
+ segment.p1.x
+ segment.p1.y
+ segment.p2
+ segment.p2.x
+ segment.p2.y
+ segment.center
+ segment.center.x
+ segment.center.y
+ segment.notImplemented
+ segment.notImplemented.x
+ segment.notImplemented.y
+ segment.point1WithBackingFieldAndDefaultGetter
+ segment.point1WithBackingFieldAndDefaultGetter.x
+ segment.point1WithBackingFieldAndDefaultGetter.y
+ segment.point2WithBackingFieldAndDefaultGetter
+ segment.point2WithBackingFieldAndDefaultGetter.x
+ segment.point2WithBackingFieldAndDefaultGetter.y
+ segment.pointWithBackingFieldAndCustomGetter
+ segment.pointWithBackingFieldAndCustomGetter.x
+ segment.pointWithBackingFieldAndCustomGetter.y
+}
+
+fun trySetSegment(segment: DSegment) {
+ segment.notImplemented = segment.p1
+ segment.point1WithBackingFieldAndDefaultGetter = segment.p1
+ segment.point2WithBackingFieldAndDefaultGetter = segment.p1
+ segment.pointWithBackingFieldAndCustomGetter = segment.p1
+ segment.p1 = segment.p1
+ segment.p2 = segment.p2
+}
+
+// 0 public final getOpposite\(\)LDPoint;
+// 1 public final static getOpposite-impl\(DD\)LDPoint;
+// 1 private D p1-0
+// 1 private D p1-1
+// 0 private DPoint; p1
+// 1 private D p2-0
+// 1 private D p2-1
+// 0 private DPoint; p2
+// 1 private D point1WithBackingFieldAndDefaultGetter-0
+// 1 private D point1WithBackingFieldAndDefaultGetter-1
+// 0 private DPoint; point1WithBackingFieldAndDefaultGetter
+// 1 private D point2WithBackingFieldAndDefaultGetter-0
+// 1 private D point2WithBackingFieldAndDefaultGetter-1
+// 0 private DPoint; point2WithBackingFieldAndDefaultGetter
+// 1 private D pointWithBackingFieldAndCustomGetter-0
+// 1 private D pointWithBackingFieldAndCustomGetter-1
+// 0 private DPoint; pointWithBackingFieldAndCustomGetter
+// 0 private DPoint; notImplemented
+// 0 private D notImplemented
+// 0 private DPoint; center
+// 0 private D center
+// 1 public <init>\(DDDD\)V
+// 0 public <init>\(DDDD\)V.*(\n {3}.*)*(\n {4}.*box)
+// 1 public final getP1\(\)LDPoint;
+// 1 public final setP1-sUp7gFk\(DD\)V
+// 1 public final getP2\(\)LDPoint;
+// 1 public final setP2-sUp7gFk\(DD\)V
+// 1 public final getCenter\(\)LDPoint;
+// 1 public final getNotImplemented\(\)LDPoint;
+// 1 public final setNotImplemented-sUp7gFk\(DD\)V
+// 1 public final getPoint1WithBackingFieldAndDefaultGetter\(\)LDPoint;
+// 1 public final setPoint1WithBackingFieldAndDefaultGetter-sUp7gFk\(DD\)V
+// 1 public final getPoint2WithBackingFieldAndDefaultGetter\(\)LDPoint;
+// 1 public final setPoint2WithBackingFieldAndDefaultGetter-sUp7gFk\(DD\)V
+// 1 public final getPointWithBackingFieldAndCustomGetter\(\)LDPoint;
+// 1 public final setPointWithBackingFieldAndCustomGetter-sUp7gFk\(DD\)V
+// 1 public final synthetic getP1-0\(\)D
+// 1 public final synthetic getP1-1\(\)D
+// 1 public final synthetic getP2-0\(\)D
+// 1 public final synthetic getP2-1\(\)D
+// 1 public final synthetic getPoint1WithBackingFieldAndDefaultGetter-0\(\)D
+// 1 public final synthetic getPoint1WithBackingFieldAndDefaultGetter-1\(\)D
+// 1 public final synthetic getPoint2WithBackingFieldAndDefaultGetter-0\(\)D
+// 1 public final synthetic getPoint2WithBackingFieldAndDefaultGetter-1\(\)D
+// 0 public final getCenter\$
+// 0 public final getNotImplemented\$
+// 0 public final getPointWithBackingFieldAndCustomGetter\$
+// 0 ^ {2}\b.*get.*\$.*(\n {3}.*)*(\n {4}.*\.box)
+// 1 tryGetSegment\(LDSegment;\)V
+// 0 try[GS]etSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}.*\.box)
+// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){7}
+// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}.*LDPoint;)){8}
+// 0 trySetSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}.*LDPoint;)
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setNotImplemented-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setNotImplemented-sUp7gFk \(DD\)V)){2}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPoint1WithBackingFieldAndDefaultGetter-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPoint1WithBackingFieldAndDefaultGetter-sUp7gFk \(DD\)V)){2}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPoint2WithBackingFieldAndDefaultGetter-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPoint2WithBackingFieldAndDefaultGetter-sUp7gFk \(DD\)V)){2}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPointWithBackingFieldAndCustomGetter-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setPointWithBackingFieldAndCustomGetter-sUp7gFk \(DD\)V)){2}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP1-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP1-sUp7gFk \(DD\)V)){2}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP2-sUp7gFk \(DD\)V)){1}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*(\n {4}INVOKEVIRTUAL DSegment\.setP2-sUp7gFk \(DD\)V)){2}
+// 0 try[GS]etSegment\(LDSegment;\)V.*(\n {3}.*)*(\n {4}INVOKEVIRTUAL DPoint\.get[XY] \(\)D)
+// 1 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){14}
+// 0 tryGetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){15}
+// 1 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){12}
+// 0 trySetSegment\(LDSegment;\)V.*((\n {3}.*)*?(\n {4}INVOKEVIRTUAL DSegment\.get.*-[01] \(\)D)){13}
diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/tryExpressions.kt b/compiler/testData/codegen/bytecodeText/valueClasses/tryExpressions.kt
new file mode 100644
index 0000000..dca322f
--- /dev/null
+++ b/compiler/testData/codegen/bytecodeText/valueClasses/tryExpressions.kt
@@ -0,0 +1,38 @@
+// CHECK_BYTECODE_LISTING
+// WITH_STDLIB
+// TARGET_BACKEND: JVM_IR
+// WORKS_WHEN_VALUE_CLASS
+// LANGUAGE: +ValueClasses
+
+@JvmInline
+value class DPoint(val x: Double, val y: Double)
+
+fun tryExpr() = try {
+ DPoint(0.0, 1.0)
+} catch(_: Throwable) {
+ DPoint(2.0, 3.0)
+} finally {
+ DPoint(4.0, 5.0)
+}
+
+fun tryBody() {
+ try {
+ DPoint(0.0, 1.0)
+ } catch(_: Throwable) {
+ DPoint(2.0, 3.0)
+ } finally {
+ DPoint(4.0, 5.0)
+ }
+ val x: DPoint = try {
+ DPoint(0.0, 1.0)
+ } catch(_: Throwable) {
+ DPoint(2.0, 3.0)
+ } finally {
+ DPoint(4.0, 5.0)
+ }
+}
+
+
+// 1 tryExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 0 tryExpr.*(\n .*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)(\n .*)*(\n .*box-impl.*)
+// 0 tryBody.*(\n .*)*(\n .*box-impl.*)
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java
index 20c86bb..74cd552 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeTextTestGenerated.java
@@ -8,6 +8,7 @@
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TargetBackend;
+import org.jetbrains.kotlin.test.utils.TransformersFunctions;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@@ -5456,6 +5457,16 @@
}
@Nested
+ @TestMetadata("compiler/testData/codegen/bytecodeText/valueClasses")
+ @TestDataPath("$PROJECT_ROOT")
+ public class ValueClasses {
+ @Test
+ public void testAllFilesPresentInValueClasses() throws Exception {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeText/valueClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/testData/codegen/bytecodeText/varargs")
@TestDataPath("$PROJECT_ROOT")
public class Varargs {
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
index 8ac5d4b..947d788 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java
@@ -50172,10 +50172,70 @@
}
@Test
+ @TestMetadata("complex.kt")
+ public void testComplex() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/complex.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("conditionalExpressions.kt")
+ public void testConditionalExpressions() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/conditionalExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
@TestMetadata("equality.kt")
public void testEquality() throws Exception {
runTest("compiler/testData/codegen/box/valueClasses/equality.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
}
+
+ @Test
+ @TestMetadata("forStatement.kt")
+ public void testForStatement() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/forStatement.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcFieldInitializationOrder.kt")
+ public void testMfvcFieldInitializationOrder() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/mfvcFieldInitializationOrder.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides.kt")
+ public void testOverrides() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides_inlineClass.kt")
+ public void testOverrides_inlineClass() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides_inlineClass.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("overrides_typeParameters.kt")
+ public void testOverrides_typeParameters() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/overrides_typeParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("throwingMFVCReassignments.kt")
+ public void testThrowingMFVCReassignments() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/throwingMFVCReassignments.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("tryExpressions.kt")
+ public void testTryExpressions() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/tryExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("visibility.kt")
+ public void testVisibility() throws Exception {
+ runTest("compiler/testData/codegen/box/valueClasses/visibility.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
}
@Nested
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
index b4079be..8050b90 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeTextTestGenerated.java
@@ -8,6 +8,7 @@
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.kotlin.test.TargetBackend;
+import org.jetbrains.kotlin.test.utils.TransformersFunctions;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@@ -5780,6 +5781,58 @@
}
@Nested
+ @TestMetadata("compiler/testData/codegen/bytecodeText/valueClasses")
+ @TestDataPath("$PROJECT_ROOT")
+ public class ValueClasses {
+ @Test
+ public void testAllFilesPresentInValueClasses() throws Exception {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/bytecodeText/valueClasses"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
+ }
+
+ @Test
+ @TestMetadata("conditionalExpressions.kt")
+ public void testConditionalExpressions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/conditionalExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("equalsBoxTest.kt")
+ public void testEqualsBoxTest() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/equalsBoxTest.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcDeclaration.kt")
+ public void testMfvcDeclaration() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("mfvcReassignments.kt")
+ public void testMfvcReassignments() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/mfvcReassignments.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("passingMFVC2Functions.kt")
+ public void testPassingMFVC2Functions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/passingMFVC2Functions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("regularClassWithMFVC.kt")
+ public void testRegularClassWithMFVC() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/regularClassWithMFVC.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+
+ @Test
+ @TestMetadata("tryExpressions.kt")
+ public void testTryExpressions() throws Exception {
+ runTest("compiler/testData/codegen/bytecodeText/valueClasses/tryExpressions.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/testData/codegen/bytecodeText/varargs")
@TestDataPath("$PROJECT_ROOT")
public class Varargs {