Revert "Value Classes: Forbid var properties with value class receivers"
This reverts commit f43899086a.
This commit is contained in:
-6
@@ -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 {
|
||||
|
||||
@@ -347,7 +347,7 @@ public interface Errors {
|
||||
DiagnosticFactory0<PsiElement> NON_PRIVATE_CONSTRUCTOR_IN_SEALED = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> NON_PRIVATE_OR_PROTECTED_CONSTRUCTOR_IN_SEALED = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
// Inline and value classes
|
||||
// Inline classes
|
||||
|
||||
DiagnosticFactory0<PsiElement> INLINE_CLASS_NOT_TOP_LEVEL = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> INLINE_CLASS_NOT_FINAL = DiagnosticFactory0.create(ERROR);
|
||||
@@ -355,7 +355,6 @@ public interface Errors {
|
||||
DiagnosticFactory0<KtElement> INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<KtParameter> INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<KtProperty> PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<PsiElement> RESERVED_VAR_PROPERTY_OF_VALUE_CLASS = DiagnosticFactory0.create(WARNING);
|
||||
DiagnosticFactory0<PsiElement> DELEGATED_PROPERTY_INSIDE_INLINE_CLASS = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory1<KtTypeReference, KotlinType> INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE = DiagnosticFactory1.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION = DiagnosticFactory0.create(ERROR);
|
||||
|
||||
-1
@@ -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");
|
||||
|
||||
@@ -27,8 +27,8 @@ private val DEFAULT_DECLARATION_CHECKERS = listOf(
|
||||
KClassWithIncorrectTypeArgumentChecker,
|
||||
SuspendLimitationsChecker,
|
||||
InlineClassDeclarationChecker,
|
||||
PropertiesWithBackingFieldsInsideInlineClass(),
|
||||
InnerClassInsideInlineClass(),
|
||||
PropertiesWithInlineClassAsReceiver(),
|
||||
AnnotationClassTargetAndRetentionChecker(),
|
||||
ReservedMembersAndConstructsForInlineClass(),
|
||||
ResultClassInReturnTypeChecker(),
|
||||
|
||||
+6
-14
@@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -21,8 +21,8 @@ object VarObject {
|
||||
|
||||
inline class Z(val data: Int) {
|
||||
val testVal <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Val()<!>
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> testVar <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Var()<!>
|
||||
var testVar <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Var()<!>
|
||||
|
||||
val testValBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by ValObject<!>
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> testVarBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by VarObject<!>
|
||||
var testVarBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by VarObject<!>
|
||||
}
|
||||
Vendored
+3
-3
@@ -15,11 +15,11 @@ inline class Foo(val x: Int) : A, B {
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>val a1<!> = 0
|
||||
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> a2: Int
|
||||
var a2: Int
|
||||
get() = 1
|
||||
set(value) {}
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!><!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> a3: Int<!> = 0
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>var a3: Int<!> = 0
|
||||
get() = 1
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -30,5 +30,5 @@ inline class Foo(val x: Int) : A, B {
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>override val badSize: Int<!> = 0
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>lateinit <!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> lateinitProperty: String<!>
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>lateinit var lateinitProperty: String<!>
|
||||
}
|
||||
|
||||
Vendored
-12
@@ -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) {}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
// !LANGUAGE: +InlineClasses, -JvmInlineValueClasses
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
|
||||
inline class IC(val a: Any) {
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> member: Any
|
||||
get() = a
|
||||
set(value) {}
|
||||
}
|
||||
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> IC.extension: Any
|
||||
get() = a
|
||||
set(value) {}
|
||||
-12
@@ -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
|
||||
}
|
||||
+2
-2
@@ -27,8 +27,8 @@ object VarObject {
|
||||
@JvmInline
|
||||
value class Z(val data: Int) {
|
||||
val testVal <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Val()<!>
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> testVar <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Var()<!>
|
||||
var testVar <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by Var()<!>
|
||||
|
||||
val testValBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by ValObject<!>
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> testVarBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by VarObject<!>
|
||||
var testVarBySingleton <!DELEGATED_PROPERTY_INSIDE_INLINE_CLASS!>by VarObject<!>
|
||||
}
|
||||
|
||||
Vendored
+3
-3
@@ -21,11 +21,11 @@ value class Foo(val x: Int) : A, B {
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>val a1<!> = 0
|
||||
|
||||
<!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> a2: Int
|
||||
var a2: Int
|
||||
get() = 1
|
||||
set(value) {}
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!><!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> a3: Int<!> = 0
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>var a3: Int<!> = 0
|
||||
get() = 1
|
||||
set(value) {
|
||||
field = value
|
||||
@@ -36,5 +36,5 @@ value class Foo(val x: Int) : A, B {
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>override val badSize: Int<!> = 0
|
||||
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>lateinit <!RESERVED_VAR_PROPERTY_OF_VALUE_CLASS!>var<!> lateinitProperty: String<!>
|
||||
<!PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS!>lateinit var lateinitProperty: String<!>
|
||||
}
|
||||
|
||||
Generated
-6
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user