[IR] Support user-defined equals for MFVC

Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com>

#KT-1179
This commit is contained in:
Evgeniy.Zhelenskiy
2022-10-14 07:17:03 +02:00
committed by Space Team
parent 51f9f31a0a
commit 9f01ccc304
75 changed files with 1686 additions and 315 deletions
@@ -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,
@@ -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
}
@@ -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,
@@ -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