[FIR] Add checker for finite bounds validation

Added a new FIR based checker for both FINITE_BOUNDS_VIOLATION and
FINITE_BOUNDS_VIOLATION_IN_JAVA errors. Implementation copied from the
existing descriptor based checker with some minor changes.

#KT-59378 Fixed
This commit is contained in:
Brian Norman
2023-08-04 14:06:14 -05:00
committed by Space Team
parent 6a886e4c32
commit e8b4550173
17 changed files with 164 additions and 36 deletions
@@ -2311,6 +2311,21 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.FINITE_BOUNDS_VIOLATION) { firDiagnostic ->
FiniteBoundsViolationImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.FINITE_BOUNDS_VIOLATION_IN_JAVA) { firDiagnostic ->
FiniteBoundsViolationInJavaImpl(
firDiagnostic.a.map { firBasedSymbol ->
firSymbolBuilder.buildSymbol(firBasedSymbol)
},
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.DEPRECATED_TYPE_PARAMETER_SYNTAX) { firDiagnostic ->
DeprecatedTypeParameterSyntaxImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -1644,6 +1644,15 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = CyclicGenericUpperBound::class
}
interface FiniteBoundsViolation : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = FiniteBoundsViolation::class
}
interface FiniteBoundsViolationInJava : KtFirDiagnostic<PsiElement> {
override val diagnosticClass get() = FiniteBoundsViolationInJava::class
val containingTypes: List<KtSymbol>
}
interface DeprecatedTypeParameterSyntax : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = DeprecatedTypeParameterSyntax::class
}
@@ -1977,6 +1977,17 @@ internal class CyclicGenericUpperBoundImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.CyclicGenericUpperBound
internal class FiniteBoundsViolationImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.FiniteBoundsViolation
internal class FiniteBoundsViolationInJavaImpl(
override val containingTypes: List<KtSymbol>,
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KtFirDiagnostic.FiniteBoundsViolationInJava
internal class DeprecatedTypeParameterSyntaxImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,