From 3058f2eaff52c505b14db63ae8c757964e2f7e40 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Wed, 18 Oct 2023 17:55:01 +0300 Subject: [PATCH] [FIR] Relax `incompatibleEnumComparisonWithTypeParameters` --- .../checkers/expression/FirEqualityCompatibilityChecker.kt | 2 +- .../testsWithStdLib/equalityCompatibilityCommonCases.fir.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt index c5e52502fc8..f0f1fbbd277 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirEqualityCompatibilityChecker.kt @@ -53,7 +53,7 @@ object FirEqualityCompatibilityChecker : FirEqualityOperatorCallChecker() { // sees a non-empty intersection and none of the // types is an enum, but intersections in K1 // work differently from intersections in K2. - val isCaseMissedByK1 = it != Applicability.INAPPLICABLE_AS_ENUMS + val isCaseMissedByK1 = (l.originalTypeInfo.isEnumClass == r.originalTypeInfo.isEnumClass) && l.originalTypeInfo.isLiterallyTypeParameter && r.originalTypeInfo.isLiterallyTypeParameter val replicateK1Behavior = !context.languageVersionSettings.supportsFeature(LanguageFeature.ReportErrorsForComparisonOperators) diff --git a/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt index d3fdbbdcf87..d1bcecee0e2 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/equalityCompatibilityCommonCases.fir.kt @@ -100,7 +100,7 @@ fun incompatibleIdentityRegardlessNullabilityWithValueClassesSmartCast(c: Any?, enum class F fun incompatibleEnumComparisonWithTypeParameters(e: T, f: K) { - e == f + e == f } interface A