FIR checker: more specific type for containing class in diagnostics
about abstract members in non-abstract class
This commit is contained in:
committed by
teamcityserver
parent
864ab2cadd
commit
8d474c0e7e
+2
-2
@@ -509,7 +509,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
||||
val FUNCTIONS by object : DiagnosticGroup("Functions") {
|
||||
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||
parameter<FirMemberDeclaration>("function")
|
||||
parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration
|
||||
parameter<FirClass<*>>("containingClass")
|
||||
}
|
||||
val ABSTRACT_FUNCTION_WITH_BODY by error<KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||
parameter<FirMemberDeclaration>("function")
|
||||
@@ -551,7 +551,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() {
|
||||
val PROPERTIES_AND_ACCESSORS by object : DiagnosticGroup("Properties & accessors") {
|
||||
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error<KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) {
|
||||
parameter<FirMemberDeclaration>("property")
|
||||
parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration
|
||||
parameter<FirClass<*>>("containingClass")
|
||||
}
|
||||
val PRIVATE_PROPERTY_IN_INTERFACE by error<KtProperty>(PositioningStrategy.VISIBILITY_MODIFIER)
|
||||
|
||||
|
||||
+2
-2
@@ -316,7 +316,7 @@ object FirErrors {
|
||||
val LOCAL_INTERFACE_NOT_ALLOWED by error1<KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
|
||||
|
||||
// Functions
|
||||
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<KtFunction, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<KtFunction, FirMemberDeclaration, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||
val ABSTRACT_FUNCTION_WITH_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val PRIVATE_FUNCTION_WITH_NO_BODY by error1<KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
@@ -339,7 +339,7 @@ object FirErrors {
|
||||
val FUN_INTERFACE_WITH_SUSPEND_FUNCTION by error0<KtDeclaration>(SourceElementPositioningStrategies.FUN_INTERFACE)
|
||||
|
||||
// Properties & accessors
|
||||
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<KtModifierListOwner, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<KtModifierListOwner, FirMemberDeclaration, FirClass<*>>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
|
||||
val PRIVATE_PROPERTY_IN_INTERFACE by error0<KtProperty>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
|
||||
val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0<KtExpression>()
|
||||
val PROPERTY_INITIALIZER_IN_INTERFACE by error0<KtExpression>()
|
||||
|
||||
+2
-2
@@ -771,7 +771,7 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension {
|
||||
ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS,
|
||||
"Abstract function ''{0}'' in non-abstract class ''{1}''",
|
||||
DECLARATION_NAME,
|
||||
DECLARATION_NAME
|
||||
NAME
|
||||
)
|
||||
map.put(ABSTRACT_FUNCTION_WITH_BODY, "A function ''{0}'' with body cannot be abstract", DECLARATION_NAME)
|
||||
map.put(NON_ABSTRACT_FUNCTION_WITH_NO_BODY, "Function ''{0}'' without a body must be abstract", DECLARATION_NAME)
|
||||
@@ -807,7 +807,7 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension {
|
||||
ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS,
|
||||
"Abstract property ''{0}'' in non-abstract class ''{1}''",
|
||||
DECLARATION_NAME,
|
||||
DECLARATION_NAME
|
||||
NAME
|
||||
)
|
||||
map.put(PRIVATE_PROPERTY_IN_INTERFACE, "Abstract property in an interface cannot be private")
|
||||
|
||||
|
||||
+2
-2
@@ -1449,7 +1449,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS) { firDiagnostic ->
|
||||
AbstractFunctionInNonAbstractClassImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b),
|
||||
firDiagnostic as FirPsiDiagnostic<*>,
|
||||
token,
|
||||
)
|
||||
@@ -1570,7 +1570,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
add(FirErrors.ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS) { firDiagnostic ->
|
||||
AbstractPropertyInNonAbstractClassImpl(
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.a as FirDeclaration),
|
||||
firSymbolBuilder.buildSymbol(firDiagnostic.b as FirDeclaration),
|
||||
firSymbolBuilder.classifierBuilder.buildClassLikeSymbol(firDiagnostic.b),
|
||||
firDiagnostic as FirPsiDiagnostic<*>,
|
||||
token,
|
||||
)
|
||||
|
||||
+2
-2
@@ -1024,7 +1024,7 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
abstract class AbstractFunctionInNonAbstractClass : KtFirDiagnostic<KtFunction>() {
|
||||
override val diagnosticClass get() = AbstractFunctionInNonAbstractClass::class
|
||||
abstract val function: KtSymbol
|
||||
abstract val containingClass: KtSymbol
|
||||
abstract val containingClass: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
abstract class AbstractFunctionWithBody : KtFirDiagnostic<KtFunction>() {
|
||||
@@ -1107,7 +1107,7 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
abstract class AbstractPropertyInNonAbstractClass : KtFirDiagnostic<KtModifierListOwner>() {
|
||||
override val diagnosticClass get() = AbstractPropertyInNonAbstractClass::class
|
||||
abstract val property: KtSymbol
|
||||
abstract val containingClass: KtSymbol
|
||||
abstract val containingClass: KtClassLikeSymbol
|
||||
}
|
||||
|
||||
abstract class PrivatePropertyInInterface : KtFirDiagnostic<KtProperty>() {
|
||||
|
||||
+2
-2
@@ -1648,7 +1648,7 @@ internal class LocalInterfaceNotAllowedImpl(
|
||||
|
||||
internal class AbstractFunctionInNonAbstractClassImpl(
|
||||
override val function: KtSymbol,
|
||||
override val containingClass: KtSymbol,
|
||||
override val containingClass: KtClassLikeSymbol,
|
||||
firDiagnostic: FirPsiDiagnostic<*>,
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.AbstractFunctionInNonAbstractClass(), KtAbstractFirDiagnostic<KtFunction> {
|
||||
@@ -1788,7 +1788,7 @@ internal class FunInterfaceWithSuspendFunctionImpl(
|
||||
|
||||
internal class AbstractPropertyInNonAbstractClassImpl(
|
||||
override val property: KtSymbol,
|
||||
override val containingClass: KtSymbol,
|
||||
override val containingClass: KtClassLikeSymbol,
|
||||
firDiagnostic: FirPsiDiagnostic<*>,
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.AbstractPropertyInNonAbstractClass(), KtAbstractFirDiagnostic<KtModifierListOwner> {
|
||||
|
||||
Reference in New Issue
Block a user