[FIR] Report warning on non-deprecated overrides of deprecated members

^KT-47902
This commit is contained in:
Dmitriy Novozhilov
2021-08-27 17:30:59 +03:00
parent ef9ad5af51
commit 88913aa2a3
18 changed files with 140 additions and 40 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.deprecation.Deprecation
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
import org.jetbrains.kotlin.types.Variance
import kotlin.reflect.KClass
@@ -336,6 +337,7 @@ private object FirToKtConversionCreator {
FqName::class,
FirModuleData::class,
ExpectActualCompatibility.Incompatible::class,
Deprecation::class,
)
private val KType.kClass: KClass<*>
@@ -761,6 +761,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.OVERRIDE_DEPRECATION) { firDiagnostic ->
OverrideDeprecationImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a.fir),
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic,
token,
)
}
add(FirErrors.ANNOTATION_ON_SUPERCLASS.errorFactory) { firDiagnostic ->
AnnotationOnSuperclassErrorImpl(
firDiagnostic as FirPsiDiagnostic,
@@ -70,6 +70,7 @@ import org.jetbrains.kotlin.psi.KtWhenCondition
import org.jetbrains.kotlin.psi.KtWhenEntry
import org.jetbrains.kotlin.psi.KtWhenExpression
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.deprecation.Deprecation
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
import org.jetbrains.kotlin.types.Variance
@@ -548,6 +549,12 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = DeprecatedSinceKotlinOutsideKotlinSubpackage::class
}
abstract class OverrideDeprecation : KtFirDiagnostic<KtNamedDeclaration>() {
override val diagnosticClass get() = OverrideDeprecation::class
abstract val overridenSymbol: KtSymbol
abstract val deprecationInfo: Deprecation
}
abstract class AnnotationOnSuperclassError : KtFirDiagnostic<KtAnnotationEntry>() {
override val diagnosticClass get() = AnnotationOnSuperclassError::class
}
@@ -72,6 +72,7 @@ import org.jetbrains.kotlin.psi.KtWhenCondition
import org.jetbrains.kotlin.psi.KtWhenEntry
import org.jetbrains.kotlin.psi.KtWhenExpression
import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget
import org.jetbrains.kotlin.resolve.deprecation.Deprecation
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.Incompatible
import org.jetbrains.kotlin.types.Variance
@@ -876,6 +877,15 @@ internal class DeprecatedSinceKotlinOutsideKotlinSubpackageImpl(
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class OverrideDeprecationImpl(
override val overridenSymbol: KtSymbol,
override val deprecationInfo: Deprecation,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.OverrideDeprecation(), KtAbstractFirDiagnostic<KtNamedDeclaration> {
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class AnnotationOnSuperclassErrorImpl(
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,