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 b650082203f..514b5a25154 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 @@ -15095,12 +15095,6 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/inlineClasses/unsignedLiteralsWithoutArtifactOnClasspath.kt"); } - @Test - @TestMetadata("varPropertyWithInlineClassReceiver.kt") - public void testVarPropertyWithInlineClassReceiver() throws Exception { - runTest("compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.kt"); - } - @Test @TestMetadata("varargsOnParametersOfInlineClassType.kt") public void testVarargsOnParametersOfInlineClassType() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 1bfd1e5bc75..9c7852f603e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -347,7 +347,7 @@ public interface Errors { DiagnosticFactory0 NON_PRIVATE_CONSTRUCTOR_IN_SEALED = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 NON_PRIVATE_OR_PROTECTED_CONSTRUCTOR_IN_SEALED = DiagnosticFactory0.create(ERROR); - // Inline and value classes + // Inline classes DiagnosticFactory0 INLINE_CLASS_NOT_TOP_LEVEL = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 INLINE_CLASS_NOT_FINAL = DiagnosticFactory0.create(ERROR); @@ -355,7 +355,6 @@ public interface Errors { DiagnosticFactory0 INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE); - DiagnosticFactory0 RESERVED_VAR_PROPERTY_OF_VALUE_CLASS = DiagnosticFactory0.create(WARNING); DiagnosticFactory0 DELEGATED_PROPERTY_INSIDE_INLINE_CLASS = DiagnosticFactory0.create(ERROR); DiagnosticFactory1 INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE = DiagnosticFactory1.create(ERROR); DiagnosticFactory0 INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION = 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 39063223c2f..2978c043e47 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -714,7 +714,6 @@ public class DefaultErrorMessages { MAP.put(INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE, "Inline class must have exactly one primary constructor parameter"); MAP.put(INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER, "Value class primary constructor must have only final read-only (val) property parameter"); MAP.put(PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS, "Inline class cannot have properties with backing fields"); - MAP.put(RESERVED_VAR_PROPERTY_OF_VALUE_CLASS, "'var' properties with value class receivers are reserved for future use"); MAP.put(DELEGATED_PROPERTY_INSIDE_INLINE_CLASS, "Inline class cannot have delegated properties"); MAP.put(INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE, "Inline class cannot have value parameter of type ''{0}''", RENDER_TYPE); MAP.put(INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION, "Inline class cannot implement an interface by delegation"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt index 746e376885f..169921f5074 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/PlatformConfiguratorBase.kt @@ -27,8 +27,8 @@ private val DEFAULT_DECLARATION_CHECKERS = listOf( KClassWithIncorrectTypeArgumentChecker, SuspendLimitationsChecker, InlineClassDeclarationChecker, + PropertiesWithBackingFieldsInsideInlineClass(), InnerClassInsideInlineClass(), - PropertiesWithInlineClassAsReceiver(), AnnotationClassTargetAndRetentionChecker(), ReservedMembersAndConstructsForInlineClass(), ResultClassInReturnTypeChecker(), diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt index 0e57fd52fed..3d99fd989df 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/InlineClassDeclarationChecker.kt @@ -138,27 +138,19 @@ object InlineClassDeclarationChecker : DeclarationChecker { } } -class PropertiesWithInlineClassAsReceiver : DeclarationChecker { +class PropertiesWithBackingFieldsInsideInlineClass : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (declaration !is KtProperty) return if (descriptor !is PropertyDescriptor) return - if (descriptor.containingDeclaration.isInlineClass()) { - if (context.trace.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor) == true) { - context.trace.report(Errors.PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS.on(declaration)) - } + if (!descriptor.containingDeclaration.isInlineClass()) return - declaration.delegate?.let { - context.trace.report(Errors.DELEGATED_PROPERTY_INSIDE_INLINE_CLASS.on(it)) - } + if (context.trace.get(BindingContext.BACKING_FIELD_REQUIRED, descriptor) == true) { + context.trace.report(Errors.PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS.on(declaration)) } - if (!descriptor.isVar) return - - if (descriptor.containingDeclaration.isInlineClass() || - descriptor.extensionReceiverParameter?.type?.isInlineClassType() == true - ) { - context.trace.report(Errors.RESERVED_VAR_PROPERTY_OF_VALUE_CLASS.on(declaration.valOrVarKeyword)) + declaration.delegate?.let { + context.trace.report(Errors.DELEGATED_PROPERTY_INSIDE_INLINE_CLASS.on(it)) } } } diff --git a/compiler/testData/diagnostics/tests/inlineClasses/delegatedPropertyInInlineClass.kt b/compiler/testData/diagnostics/tests/inlineClasses/delegatedPropertyInInlineClass.kt index 5827fada5b3..c677dc5ebd8 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/delegatedPropertyInInlineClass.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/delegatedPropertyInInlineClass.kt @@ -21,8 +21,8 @@ object VarObject { inline class Z(val data: Int) { val testVal by Val() - var testVar by Var() + var testVar by Var() val testValBySingleton by ValObject - var testVarBySingleton by VarObject + var testVarBySingleton by VarObject } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inlineClasses/propertiesWithBackingFieldsInsideInlineClass.kt b/compiler/testData/diagnostics/tests/inlineClasses/propertiesWithBackingFieldsInsideInlineClass.kt index 6505df52127..9e65ca6ffad 100644 --- a/compiler/testData/diagnostics/tests/inlineClasses/propertiesWithBackingFieldsInsideInlineClass.kt +++ b/compiler/testData/diagnostics/tests/inlineClasses/propertiesWithBackingFieldsInsideInlineClass.kt @@ -15,11 +15,11 @@ inline class Foo(val x: Int) : A, B { val a1 = 0 - var a2: Int + var a2: Int get() = 1 set(value) {} - var a3: Int = 0 + var a3: Int = 0 get() = 1 set(value) { field = value @@ -30,5 +30,5 @@ inline class Foo(val x: Int) : A, B { override val badSize: Int = 0 - lateinit var lateinitProperty: String + lateinit var lateinitProperty: String } diff --git a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.fir.kt b/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.fir.kt deleted file mode 100644 index ded5b1d320e..00000000000 --- a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.fir.kt +++ /dev/null @@ -1,12 +0,0 @@ -// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses -// !DIAGNOSTICS: -UNUSED_PARAMETER - -inline class IC(val a: Any) { - var member: Any - get() = a - set(value) {} -} - -var IC.extension: Any - get() = a - set(value) {} diff --git a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.kt b/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.kt deleted file mode 100644 index 9cd4f4fdb2e..00000000000 --- a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.kt +++ /dev/null @@ -1,12 +0,0 @@ -// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses -// !DIAGNOSTICS: -UNUSED_PARAMETER - -inline class IC(val a: Any) { - var member: Any - get() = a - set(value) {} -} - -var IC.extension: Any - get() = a - set(value) {} diff --git a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.txt b/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.txt deleted file mode 100644 index 65ffcfbb852..00000000000 --- a/compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.txt +++ /dev/null @@ -1,12 +0,0 @@ -package - -public var IC.extension: kotlin.Any - -public final inline class IC { - public constructor IC(/*0*/ a: kotlin.Any) - public final val a: kotlin.Any - public final var member: kotlin.Any - public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String -} diff --git a/compiler/testData/diagnostics/tests/valueClasses/delegatedPropertyInValueClass.kt b/compiler/testData/diagnostics/tests/valueClasses/delegatedPropertyInValueClass.kt index 7c82d21a155..b4ba9da6d1c 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/delegatedPropertyInValueClass.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/delegatedPropertyInValueClass.kt @@ -27,8 +27,8 @@ object VarObject { @JvmInline value class Z(val data: Int) { val testVal by Val() - var testVar by Var() + var testVar by Var() val testValBySingleton by ValObject - var testVarBySingleton by VarObject + var testVarBySingleton by VarObject } diff --git a/compiler/testData/diagnostics/tests/valueClasses/propertiesWithBackingFieldsInsideValueClass.kt b/compiler/testData/diagnostics/tests/valueClasses/propertiesWithBackingFieldsInsideValueClass.kt index 3c9ba609ad5..42d863b1a69 100644 --- a/compiler/testData/diagnostics/tests/valueClasses/propertiesWithBackingFieldsInsideValueClass.kt +++ b/compiler/testData/diagnostics/tests/valueClasses/propertiesWithBackingFieldsInsideValueClass.kt @@ -21,11 +21,11 @@ value class Foo(val x: Int) : A, B { val a1 = 0 - var a2: Int + var a2: Int get() = 1 set(value) {} - var a3: Int = 0 + var a3: Int = 0 get() = 1 set(value) { field = value @@ -36,5 +36,5 @@ value class Foo(val x: Int) : A, B { override val badSize: Int = 0 - lateinit var lateinitProperty: String + lateinit var lateinitProperty: String } 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 833867abbfa..d8d2729b2a3 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 @@ -15101,12 +15101,6 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inlineClasses/unsignedLiteralsWithoutArtifactOnClasspath.kt"); } - @Test - @TestMetadata("varPropertyWithInlineClassReceiver.kt") - public void testVarPropertyWithInlineClassReceiver() throws Exception { - runTest("compiler/testData/diagnostics/tests/inlineClasses/varPropertyWithInlineClassReceiver.kt"); - } - @Test @TestMetadata("varargsOnParametersOfInlineClassType.kt") public void testVarargsOnParametersOfInlineClassType() throws Exception {