[FIR IDE] Fix bug in diagnostics' combining during code generation
This commit is contained in:
+25
@@ -365,6 +365,31 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
token,
|
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 ->
|
add(FirJvmErrors.SUPER_CALL_WITH_DEFAULT_PARAMETERS) { firDiagnostic ->
|
||||||
SuperCallWithDefaultParametersImpl(
|
SuperCallWithDefaultParametersImpl(
|
||||||
firDiagnostic.a,
|
firDiagnostic.a,
|
||||||
|
|||||||
+17
@@ -287,6 +287,23 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
abstract val classSymbol: KtClassLikeSymbol
|
abstract val classSymbol: KtClassLikeSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class SuperIsNotAnExpression : KtFirDiagnostic<PsiElement>() {
|
||||||
|
override val diagnosticClass get() = SuperIsNotAnExpression::class
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class SuperNotAvailable : KtFirDiagnostic<PsiElement>() {
|
||||||
|
override val diagnosticClass get() = SuperNotAvailable::class
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class AbstractSuperCall : KtFirDiagnostic<PsiElement>() {
|
||||||
|
override val diagnosticClass get() = AbstractSuperCall::class
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic<PsiElement>() {
|
||||||
|
override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class
|
||||||
|
abstract val target: String
|
||||||
|
}
|
||||||
|
|
||||||
abstract class SuperCallWithDefaultParameters : KtFirDiagnostic<PsiElement>() {
|
abstract class SuperCallWithDefaultParameters : KtFirDiagnostic<PsiElement>() {
|
||||||
override val diagnosticClass get() = SuperCallWithDefaultParameters::class
|
override val diagnosticClass get() = SuperCallWithDefaultParameters::class
|
||||||
abstract val name: String
|
abstract val name: String
|
||||||
|
|||||||
+21
@@ -332,6 +332,27 @@ internal class ResolutionToClassifierImpl(
|
|||||||
override val token: ValidityToken,
|
override val token: ValidityToken,
|
||||||
) : KtFirDiagnostic.ResolutionToClassifier(), KtAbstractFirDiagnostic<PsiElement>
|
) : KtFirDiagnostic.ResolutionToClassifier(), KtAbstractFirDiagnostic<PsiElement>
|
||||||
|
|
||||||
|
internal class SuperIsNotAnExpressionImpl(
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.SuperIsNotAnExpression(), KtAbstractFirDiagnostic<PsiElement>
|
||||||
|
|
||||||
|
internal class SuperNotAvailableImpl(
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.SuperNotAvailable(), KtAbstractFirDiagnostic<PsiElement>
|
||||||
|
|
||||||
|
internal class AbstractSuperCallImpl(
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.AbstractSuperCall(), KtAbstractFirDiagnostic<PsiElement>
|
||||||
|
|
||||||
|
internal class InstanceAccessBeforeSuperCallImpl(
|
||||||
|
override val target: String,
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.InstanceAccessBeforeSuperCall(), KtAbstractFirDiagnostic<PsiElement>
|
||||||
|
|
||||||
internal class SuperCallWithDefaultParametersImpl(
|
internal class SuperCallWithDefaultParametersImpl(
|
||||||
override val name: String,
|
override val name: String,
|
||||||
override val firDiagnostic: FirPsiDiagnostic,
|
override val firDiagnostic: FirPsiDiagnostic,
|
||||||
|
|||||||
+4
-2
@@ -81,10 +81,12 @@ abstract class AbstractDiagnosticGroup @PrivateForInline constructor(val name: S
|
|||||||
@OptIn(PrivateForInline::class)
|
@OptIn(PrivateForInline::class)
|
||||||
operator fun plus(other: AbstractDiagnosticGroup): AbstractDiagnosticGroup {
|
operator fun plus(other: AbstractDiagnosticGroup): AbstractDiagnosticGroup {
|
||||||
require(name == other.name)
|
require(name == other.name)
|
||||||
|
|
||||||
|
val combinedDiagnostics = this.diagnostics + other.diagnostics
|
||||||
|
|
||||||
return object : AbstractDiagnosticGroup(name, "#Stub") {
|
return object : AbstractDiagnosticGroup(name, "#Stub") {
|
||||||
init {
|
init {
|
||||||
_diagnostics.addAll(this.diagnostics)
|
_diagnostics.addAll(combinedDiagnostics)
|
||||||
_diagnostics.addAll(other.diagnostics)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user