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 ------------------------------