[FE] Prohibit open val deferred initialization
^KT-57553 Fixed Review: https://jetbrains.team/p/kt/reviews/9967 Other related tests: - testUninitializedOrReassignedVariables - testUseOfPropertiesWithoutPrimary - @TestMetadata("compiler/testData/diagnostics/tests/secondaryConstructors") - testAugmentedAssignmentInInitializer - testInitOpenSetter - testInitOverrideInConstructorComplex - testPropertyInitializationOrder
This commit is contained in:
+12
@@ -2857,6 +2857,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING) { firDiagnostic ->
|
||||
MustBeInitializedOrBeFinalWarningImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT) { firDiagnostic ->
|
||||
MustBeInitializedOrBeAbstractImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
@@ -2869,6 +2875,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING) { firDiagnostic ->
|
||||
MustBeInitializedOrFinalOrAbstractWarningImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT) { firDiagnostic ->
|
||||
ExtensionPropertyMustHaveAccessorsOrBeAbstractImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
+8
@@ -2023,6 +2023,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeFinal::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrBeFinalWarning : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeFinalWarning::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrBeAbstract : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeAbstract::class
|
||||
}
|
||||
@@ -2031,6 +2035,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = MustBeInitializedOrFinalOrAbstract::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrFinalOrAbstractWarning : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrFinalOrAbstractWarning::class
|
||||
}
|
||||
|
||||
abstract class ExtensionPropertyMustHaveAccessorsOrBeAbstract : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = ExtensionPropertyMustHaveAccessorsOrBeAbstract::class
|
||||
}
|
||||
|
||||
+10
@@ -2430,6 +2430,11 @@ internal class MustBeInitializedOrBeFinalImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrBeFinal(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrBeFinalWarningImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrBeFinalWarning(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrBeAbstractImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
@@ -2440,6 +2445,11 @@ internal class MustBeInitializedOrFinalOrAbstractImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrFinalOrAbstract(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrFinalOrAbstractWarningImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrFinalOrAbstractWarning(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class ExtensionPropertyMustHaveAccessorsOrBeAbstractImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
|
||||
Reference in New Issue
Block a user