fixup! [FIR] Reuse the CS when calculating bare types
Turn `FirUnsafeDowncastWrtVarianceTypeChecker` into a type operator only
checker. This is an optimization so that we don't check attributes of
all types in the world.
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
index 63da6eb..8a7db2a 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonExpressionCheckers.kt
@@ -7,6 +7,7 @@
import org.jetbrains.kotlin.fir.analysis.checkers.expression.*
import org.jetbrains.kotlin.fir.analysis.checkers.syntax.*
+import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirUnsafeDowncastWrtVarianceChecker
object CommonExpressionCheckers : ExpressionCheckers() {
override val annotationCallCheckers: Set<FirAnnotationCallChecker>
@@ -167,6 +168,7 @@
override val typeOperatorCallCheckers: Set<FirTypeOperatorCallChecker>
get() = setOf(
+ FirUnsafeDowncastWrtVarianceChecker,
FirCastOperatorsChecker,
)
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt
index 3436502..1197ab37 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/CommonTypeCheckers.kt
@@ -25,7 +25,6 @@
FirContextReceiversTypeChecker,
FirContextReceiversDeprecatedTypeChecker,
FirKotlinActualAnnotationHasNoEffectInKotlinTypeChecker,
- FirUnsafeDowncastWrtVarianceTypeChecker,
FirProjectionRelationChecker,
FirCommonAtomicReferenceToPrimitiveTypeChecker,
FirArrayOfNothingTypeChecker,
diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirUnsafeDowncastWrtVarianceTypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt
similarity index 62%
rename from compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirUnsafeDowncastWrtVarianceTypeChecker.kt
rename to compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt
index 5df3b27..e33c17c 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/type/FirUnsafeDowncastWrtVarianceTypeChecker.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUnsafeDowncastWrtVarianceChecker.kt
@@ -3,20 +3,27 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
-package org.jetbrains.kotlin.fir.analysis.checkers.type
+package org.jetbrains.kotlin.fir.analysis.checkers.expression
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.diagnostics.reportOn
import org.jetbrains.kotlin.fir.analysis.checkers.MppCheckerKind
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
-import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
+import org.jetbrains.kotlin.fir.expressions.FirTypeOperatorCall
+import org.jetbrains.kotlin.fir.types.coneType
import org.jetbrains.kotlin.fir.types.unsafeDowncastWrtVariance
-object FirUnsafeDowncastWrtVarianceTypeChecker : FirResolvedTypeRefChecker(MppCheckerKind.Common) {
- override fun check(typeRef: FirResolvedTypeRef, context: CheckerContext, reporter: DiagnosticReporter) {
+object FirUnsafeDowncastWrtVarianceChecker : FirTypeOperatorCallChecker(MppCheckerKind.Common) {
+ override fun check(
+ expression: FirTypeOperatorCall,
+ context: CheckerContext,
+ reporter: DiagnosticReporter,
+ ) {
+ val typeRef = expression.conversionTypeRef
+
typeRef.coneType.attributes.unsafeDowncastWrtVariance?.let {
reporter.reportOn(typeRef.source, FirErrors.UNSAFE_DOWNCAST_WRT_VARIANCE, typeRef.coneType, it.coneType, context)
}
}
-}
+}
\ No newline at end of file