From 8d474c0e7e2a35cd3b33fbbad65922a3cb6a86f5 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 10 May 2021 15:15:12 -0700 Subject: [PATCH] FIR checker: more specific type for containing class in diagnostics about abstract members in non-abstract class --- .../fir/checkers/generator/diagnostics/FirDiagnosticsList.kt | 4 ++-- .../jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt | 4 ++-- .../fir/analysis/diagnostics/FirDefaultErrorMessages.kt | 4 ++-- .../frontend/api/fir/diagnostics/KtFirDataClassConverters.kt | 4 ++-- .../idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt | 4 ++-- .../idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 377fe7f4393..5b94460a634 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -509,7 +509,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() { val FUNCTIONS by object : DiagnosticGroup("Functions") { val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error(PositioningStrategy.MODALITY_MODIFIER) { parameter("function") - parameter("containingClass") // TODO use FirClass instead of FirMemberDeclaration + parameter>("containingClass") } val ABSTRACT_FUNCTION_WITH_BODY by error(PositioningStrategy.MODALITY_MODIFIER) { parameter("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(PositioningStrategy.MODALITY_MODIFIER) { parameter("property") - parameter("containingClass") // TODO use FirClass instead of FirMemberDeclaration + parameter>("containingClass") } val PRIVATE_PROPERTY_IN_INTERFACE by error(PositioningStrategy.VISIBILITY_MODIFIER) diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 6f64df723f6..cb4caa201f6 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -316,7 +316,7 @@ object FirErrors { val LOCAL_INTERFACE_NOT_ALLOWED by error1(SourceElementPositioningStrategies.DECLARATION_NAME) // Functions - val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val ABSTRACT_FUNCTION_WITH_BODY by error1(SourceElementPositioningStrategies.MODALITY_MODIFIER) val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val PRIVATE_FUNCTION_WITH_NO_BODY by error1(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) @@ -339,7 +339,7 @@ object FirErrors { val FUN_INTERFACE_WITH_SUSPEND_FUNCTION by error0(SourceElementPositioningStrategies.FUN_INTERFACE) // Properties & accessors - val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2(SourceElementPositioningStrategies.MODALITY_MODIFIER) + val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val PRIVATE_PROPERTY_IN_INTERFACE by error0(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0() val PROPERTY_INITIALIZER_IN_INTERFACE by error0() diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 97ecd18e4ef..6959c4c705f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -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") diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 63d25e3c77d..7124b2675e2 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -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, ) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index ae77f9e96d2..4afd290dc32 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -1024,7 +1024,7 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract class AbstractFunctionInNonAbstractClass : KtFirDiagnostic() { override val diagnosticClass get() = AbstractFunctionInNonAbstractClass::class abstract val function: KtSymbol - abstract val containingClass: KtSymbol + abstract val containingClass: KtClassLikeSymbol } abstract class AbstractFunctionWithBody : KtFirDiagnostic() { @@ -1107,7 +1107,7 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { abstract class AbstractPropertyInNonAbstractClass : KtFirDiagnostic() { override val diagnosticClass get() = AbstractPropertyInNonAbstractClass::class abstract val property: KtSymbol - abstract val containingClass: KtSymbol + abstract val containingClass: KtClassLikeSymbol } abstract class PrivatePropertyInInterface : KtFirDiagnostic() { diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index ce9d71c7eed..3aa67f8c6e0 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -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 { @@ -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 {