diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index ce915811fcb..77527adfc7e 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -1369,6 +1369,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER) { firDiagnostic -> + MultiFieldValueClassPrimaryConstructorDefaultParameterImpl( + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirErrors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS) { firDiagnostic -> SecondaryConstructorWithBodyInsideValueClassImpl( firDiagnostic as KtPsiDiagnostic, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 1a8a7350e4c..a13ae620aeb 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -987,6 +987,10 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = ValueClassCannotBeRecursive::class } + abstract class MultiFieldValueClassPrimaryConstructorDefaultParameter : KtFirDiagnostic() { + override val diagnosticClass get() = MultiFieldValueClassPrimaryConstructorDefaultParameter::class + } + abstract class SecondaryConstructorWithBodyInsideValueClass : KtFirDiagnostic() { override val diagnosticClass get() = SecondaryConstructorWithBodyInsideValueClass::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 2f7409008eb..6b05c8bf18c 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -1183,6 +1183,11 @@ internal class ValueClassCannotBeRecursiveImpl( override val token: KtLifetimeToken, ) : KtFirDiagnostic.ValueClassCannotBeRecursive(), KtAbstractFirDiagnostic +internal class MultiFieldValueClassPrimaryConstructorDefaultParameterImpl( + override val firDiagnostic: KtPsiDiagnostic, + override val token: KtLifetimeToken, +) : KtFirDiagnostic.MultiFieldValueClassPrimaryConstructorDefaultParameter(), KtAbstractFirDiagnostic + internal class SecondaryConstructorWithBodyInsideValueClassImpl( override val firDiagnostic: KtPsiDiagnostic, override val token: KtLifetimeToken, diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index a6018d77a4b..af6238c1104 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -33630,6 +33630,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/valueClasses/constructorsJvmSignaturesClash.kt"); } + @Test + @TestMetadata("defaultParameters.kt") + public void testDefaultParameters() throws Exception { + runTest("compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithUniversal()); + } + @Test @TestMetadata("delegatedPropertyInValueClass.kt") public void testDelegatedPropertyInValueClass() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index fd390f6f32c..00bc8101df0 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -33726,6 +33726,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/valueClasses/constructorsJvmSignaturesClash.kt"); } + @Test + @TestMetadata("defaultParameters.kt") + public void testDefaultParameters() throws Exception { + runTest("compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithUniversal()); + } + @Test @TestMetadata("delegatedPropertyInValueClass.kt") public void testDelegatedPropertyInValueClass() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index cd0269ddfc0..bd77e6cb80e 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -33630,6 +33630,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/valueClasses/constructorsJvmSignaturesClash.kt"); } + @Test + @TestMetadata("defaultParameters.kt") + public void testDefaultParameters() throws Exception { + runTest("compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithUniversal()); + } + @Test @TestMetadata("delegatedPropertyInValueClass.kt") public void testDelegatedPropertyInValueClass() throws Exception { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index bab542ab568..efde962632d 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -426,6 +426,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { val VALUE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION by error() val VALUE_CLASS_CANNOT_EXTEND_CLASSES by error() val VALUE_CLASS_CANNOT_BE_RECURSIVE by error() + val MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER by error() val SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS by error() val RESERVED_MEMBER_INSIDE_VALUE_CLASS by error(PositioningStrategy.DECLARATION_NAME) { parameter("name") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index f73b989dd92..717c05c6735 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -321,6 +321,7 @@ object FirErrors { val VALUE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION by error0() val VALUE_CLASS_CANNOT_EXTEND_CLASSES by error0() val VALUE_CLASS_CANNOT_BE_RECURSIVE by error0() + val MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER by error0() val SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS by error0() val RESERVED_MEMBER_INSIDE_VALUE_CLASS by error1(SourceElementPositioningStrategies.DECLARATION_NAME) val TYPE_ARGUMENT_ON_TYPED_VALUE_CLASS_EQUALS by error0() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt index 4cbc6ab6e79..868f7fa3115 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonDeclarationCheckers.kt @@ -109,7 +109,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() { FirPrimaryConstructorSuperTypeChecker, FirFunInterfaceDeclarationChecker, FirNestedClassChecker, - FirInlineClassDeclarationChecker, + FirValueClassDeclarationChecker, FirOuterClassArgumentsRequiredChecker, FirPropertyInitializationChecker, ) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirValueClassDeclarationChecker.kt similarity index 96% rename from compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt rename to compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirValueClassDeclarationChecker.kt index c23efe86e6e..927cee9c129 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineClassDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirValueClassDeclarationChecker.kt @@ -32,7 +32,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds -object FirInlineClassDeclarationChecker : FirRegularClassChecker() { +object FirValueClassDeclarationChecker : FirRegularClassChecker() { private val boxAndUnboxNames = setOf("box", "unbox") private val equalsAndHashCodeNames = setOf("equals", "hashCode") @@ -203,6 +203,15 @@ object FirInlineClassDeclarationChecker : FirRegularClassChecker() { context ) } + + declaration.multiFieldValueClassRepresentation != null && primaryConstructorParameter.defaultValue != null -> { + // todo fix when inline arguments are supported + reporter.reportOn( + primaryConstructorParameter.defaultValue!!.source, + FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER, + context + ) + } } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index c692b590088..c111d036aae 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -309,6 +309,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_ARGUMENTS_APPLICABLE_FOR_CONTEXT_RECEIVER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_PARAMETERS +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NAMED_ARGUMENTS_NOT_ALLOWED @@ -1271,6 +1272,10 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { map.put(VALUE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION, "Value class cannot implement an interface by delegation") map.put(VALUE_CLASS_CANNOT_EXTEND_CLASSES, "Value class cannot extend classes") map.put(VALUE_CLASS_CANNOT_BE_RECURSIVE, "Value class cannot be recursive") + map.put( + MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER, + "Default parameters are not supported in the primary constructor of a multi-field value class" + ) map.put( INVALID_DEFAULT_FUNCTIONAL_PARAMETER_FOR_INLINE, "Invalid default value for inline parameter: ''{0}''. Only lambdas, anonymous functions, and callable references are supported", diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index ff0eb1d5b2f..ae1d8d61076 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -420,6 +420,7 @@ public interface Errors { DiagnosticFactory0 VALUE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 VALUE_CLASS_CANNOT_EXTEND_CLASSES = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 VALUE_CLASS_CANNOT_BE_RECURSIVE = DiagnosticFactory0.create(ERROR); + DiagnosticFactory0 MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS = DiagnosticFactory0.create(ERROR); DiagnosticFactory1 RESERVED_MEMBER_INSIDE_VALUE_CLASS = DiagnosticFactory1.create(ERROR); DiagnosticFactory0 TYPE_ARGUMENT_ON_TYPED_VALUE_CLASS_EQUALS = DiagnosticFactory0.create(ERROR); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 3d02a6bd8ce..602d40adcbd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -795,6 +795,7 @@ public class DefaultErrorMessages { MAP.put(VALUE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION, "Value class cannot implement an interface by delegation if expression is not a parameter"); MAP.put(VALUE_CLASS_CANNOT_EXTEND_CLASSES, "Value class cannot extend classes"); MAP.put(VALUE_CLASS_CANNOT_BE_RECURSIVE, "Value class cannot be recursive"); + MAP.put(MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER, "Default parameters are not supported in the primary constructor of a multi-field value class"); MAP.put(SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS, "Secondary constructors with bodies are reserved for for future releases"); MAP.put(RESERVED_MEMBER_INSIDE_VALUE_CLASS, "Member with the name ''{0}'' is reserved for future releases", STRING); MAP.put(TYPE_ARGUMENT_ON_TYPED_VALUE_CLASS_EQUALS, "Type arguments for typed value class equals must be only star projections"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt index 52b26d8d9b9..657936f1660 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt @@ -26,11 +26,11 @@ private val DEFAULT_DECLARATION_CHECKERS = listOf( DelegationChecker(), KClassWithIncorrectTypeArgumentChecker, SuspendLimitationsChecker, - InlineClassDeclarationChecker, - PropertiesWithBackingFieldsInsideInlineClass(), - InnerClassInsideInlineClass(), + ValueClassDeclarationChecker, + PropertiesWithBackingFieldsInsideValueClass(), + InnerClassInsideValueClass(), AnnotationClassTargetAndRetentionChecker(), - ReservedMembersAndConstructsForInlineClass(), + ReservedMembersAndConstructsForValueClass(), ResultClassInReturnTypeChecker(), LocalVariableTypeParametersChecker(), ExplicitApiDeclarationChecker(), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ValueClassDeclarationChecker.kt similarity index 96% rename from compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt rename to compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ValueClassDeclarationChecker.kt index 2d98866489d..4ead1103089 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ValueClassDeclarationChecker.kt @@ -127,6 +127,11 @@ object ValueClassDeclarationChecker : DeclarationChecker { baseParametersOk = false continue } + + if (descriptor.isMultiFieldValueClass() && baseParameter.defaultValue != null) { + // todo fix when inline arguments are supported + trace.report(Errors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER.on(baseParameter.defaultValue!!)) + } } } if (!baseParametersOk) { @@ -203,7 +208,7 @@ object ValueClassDeclarationChecker : DeclarationChecker { } } -class PropertiesWithBackingFieldsInsideInlineClass : DeclarationChecker { +class PropertiesWithBackingFieldsInsideValueClass : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (declaration !is KtProperty) return if (descriptor !is PropertyDescriptor) return @@ -220,7 +225,7 @@ class PropertiesWithBackingFieldsInsideInlineClass : DeclarationChecker { } } -class InnerClassInsideInlineClass : DeclarationChecker { +class InnerClassInsideValueClass : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (declaration !is KtClass) return if (descriptor !is ClassDescriptor) return @@ -232,7 +237,7 @@ class InnerClassInsideInlineClass : DeclarationChecker { } } -class ReservedMembersAndConstructsForInlineClass : DeclarationChecker { +class ReservedMembersAndConstructsForValueClass : DeclarationChecker { companion object { private val boxAndUnboxNames = setOf("box", "unbox") diff --git a/compiler/testData/codegen/box/valueClasses/complex.kt b/compiler/testData/codegen/box/valueClasses/complex.kt index be57af478d4..f838bedc18a 100644 --- a/compiler/testData/codegen/box/valueClasses/complex.kt +++ b/compiler/testData/codegen/box/valueClasses/complex.kt @@ -19,7 +19,7 @@ value class B(val x: UInt) { } @JvmInline -value class C(val x: Int, val y: B, val z: String = "3") +value class C(val x: Int, val y: B, val z: String) @JvmInline value class D(val x: C) { diff --git a/compiler/testData/codegen/box/valueClasses/defaultParameters.txt b/compiler/testData/codegen/box/valueClasses/defaultParameters.txt index e61eaeaf985..0b7ac7980ef 100644 --- a/compiler/testData/codegen/box/valueClasses/defaultParameters.txt +++ b/compiler/testData/codegen/box/valueClasses/defaultParameters.txt @@ -2,8 +2,8 @@ @kotlin.Metadata public final class DPoint { // source: 'defaultParameters.kt' - private final field x: double - private final field y: double + private final field field-0: double + private final field field-1: double private synthetic method (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 @@ -12,25 +12,23 @@ public final class DPoint { public final static method equals-sUp7gFk(p0: double, p1: double, p2: double, p3: double): boolean public synthetic static method f1-lIoT8es$default(p0: double, p1: double, p2: int, p3: int, p4: double, p5: double, p6: int, p7: java.lang.Object): java.util.List public final static @org.jetbrains.annotations.NotNull method f1-lIoT8es(p0: double, p1: double, p2: int, p3: int, p4: double, p5: double): java.util.List - public final method getX(): double - public final method getY(): 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-x(): double - public synthetic final method unbox-impl-y(): double + 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: 'defaultParameters.kt' - private final field n: int - private final field p1-x: double - private final field p1-y: double - private final field p2-x: double - private final field p2-y: double + 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 final field field-2: int private synthetic method (p0: double, p1: double, p2: double, p3: double, p4: int): void public synthetic final static method box-impl(p0: double, p1: double, p2: double, p3: double, p4: int): DSegment public final static method constructor-impl(p0: double, p1: double, p2: double, p3: double, p4: int): void @@ -39,20 +37,17 @@ public final class DSegment { public final static method equals-sUp7gFk(p0: double, p1: double, p2: double, p3: double, p4: int, p5: double, p6: double, p7: double, p8: double, p9: int): boolean public synthetic static method f2-lIoT8es$default(p0: double, p1: double, p2: double, p3: double, p4: int, p5: int, p6: int, p7: double, p8: double, p9: int, p10: java.lang.Object): java.util.List public final static @org.jetbrains.annotations.NotNull method f2-lIoT8es(p0: double, p1: double, p2: double, p3: double, p4: int, p5: int, p6: int, p7: double, p8: double): java.util.List - public final method getN(): int - public final @org.jetbrains.annotations.NotNull method getP1(): DPoint - public final @org.jetbrains.annotations.NotNull method getP2(): DPoint public method hashCode(): int public static method hashCode-impl(p0: double, p1: double, p2: double, p3: double, p4: int): int public @org.jetbrains.annotations.NotNull method toString(): java.lang.String public static method toString-impl(p0: double, p1: double, p2: double, p3: double, p4: int): java.lang.String - public synthetic final method unbox-impl-n(): int - public synthetic final method unbox-impl-p1(): DPoint - public synthetic final method unbox-impl-p1-x(): double - public synthetic final method unbox-impl-p1-y(): double - public synthetic final method unbox-impl-p2(): DPoint - public synthetic final method unbox-impl-p2-x(): double - public synthetic final method unbox-impl-p2-y(): double + 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 + public synthetic final method unbox-impl-2(): int } @kotlin.Metadata @@ -70,11 +65,11 @@ public final class DefaultParametersKt { public final class Wrapper { // source: 'defaultParameters.kt' private final field n: int - private final field segment-n: int - private final field segment-p1-x: double - private final field segment-p1-y: double - private final field segment-p2-x: double - private final field segment-p2-y: double + private final field segment-0-0: double + private final field segment-0-1: double + private final field segment-1-0: double + private final field segment-1-1: double + private final field segment-2: int public method (): void public method (p0: double, p1: double, p2: double, p3: double, p4: int, p5: int): void public synthetic method (p0: double, p1: double, p2: double, p3: double, p4: int, p5: int, p6: int, p7: kotlin.jvm.internal.DefaultConstructorMarker): void @@ -87,13 +82,13 @@ public final class Wrapper { public final @org.jetbrains.annotations.NotNull method f3-lIoT8es(p0: int, p1: int, p2: double, p3: double): java.util.List public final method getN(): int public final @org.jetbrains.annotations.NotNull method getSegment(): DSegment - public synthetic final method getSegment-n(): int - public synthetic final method getSegment-p1(): DPoint - public synthetic final method getSegment-p1-x(): double - public synthetic final method getSegment-p1-y(): double - public synthetic final method getSegment-p2(): DPoint - public synthetic final method getSegment-p2-x(): double - public synthetic final method getSegment-p2-y(): double + public synthetic final method getSegment-0(): DPoint + public synthetic final method getSegment-0-0(): double + public synthetic final method getSegment-0-1(): double + public synthetic final method getSegment-1(): DPoint + public synthetic final method getSegment-1-0(): double + public synthetic final method getSegment-1-1(): double + public synthetic final method getSegment-2(): int public method hashCode(): int public @org.jetbrains.annotations.NotNull method toString(): java.lang.String } diff --git a/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt index 129a19b09d5..3204b213690 100644 --- a/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt +++ b/compiler/testData/codegen/bytecodeText/valueClasses/mfvcDeclaration.kt @@ -12,7 +12,7 @@ value class A(val x: List) value class B(val x: UInt) @JvmInline -value class C(val x: Int, val y: B, val z: String = "3") +value class C(val x: Int, val y: B, val z: String) @JvmInline value class D(val x: C) { diff --git a/compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt b/compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt new file mode 100644 index 00000000000..df5dc136ea8 --- /dev/null +++ b/compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt @@ -0,0 +1,10 @@ +// !LANGUAGE: +ValueClasses +// WITH_STDLIB +// SKIP_TXT +// WORKS_WHEN_VALUE_CLASS +// FIR_IDENTICAL + +@JvmInline +value class DPoint(val x: Double, val y: Double = Double.NaN) { + fun f(otherDPoint: DPoint = DPoint(1.0, 2.0)) = Unit +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 127bfed8c3d..92b8c600ea3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -33726,6 +33726,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/valueClasses/constructorsJvmSignaturesClash.kt"); } + @Test + @TestMetadata("defaultParameters.kt") + public void testDefaultParameters() throws Exception { + runTest("compiler/testData/diagnostics/tests/valueClasses/defaultParameters.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithUniversal()); + } + @Test @TestMetadata("delegatedPropertyInValueClass.kt") public void testDelegatedPropertyInValueClass() throws Exception {