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 1f6846947a9..839c44c7194 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 @@ -169,7 +169,7 @@ object DIAGNOSTICS_LIST : DiagnosticList() { val INLINE_CLASS_CANNOT_EXTEND_CLASSES by error() val INLINE_CLASS_CANNOT_BE_RECURSIVE by error() val RESERVED_MEMBER_INSIDE_INLINE_CLASS by error(PositioningStrategy.DECLARATION_NAME) { - parameter("fun name") + parameter("name") } val SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS by error() val INNER_CLASS_INSIDE_INLINE_CLASS by error(PositioningStrategy.INNER_MODIFIER) 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 903178139ec..61f3d4d0b31 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 @@ -517,6 +517,98 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.INLINE_CLASS_NOT_TOP_LEVEL) { firDiagnostic -> + InlineClassNotTopLevelImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_NOT_FINAL) { firDiagnostic -> + InlineClassNotFinalImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS) { firDiagnostic -> + AbsenceOfPrimaryConstructorForInlineClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE) { firDiagnostic -> + InlineClassConstructorWrongParametersSizeImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER) { firDiagnostic -> + InlineClassConstructorNotFinalReadOnlyParameterImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS) { firDiagnostic -> + PropertyWithBackingFieldInsideInlineClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.DELEGATED_PROPERTY_INSIDE_INLINE_CLASS) { firDiagnostic -> + DelegatedPropertyInsideInlineClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE) { firDiagnostic -> + InlineClassHasInapplicableParameterTypeImpl( + firSymbolBuilder.buildKtType(firDiagnostic.a), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_CANNOT_IMPLEMENT_INTERFACE_BY_DELEGATION) { firDiagnostic -> + InlineClassCannotImplementInterfaceByDelegationImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_CANNOT_EXTEND_CLASSES) { firDiagnostic -> + InlineClassCannotExtendClassesImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INLINE_CLASS_CANNOT_BE_RECURSIVE) { firDiagnostic -> + InlineClassCannotBeRecursiveImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.RESERVED_MEMBER_INSIDE_INLINE_CLASS) { firDiagnostic -> + ReservedMemberInsideInlineClassImpl( + firDiagnostic.a, + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS) { firDiagnostic -> + SecondaryConstructorWithBodyInsideInlineClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.INNER_CLASS_INSIDE_INLINE_CLASS) { firDiagnostic -> + InnerClassInsideInlineClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } + add(FirErrors.VALUE_CLASS_CANNOT_BE_CLONEABLE) { firDiagnostic -> + ValueClassCannotBeCloneableImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } add(FirErrors.NONE_APPLICABLE) { firDiagnostic -> NoneApplicableImpl( firDiagnostic.a.map { abstractFirBasedSymbol -> 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 00fef033d21..a3aa3413024 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 @@ -375,6 +375,68 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = RedundantOpenInInterface::class } + abstract class InlineClassNotTopLevel : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassNotTopLevel::class + } + + abstract class InlineClassNotFinal : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassNotFinal::class + } + + abstract class AbsenceOfPrimaryConstructorForInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = AbsenceOfPrimaryConstructorForInlineClass::class + } + + abstract class InlineClassConstructorWrongParametersSize : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassConstructorWrongParametersSize::class + } + + abstract class InlineClassConstructorNotFinalReadOnlyParameter : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassConstructorNotFinalReadOnlyParameter::class + } + + abstract class PropertyWithBackingFieldInsideInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = PropertyWithBackingFieldInsideInlineClass::class + } + + abstract class DelegatedPropertyInsideInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = DelegatedPropertyInsideInlineClass::class + } + + abstract class InlineClassHasInapplicableParameterType : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassHasInapplicableParameterType::class + abstract val type: KtType + } + + abstract class InlineClassCannotImplementInterfaceByDelegation : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassCannotImplementInterfaceByDelegation::class + } + + abstract class InlineClassCannotExtendClasses : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassCannotExtendClasses::class + } + + abstract class InlineClassCannotBeRecursive : KtFirDiagnostic() { + override val diagnosticClass get() = InlineClassCannotBeRecursive::class + } + + abstract class ReservedMemberInsideInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = ReservedMemberInsideInlineClass::class + abstract val name: String + } + + abstract class SecondaryConstructorWithBodyInsideInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = SecondaryConstructorWithBodyInsideInlineClass::class + } + + abstract class InnerClassInsideInlineClass : KtFirDiagnostic() { + override val diagnosticClass get() = InnerClassInsideInlineClass::class + } + + abstract class ValueClassCannotBeCloneable : KtFirDiagnostic() { + override val diagnosticClass get() = ValueClassCannotBeCloneable::class + } + abstract class NoneApplicable : KtFirDiagnostic() { override val diagnosticClass get() = NoneApplicable::class abstract val candidates: List 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 e733212123c..7c696f71851 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 @@ -595,6 +595,113 @@ internal class RedundantOpenInInterfaceImpl( override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) } +internal class InlineClassNotTopLevelImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassNotTopLevel(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassNotFinalImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassNotFinal(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class AbsenceOfPrimaryConstructorForInlineClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.AbsenceOfPrimaryConstructorForInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassConstructorWrongParametersSizeImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassConstructorWrongParametersSize(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassConstructorNotFinalReadOnlyParameterImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassConstructorNotFinalReadOnlyParameter(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class PropertyWithBackingFieldInsideInlineClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.PropertyWithBackingFieldInsideInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class DelegatedPropertyInsideInlineClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.DelegatedPropertyInsideInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassHasInapplicableParameterTypeImpl( + override val type: KtType, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassHasInapplicableParameterType(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassCannotImplementInterfaceByDelegationImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassCannotImplementInterfaceByDelegation(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassCannotExtendClassesImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassCannotExtendClasses(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InlineClassCannotBeRecursiveImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InlineClassCannotBeRecursive(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class ReservedMemberInsideInlineClassImpl( + override val name: String, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.ReservedMemberInsideInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class SecondaryConstructorWithBodyInsideInlineClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.SecondaryConstructorWithBodyInsideInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class InnerClassInsideInlineClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.InnerClassInsideInlineClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + +internal class ValueClassCannotBeCloneableImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.ValueClassCannotBeCloneable(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + internal class NoneApplicableImpl( override val candidates: List, firDiagnostic: FirPsiDiagnostic<*>,