diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 3064dd43335..8a139289791 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -365,6 +365,31 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.SUPER_IS_NOT_AN_EXPRESSION) { firDiagnostic -> + SuperIsNotAnExpressionImpl( + firDiagnostic as FirPsiDiagnostic, + token, + ) + } + add(FirErrors.SUPER_NOT_AVAILABLE) { firDiagnostic -> + SuperNotAvailableImpl( + firDiagnostic as FirPsiDiagnostic, + token, + ) + } + add(FirErrors.ABSTRACT_SUPER_CALL) { firDiagnostic -> + AbstractSuperCallImpl( + firDiagnostic as FirPsiDiagnostic, + token, + ) + } + add(FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL) { firDiagnostic -> + InstanceAccessBeforeSuperCallImpl( + firDiagnostic.a, + firDiagnostic as FirPsiDiagnostic, + token, + ) + } add(FirJvmErrors.SUPER_CALL_WITH_DEFAULT_PARAMETERS) { firDiagnostic -> SuperCallWithDefaultParametersImpl( firDiagnostic.a, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 45be879b920..33a105859c5 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -287,6 +287,23 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract val classSymbol: KtClassLikeSymbol } + abstract class SuperIsNotAnExpression : KtFirDiagnostic() { + override val diagnosticClass get() = SuperIsNotAnExpression::class + } + + abstract class SuperNotAvailable : KtFirDiagnostic() { + override val diagnosticClass get() = SuperNotAvailable::class + } + + abstract class AbstractSuperCall : KtFirDiagnostic() { + override val diagnosticClass get() = AbstractSuperCall::class + } + + abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic() { + override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class + abstract val target: String + } + abstract class SuperCallWithDefaultParameters : KtFirDiagnostic() { override val diagnosticClass get() = SuperCallWithDefaultParameters::class abstract val name: String diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index d76bff3b519..e74397bf531 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -332,6 +332,27 @@ internal class ResolutionToClassifierImpl( override val token: ValidityToken, ) : KtFirDiagnostic.ResolutionToClassifier(), KtAbstractFirDiagnostic +internal class SuperIsNotAnExpressionImpl( + override val firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.SuperIsNotAnExpression(), KtAbstractFirDiagnostic + +internal class SuperNotAvailableImpl( + override val firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.SuperNotAvailable(), KtAbstractFirDiagnostic + +internal class AbstractSuperCallImpl( + override val firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.AbstractSuperCall(), KtAbstractFirDiagnostic + +internal class InstanceAccessBeforeSuperCallImpl( + override val target: String, + override val firDiagnostic: FirPsiDiagnostic, + override val token: ValidityToken, +) : KtFirDiagnostic.InstanceAccessBeforeSuperCall(), KtAbstractFirDiagnostic + internal class SuperCallWithDefaultParametersImpl( override val name: String, override val firDiagnostic: FirPsiDiagnostic, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/DiagnosticGroup.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/DiagnosticGroup.kt index 41707a1da6f..f6c245cd309 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/DiagnosticGroup.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/model/DiagnosticGroup.kt @@ -81,10 +81,12 @@ abstract class AbstractDiagnosticGroup @PrivateForInline constructor(val name: S @OptIn(PrivateForInline::class) operator fun plus(other: AbstractDiagnosticGroup): AbstractDiagnosticGroup { require(name == other.name) + + val combinedDiagnostics = this.diagnostics + other.diagnostics + return object : AbstractDiagnosticGroup(name, "#Stub") { init { - _diagnostics.addAll(this.diagnostics) - _diagnostics.addAll(other.diagnostics) + _diagnostics.addAll(combinedDiagnostics) } } }