[FIR] Add DYNAMIC_UPPER_BOUND check

+Fix some failing diagnostic tests
+Use PositioningStrategy to locate reified modifier
This commit is contained in:
Andrey Zinovyev
2021-04-13 11:18:18 +03:00
committed by TeamCityServer
parent 0d525bbe85
commit 3c093f57ba
15 changed files with 66 additions and 19 deletions
@@ -1036,6 +1036,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DYNAMIC_UPPER_BOUND) { firDiagnostic ->
DynamicUpperBoundImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.EXTENSION_IN_CLASS_REFERENCE_NOT_ALLOWED) { firDiagnostic ->
ExtensionInClassReferenceNotAllowedImpl(
firSymbolBuilder.callableBuilder.buildCallableSymbol(firDiagnostic.a as FirCallableDeclaration),
@@ -705,7 +705,7 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = BoundOnTypeAliasParameterNotAllowed::class
}
abstract class ReifiedTypeParameterNoInline : KtFirDiagnostic<PsiElement>() {
abstract class ReifiedTypeParameterNoInline : KtFirDiagnostic<KtTypeParameter>() {
override val diagnosticClass get() = ReifiedTypeParameterNoInline::class
}
@@ -735,6 +735,10 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = MisplacedTypeParameterConstraints::class
}
abstract class DynamicUpperBound : KtFirDiagnostic<KtTypeReference>() {
override val diagnosticClass get() = DynamicUpperBound::class
}
abstract class ExtensionInClassReferenceNotAllowed : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = ExtensionInClassReferenceNotAllowed::class
abstract val referencedDeclaration: KtCallableSymbol
@@ -1141,7 +1141,7 @@ internal class BoundOnTypeAliasParameterNotAllowedImpl(
internal class ReifiedTypeParameterNoInlineImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.ReifiedTypeParameterNoInline(), KtAbstractFirDiagnostic<PsiElement> {
) : KtFirDiagnostic.ReifiedTypeParameterNoInline(), KtAbstractFirDiagnostic<KtTypeParameter> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
@@ -1189,6 +1189,13 @@ internal class MisplacedTypeParameterConstraintsImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class DynamicUpperBoundImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.DynamicUpperBound(), KtAbstractFirDiagnostic<KtTypeReference> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ExtensionInClassReferenceNotAllowedImpl(
override val referencedDeclaration: KtCallableSymbol,
firDiagnostic: FirPsiDiagnostic<*>,