diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnostic.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnostic.kt
index ab7c1d152f6..5e3b59c8126 100644
--- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnostic.kt
+++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnostic.kt
@@ -73,12 +73,26 @@ interface FirPsiDiagnostic {
get() = psiElement.containingFile
}
+private const val CHECK_PSI_CONSISTENCY_IN_DIAGNOSTICS = true
+
+private fun FirPsiDiagnostic.checkPsiTypeConsistency() {
+ if (CHECK_PSI_CONSISTENCY_IN_DIAGNOSTICS) {
+ require(factory.psiType.isInstance(element.psi)) {
+ "${element.psi::class} is not a subtype of ${factory.psiType} for factory $factory"
+ }
+ }
+}
+
data class FirPsiSimpleDiagnostic(
override val element: FirPsiSourceElement,
override val severity: Severity,
override val factory: FirDiagnosticFactory0,
override val positioningStrategy: SourceElementPositioningStrategy
-) : FirSimpleDiagnostic(), FirPsiDiagnostic
+) : FirSimpleDiagnostic(), FirPsiDiagnostic {
+ init {
+ checkPsiTypeConsistency()
+ }
+}
data class FirPsiDiagnosticWithParameters1(
override val element: FirPsiSourceElement,
@@ -86,7 +100,12 @@ data class FirPsiDiagnosticWithParameters1(
override val severity: Severity,
override val factory: FirDiagnosticFactory1,
override val positioningStrategy: SourceElementPositioningStrategy
-) : FirDiagnosticWithParameters1(), FirPsiDiagnostic
+) : FirDiagnosticWithParameters1(), FirPsiDiagnostic {
+ init {
+ checkPsiTypeConsistency()
+ }
+}
+
data class FirPsiDiagnosticWithParameters2(
override val element: FirPsiSourceElement,
@@ -95,7 +114,11 @@ data class FirPsiDiagnosticWithParameters2(
override val severity: Severity,
override val factory: FirDiagnosticFactory2,
override val positioningStrategy: SourceElementPositioningStrategy
-) : FirDiagnosticWithParameters2(), FirPsiDiagnostic
+) : FirDiagnosticWithParameters2(), FirPsiDiagnostic {
+ init {
+ checkPsiTypeConsistency()
+ }
+}
data class FirPsiDiagnosticWithParameters3(
override val element: FirPsiSourceElement,
@@ -105,7 +128,11 @@ data class FirPsiDiagnosticWithParameters3(
override val severity: Severity,
override val factory: FirDiagnosticFactory3,
override val positioningStrategy: SourceElementPositioningStrategy
-) : FirDiagnosticWithParameters3(), FirPsiDiagnostic
+) : FirDiagnosticWithParameters3(), FirPsiDiagnostic {
+ init {
+ checkPsiTypeConsistency()
+ }
+}
data class FirPsiDiagnosticWithParameters4(
override val element: FirPsiSourceElement,
@@ -116,7 +143,11 @@ data class FirPsiDiagnosticWithParameters4(
override val severity: Severity,
override val factory: FirDiagnosticFactory4,
override val positioningStrategy: SourceElementPositioningStrategy
-) : FirDiagnosticWithParameters4(), FirPsiDiagnostic
+) : FirDiagnosticWithParameters4(), FirPsiDiagnostic {
+ init {
+ checkPsiTypeConsistency()
+ }
+}
// ------------------------------ light tree diagnostics ------------------------------