[FIR] Reuse `shouldReportAsPerRules1()` in `FirCastOperatorsChecker`

This change better aligns the checker with
the description in KT-57779.

^KT-57779
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirTypeCompatibilityHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirTypeCompatibilityHelpers.kt
index 66e48ad..af3433f 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirTypeCompatibilityHelpers.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirTypeCompatibilityHelpers.kt
@@ -128,3 +128,15 @@
 }
 
 internal fun areRelated(a: TypeInfo, b: TypeInfo, context: CheckerContext): Boolean = !areUnrelated(a, b, context)
+
+/**
+ * See [KT-57779](https://youtrack.jetbrains.com/issue/KT-57779) for more information.
+ */
+internal fun shouldReportAsPerRules1(l: TypeInfo, r: TypeInfo, context: CheckerContext): Boolean {
+    val oneIsFinal = l.isFinal || r.isFinal
+
+    return when {
+        oneIsFinal -> areUnrelated(l, r, context)
+        else -> false
+    }
+}
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCastOperatorsChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCastOperatorsChecker.kt
index bf8b10c..569a3e1 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCastOperatorsChecker.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirCastOperatorsChecker.kt
@@ -53,7 +53,7 @@
                 || l.type.isNullableNothing && !r.type.isNullable
 
         return when {
-            l.type.isNothing && r.type.isNothingOrNullableNothing -> Applicability.APPLICABLE
+            l.type.isNothing -> Applicability.APPLICABLE
             r.type.isNothing -> Applicability.IMPOSSIBLE_CAST
             isNullableNothingWithNotNull -> when (expression.operation) {
                 // (null as? WhatEver) == null
@@ -71,12 +71,11 @@
         useless: Applicability,
         context: CheckerContext,
     ): Applicability {
-        val oneIsFinal = l.isFinal || r.isFinal
         val oneIsNotNull = !l.type.isNullable || !r.type.isNullable
 
         return when {
             isRefinementUseless(context, l.directType.upperBoundIfFlexible(), r.directType, expression) -> useless
-            oneIsNotNull && oneIsFinal && areUnrelated(l, r, context) -> impossible
+            oneIsNotNull && shouldReportAsPerRules1(l, r, context) -> impossible
             isCastErased(l.directType, r.directType, context) -> Applicability.CAST_ERASED
             else -> Applicability.APPLICABLE
         }
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 a649370..edb05a3 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
@@ -105,16 +105,6 @@
         }
     }
 
-    private fun shouldReportAsPerRules1(l: TypeInfo, r: TypeInfo, context: CheckerContext): Boolean {
-        val oneIsFinal = l.isFinal || r.isFinal
-
-        return when {
-            l.type.isNothingOrNullableNothing || r.type.isNothingOrNullableNothing -> false
-            oneIsFinal -> areUnrelated(l, r, context)
-            else -> false
-        }
-    }
-
     /**
      * K1 reports different diagnostics for different
      * cases, and this enum helps to replicate the K1's