[IR] Support user-defined equals for MFVC
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
This commit is contained in:
committed by
Space Team
parent
51f9f31a0a
commit
9f01ccc304
+10
-4
@@ -1369,6 +1369,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS) { firDiagnostic ->
|
||||
SecondaryConstructorWithBodyInsideValueClassImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.RESERVED_MEMBER_INSIDE_VALUE_CLASS) { firDiagnostic ->
|
||||
ReservedMemberInsideValueClassImpl(
|
||||
firDiagnostic.a,
|
||||
@@ -1376,8 +1382,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_VALUE_CLASS) { firDiagnostic ->
|
||||
SecondaryConstructorWithBodyInsideValueClassImpl(
|
||||
add(FirErrors.TYPE_ARGUMENT_ON_TYPED_VALUE_CLASS_EQUALS) { firDiagnostic ->
|
||||
TypeArgumentOnTypedValueClassEqualsImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
@@ -3907,8 +3913,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.INEFFICIENT_EQUALS_OVERRIDING_IN_INLINE_CLASS) { firDiagnostic ->
|
||||
InefficientEqualsOverridingInInlineClassImpl(
|
||||
add(FirErrors.INEFFICIENT_EQUALS_OVERRIDING_IN_VALUE_CLASS) { firDiagnostic ->
|
||||
InefficientEqualsOverridingInValueClassImpl(
|
||||
firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a),
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
|
||||
+8
-4
@@ -987,13 +987,17 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = ValueClassCannotBeRecursive::class
|
||||
}
|
||||
|
||||
abstract class SecondaryConstructorWithBodyInsideValueClass : KtFirDiagnostic<PsiElement>() {
|
||||
override val diagnosticClass get() = SecondaryConstructorWithBodyInsideValueClass::class
|
||||
}
|
||||
|
||||
abstract class ReservedMemberInsideValueClass : KtFirDiagnostic<KtFunction>() {
|
||||
override val diagnosticClass get() = ReservedMemberInsideValueClass::class
|
||||
abstract val name: String
|
||||
}
|
||||
|
||||
abstract class SecondaryConstructorWithBodyInsideValueClass : KtFirDiagnostic<PsiElement>() {
|
||||
override val diagnosticClass get() = SecondaryConstructorWithBodyInsideValueClass::class
|
||||
abstract class TypeArgumentOnTypedValueClassEquals : KtFirDiagnostic<KtTypeReference>() {
|
||||
override val diagnosticClass get() = TypeArgumentOnTypedValueClassEquals::class
|
||||
}
|
||||
|
||||
abstract class InnerClassInsideValueClass : KtFirDiagnostic<KtDeclaration>() {
|
||||
@@ -2725,8 +2729,8 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = RedundantInlineSuspendFunctionType::class
|
||||
}
|
||||
|
||||
abstract class InefficientEqualsOverridingInInlineClass : KtFirDiagnostic<KtNamedFunction>() {
|
||||
override val diagnosticClass get() = InefficientEqualsOverridingInInlineClass::class
|
||||
abstract class InefficientEqualsOverridingInValueClass : KtFirDiagnostic<KtNamedFunction>() {
|
||||
override val diagnosticClass get() = InefficientEqualsOverridingInValueClass::class
|
||||
abstract val type: KtType
|
||||
}
|
||||
|
||||
|
||||
+9
-4
@@ -1183,16 +1183,21 @@ internal class ValueClassCannotBeRecursiveImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.ValueClassCannotBeRecursive(), KtAbstractFirDiagnostic<KtTypeReference>
|
||||
|
||||
internal class SecondaryConstructorWithBodyInsideValueClassImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.SecondaryConstructorWithBodyInsideValueClass(), KtAbstractFirDiagnostic<PsiElement>
|
||||
|
||||
internal class ReservedMemberInsideValueClassImpl(
|
||||
override val name: String,
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.ReservedMemberInsideValueClass(), KtAbstractFirDiagnostic<KtFunction>
|
||||
|
||||
internal class SecondaryConstructorWithBodyInsideValueClassImpl(
|
||||
internal class TypeArgumentOnTypedValueClassEqualsImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.SecondaryConstructorWithBodyInsideValueClass(), KtAbstractFirDiagnostic<PsiElement>
|
||||
) : KtFirDiagnostic.TypeArgumentOnTypedValueClassEquals(), KtAbstractFirDiagnostic<KtTypeReference>
|
||||
|
||||
internal class InnerClassInsideValueClassImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
@@ -3287,11 +3292,11 @@ internal class RedundantInlineSuspendFunctionTypeImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.RedundantInlineSuspendFunctionType(), KtAbstractFirDiagnostic<KtElement>
|
||||
|
||||
internal class InefficientEqualsOverridingInInlineClassImpl(
|
||||
internal class InefficientEqualsOverridingInValueClassImpl(
|
||||
override val type: KtType,
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.InefficientEqualsOverridingInInlineClass(), KtAbstractFirDiagnostic<KtNamedFunction>
|
||||
) : KtFirDiagnostic.InefficientEqualsOverridingInValueClass(), KtAbstractFirDiagnostic<KtNamedFunction>
|
||||
|
||||
internal class CannotAllUnderImportFromSingletonImpl(
|
||||
override val objectName: Name,
|
||||
|
||||
+21
-3
@@ -18110,6 +18110,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/typedEqualsOperatorDeclarationCheck.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("typedEqualsOperatorModifierInInlineClass.kt")
|
||||
public void testTypedEqualsOperatorModifierInInlineClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inlineClasses/typedEqualsOperatorModifierInInlineClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unsignedLiteralsWithoutArtifactOnClasspath.kt")
|
||||
public void testUnsignedLiteralsWithoutArtifactOnClasspath() throws Exception {
|
||||
@@ -33648,6 +33654,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/valueClasses/identityComparisonWithValueClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inefficientEqualsOverridingInMfvc.kt")
|
||||
public void testInefficientEqualsOverridingInMfvc() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/valueClasses/inefficientEqualsOverridingInMfvc.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("jvmInlineApplicability.kt")
|
||||
public void testJvmInlineApplicability() throws Exception {
|
||||
@@ -33691,9 +33703,15 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("reservedMembersAndConstructsInsideValueClass.kt")
|
||||
public void testReservedMembersAndConstructsInsideValueClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideValueClass.kt");
|
||||
@TestMetadata("reservedMembersAndConstructsInsideMfvc.kt")
|
||||
public void testReservedMembersAndConstructsInsideMfvc() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/valueClasses/reservedMembersAndConstructsInsideMfvc.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("typedEqualsOperatorModifierInMfvc.kt")
|
||||
public void testTypedEqualsOperatorModifierInMfvc() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/valueClasses/typedEqualsOperatorModifierInMfvc.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user