[FIR] Fix handling of WRONG_MODIFIER_TARGET

Implement DEPRECATED_MODIFIER, DEPRECATED_MODIFIER_FOR_TARGET, REDUNDANT_MODIFIER_FOR_TARGET
This commit is contained in:
Ivan Kochurkin
2021-08-04 20:20:38 +03:00
committed by TeamCityServer
parent e85940a1ac
commit cd6384eb20
114 changed files with 504 additions and 1033 deletions
@@ -1014,6 +1014,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DEPRECATED_MODIFIER) { firDiagnostic ->
DeprecatedModifierImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic,
token,
)
}
add(FirErrors.DEPRECATED_MODIFIER_PAIR) { firDiagnostic ->
DeprecatedModifierPairImpl(
firDiagnostic.a,
@@ -1022,6 +1030,22 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.DEPRECATED_MODIFIER_FOR_TARGET) { firDiagnostic ->
DeprecatedModifierForTargetImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic,
token,
)
}
add(FirErrors.REDUNDANT_MODIFIER_FOR_TARGET) { firDiagnostic ->
RedundantModifierForTargetImpl(
firDiagnostic.a,
firDiagnostic.b,
firDiagnostic as FirPsiDiagnostic,
token,
)
}
add(FirErrors.INCOMPATIBLE_MODIFIERS) { firDiagnostic ->
IncompatibleModifiersImpl(
firDiagnostic.a,
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableLikeSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -733,16 +732,34 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val conflictingModifier: String
}
abstract class DeprecatedModifier : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DeprecatedModifier::class
abstract val deprecatedModifier: String
abstract val actualModifier: String
}
abstract class DeprecatedModifierPair : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DeprecatedModifierPair::class
abstract val deprecatedModifier: String
abstract val conflictingModifier: String
}
abstract class DeprecatedModifierForTarget : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = DeprecatedModifierForTarget::class
abstract val deprecatedModifier: String
abstract val target: String
}
abstract class RedundantModifierForTarget : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = RedundantModifierForTarget::class
abstract val redundantModifier: String
abstract val target: String
}
abstract class IncompatibleModifiers : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = IncompatibleModifiers::class
abstract val modifier1: KtModifierKeywordToken
abstract val modifier2: KtModifierKeywordToken
abstract val modifier1: String
abstract val modifier2: String
}
abstract class RedundantOpenInInterface : KtFirDiagnostic<KtModifierListOwner>() {
@@ -751,7 +768,7 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract class WrongModifierTarget : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = WrongModifierTarget::class
abstract val modifier: KtModifierKeywordToken
abstract val modifier: String
abstract val target: String
}
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol
import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -1166,6 +1165,15 @@ internal class RedundantModifierImpl(
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class DeprecatedModifierImpl(
override val deprecatedModifier: String,
override val actualModifier: String,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.DeprecatedModifier(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class DeprecatedModifierPairImpl(
override val deprecatedModifier: String,
override val conflictingModifier: String,
@@ -1175,6 +1183,24 @@ internal class DeprecatedModifierPairImpl(
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class DeprecatedModifierForTargetImpl(
override val deprecatedModifier: String,
override val target: String,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.DeprecatedModifierForTarget(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class RedundantModifierForTargetImpl(
override val redundantModifier: String,
override val target: String,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.RedundantModifierForTarget(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class IncompatibleModifiersImpl(
override val modifier1: String,
override val modifier2: String,
@@ -1192,7 +1218,7 @@ internal class RedundantOpenInInterfaceImpl(
}
internal class WrongModifierTargetImpl(
override val modifier: KtModifierKeywordToken,
override val modifier: String,
override val target: String,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,