[FE] Prohibit missed MUST_BE_INITIALIZED when there is no primary constructor
^KT-58472 Fixed Review: https://jetbrains.team/p/kt/reviews/9967
This commit is contained in:
+12
@@ -2851,6 +2851,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_WARNING) { firDiagnostic ->
|
||||
MustBeInitializedWarningImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL) { firDiagnostic ->
|
||||
MustBeInitializedOrBeFinalImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
@@ -2869,6 +2875,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING) { firDiagnostic ->
|
||||
MustBeInitializedOrBeAbstractWarningImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT) { firDiagnostic ->
|
||||
MustBeInitializedOrFinalOrAbstractImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
+8
@@ -2019,6 +2019,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = MustBeInitialized::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedWarning : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedWarning::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrBeFinal : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeFinal::class
|
||||
}
|
||||
@@ -2031,6 +2035,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeAbstract::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrBeAbstractWarning : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrBeAbstractWarning::class
|
||||
}
|
||||
|
||||
abstract class MustBeInitializedOrFinalOrAbstract : KtFirDiagnostic<KtProperty>() {
|
||||
override val diagnosticClass get() = MustBeInitializedOrFinalOrAbstract::class
|
||||
}
|
||||
|
||||
+10
@@ -2425,6 +2425,11 @@ internal class MustBeInitializedImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitialized(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedWarningImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedWarning(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrBeFinalImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
@@ -2440,6 +2445,11 @@ internal class MustBeInitializedOrBeAbstractImpl(
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrBeAbstract(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrBeAbstractWarningImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
) : KtFirDiagnostic.MustBeInitializedOrBeAbstractWarning(), KtAbstractFirDiagnostic<KtProperty>
|
||||
|
||||
internal class MustBeInitializedOrFinalOrAbstractImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: KtLifetimeToken,
|
||||
|
||||
+118
@@ -3037,6 +3037,124 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
public void testVarDeferredInitInOpenClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/VarDeferredInitInOpenClass.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor {
|
||||
@Test
|
||||
public void testAllFilesPresentInProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("implicitPrimaryConstructor_errorAnyway.kt")
|
||||
public void testImplicitPrimaryConstructor_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/implicitPrimaryConstructor_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInSecondary_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInSecondary_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInTwoSecondaries_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("onePrimary_oneSecondary_errorAnyway.kt")
|
||||
public void testOnePrimary_oneSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/onePrimary_oneSecondary_errorAnyway.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+118
@@ -3037,6 +3037,124 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
public void testVarDeferredInitInOpenClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/VarDeferredInitInOpenClass.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor {
|
||||
@Test
|
||||
public void testAllFilesPresentInProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("implicitPrimaryConstructor_errorAnyway.kt")
|
||||
public void testImplicitPrimaryConstructor_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/implicitPrimaryConstructor_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInSecondary_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInSecondary_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInTwoSecondaries_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("onePrimary_oneSecondary_errorAnyway.kt")
|
||||
public void testOnePrimary_oneSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/onePrimary_oneSecondary_errorAnyway.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+118
@@ -3037,6 +3037,124 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
public void testVarDeferredInitInOpenClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/VarDeferredInitInOpenClass.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor {
|
||||
@Test
|
||||
public void testAllFilesPresentInProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("implicitPrimaryConstructor_errorAnyway.kt")
|
||||
public void testImplicitPrimaryConstructor_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/implicitPrimaryConstructor_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInSecondary_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInSecondary_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInTwoSecondaries_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("onePrimary_oneSecondary_errorAnyway.kt")
|
||||
public void testOnePrimary_oneSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/onePrimary_oneSecondary_errorAnyway.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+118
@@ -3043,6 +3043,124 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
public void testVarDeferredInitInOpenClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/VarDeferredInitInOpenClass.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor {
|
||||
@Test
|
||||
public void testAllFilesPresentInProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true, "multiplatform");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("implicitPrimaryConstructor_errorAnyway.kt")
|
||||
public void testImplicitPrimaryConstructor_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/implicitPrimaryConstructor_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInSecondary_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInSecondary_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInTwoSecondaries_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("onePrimary_oneSecondary_errorAnyway.kt")
|
||||
public void testOnePrimary_oneSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/onePrimary_oneSecondary_errorAnyway.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+2
@@ -1009,9 +1009,11 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
|
||||
val PROPERTY_WITH_NO_TYPE_NO_INITIALIZER by error<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
|
||||
val MUST_BE_INITIALIZED by error<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_WARNING by warning<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_FINAL by error<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING by warning<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_ABSTRACT by error<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING by warning<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT by error<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING by warning<KtProperty>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
|
||||
|
||||
@@ -533,9 +533,11 @@ object FirErrors {
|
||||
val PROPERTY_INITIALIZER_IN_INTERFACE by error0<KtExpression>()
|
||||
val PROPERTY_WITH_NO_TYPE_NO_INITIALIZER by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_WARNING by warning0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_FINAL by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING by warning0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_ABSTRACT by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING by warning0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING by warning0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT by error0<KtProperty>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
|
||||
+35
-23
@@ -12,16 +12,14 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactory0
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.FirModifierList
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.contains
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getModifierList
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeLocalVariableNoTypeOrInitializer
|
||||
@@ -189,28 +187,42 @@ private fun reportMustBeInitialized(
|
||||
!context.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitOpenValDeferredInitialization) &&
|
||||
property.getEffectiveModality(containingClass, context.languageVersionSettings) == Modality.OPEN && property.isVal &&
|
||||
isDefinitelyAssignedInConstructor
|
||||
|
||||
val factory = when {
|
||||
suggestMakingItFinal && suggestMakingItAbstract -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING
|
||||
false -> FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT
|
||||
}
|
||||
suggestMakingItFinal -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING
|
||||
false -> FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL
|
||||
}
|
||||
suggestMakingItAbstract -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> error("Not reachable case. Every \"open val + deferred init\" case that could be made `abstract`, also could be made `final`")
|
||||
false -> FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||
}
|
||||
else -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> error("Not reachable case. We can always suggest making `open val` property `final`")
|
||||
false -> FirErrors.MUST_BE_INITIALIZED
|
||||
}
|
||||
if (isOpenValDeferredInitDeprecationWarning && !suggestMakingItFinal && suggestMakingItAbstract) {
|
||||
error("Not reachable case. Every \"open val + deferred init\" case that could be made `abstract`, also could be made `final`")
|
||||
}
|
||||
reporter.reportOn(propertySource, factory, context)
|
||||
val isMissedMustBeInitializedDeprecationWarning =
|
||||
!context.languageVersionSettings.supportsFeature(LanguageFeature.ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor) &&
|
||||
containingClass != null &&
|
||||
containingClass.primaryConstructorIfAny(context.session) == null &&
|
||||
isDefinitelyAssignedInConstructor
|
||||
val factory = when {
|
||||
suggestMakingItFinal && suggestMakingItAbstract -> FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT
|
||||
suggestMakingItFinal -> FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL
|
||||
suggestMakingItAbstract -> FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||
else -> FirErrors.MUST_BE_INITIALIZED
|
||||
}
|
||||
if (isOpenValDeferredInitDeprecationWarning && factory == FirErrors.MUST_BE_INITIALIZED) {
|
||||
error("Not reachable case. We can always suggest making `open val` property `final`")
|
||||
}
|
||||
reporter.reportOn(
|
||||
propertySource,
|
||||
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> factory.deprecationWarning
|
||||
false -> factory
|
||||
},
|
||||
context
|
||||
)
|
||||
}
|
||||
|
||||
private val KtDiagnosticFactory0.deprecationWarning
|
||||
get() = when (this) {
|
||||
FirErrors.MUST_BE_INITIALIZED -> FirErrors.MUST_BE_INITIALIZED_WARNING
|
||||
FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT -> FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING
|
||||
FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL -> FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING
|
||||
FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT -> FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING
|
||||
else -> error("Only MUST_BE_INITIALIZED is supported")
|
||||
}
|
||||
|
||||
private val FirPropertyAccessor?.hasImplementation: Boolean
|
||||
get() = (this !is FirDefaultPropertyAccessor && this?.hasBody == true)
|
||||
private val FirProperty.hasSetterAccessorImplementation: Boolean
|
||||
|
||||
+4
@@ -337,10 +337,12 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTIPLE_VARARG_P
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MULTI_FIELD_VALUE_CLASS_PRIMARY_CONSTRUCTOR_DEFAULT_PARAMETER
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MUST_BE_INITIALIZED_WARNING
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NAMED_ARGUMENTS_NOT_ALLOWED
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NAMED_PARAMETER_NOT_FOUND
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NAME_FOR_AMBIGUOUS_PARAMETER
|
||||
@@ -1633,9 +1635,11 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
map.put(TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, "Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly")
|
||||
|
||||
map.put(MUST_BE_INITIALIZED, "Property must be initialized")
|
||||
map.put(MUST_BE_INITIALIZED_WARNING, "Property must be initialized. This warning will become an error in future releases.")
|
||||
map.put(MUST_BE_INITIALIZED_OR_BE_FINAL, "Property must be initialized or be final")
|
||||
map.put(MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING, "Property must be initialized or be final. This warning will become an error in future releases.")
|
||||
map.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract")
|
||||
map.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING, "Property must be initialized or be abstract. This warning will become an error in future releases.")
|
||||
map.put(MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT, "Property must be initialized, be final, or be abstract")
|
||||
map.put(MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING, "Property must be initialized, be final, or be abstract. This warning will become an error in future releases.")
|
||||
|
||||
|
||||
+1
-1
@@ -327,7 +327,7 @@ class ControlFlowInformationProviderImpl private constructor(
|
||||
private fun markUninitializedVariables() {
|
||||
val varWithUninitializedErrorGenerated = hashSetOf<VariableDescriptor>()
|
||||
val varWithValReassignErrorGenerated = hashSetOf<VariableDescriptor>()
|
||||
val processClassOrObject = subroutine is KtClassOrObject
|
||||
val processClassOrObject = subroutine is KtClassOrObject || subroutine is KtSecondaryConstructor
|
||||
|
||||
val initializers = pseudocodeVariablesData.variableInitializers
|
||||
val declaredVariables = pseudocodeVariablesData.getDeclaredVariables(pseudocode, true)
|
||||
|
||||
@@ -673,9 +673,11 @@ public interface Errors {
|
||||
DiagnosticFactory0<KtProperty> PROPERTY_WITH_NO_TYPE_NO_INITIALIZER = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_BE_FINAL = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_BE_ABSTRACT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT = DiagnosticFactory0.create(ERROR, DECLARATION_SIGNATURE);
|
||||
DiagnosticFactory0<KtProperty> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING = DiagnosticFactory0.create(WARNING, DECLARATION_SIGNATURE);
|
||||
|
||||
|
||||
+2
@@ -307,9 +307,11 @@ public class DefaultErrorMessages {
|
||||
MAP.put(BACKING_FIELD_IN_INTERFACE, "Property in an interface cannot have a backing field");
|
||||
|
||||
MAP.put(MUST_BE_INITIALIZED, "Property must be initialized");
|
||||
MAP.put(MUST_BE_INITIALIZED_WARNING, "Property must be initialized. This warning will become an error in future releases.");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_FINAL, "Property must be initialized or be final");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING, "Property must be initialized or be final. This warning will become an error in future releases.");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING, "Property must be initialized or be abstract. This warning will become an error in future releases.");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT, "Property must be initialized, be final, or be abstract");
|
||||
MAP.put(MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING, "Property must be initialized, be final, or be abstract. This warning will become an error in future releases.");
|
||||
|
||||
|
||||
@@ -827,28 +827,40 @@ class DeclarationsChecker(
|
||||
propertyDescriptor.getEffectiveModality(languageVersionSettings) == Modality.OPEN &&
|
||||
!propertyDescriptor.isVar &&
|
||||
trace.bindingContext.get(IS_DEFINITELY_NOT_ASSIGNED_IN_CONSTRUCTOR, propertyDescriptor) == false
|
||||
|
||||
val factory = when {
|
||||
suggestMakingItFinal && suggestMakingItAbstract -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING
|
||||
false -> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT
|
||||
}
|
||||
suggestMakingItFinal -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING
|
||||
false -> MUST_BE_INITIALIZED_OR_BE_FINAL
|
||||
}
|
||||
suggestMakingItAbstract -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> error("Not reachable case. Every \"open val + deferred init\" case that could be made `abstract`, also could be made `final`")
|
||||
false -> MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||
}
|
||||
else -> when (isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> error("Not reachable case. We can always suggest making `open val` property `final`")
|
||||
false -> MUST_BE_INITIALIZED
|
||||
}
|
||||
if (isOpenValDeferredInitDeprecationWarning && !suggestMakingItFinal && suggestMakingItAbstract) {
|
||||
error("Not reachable case. Every \"open val + deferred init\" case that could be made `abstract`, also could be made `final`")
|
||||
}
|
||||
trace.report(factory.on(property))
|
||||
val isMissedMustBeInitializedDeprecationWarning =
|
||||
!languageVersionSettings.supportsFeature(LanguageFeature.ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor) &&
|
||||
containingDeclaration is ClassDescriptor &&
|
||||
containingDeclaration.constructors.none { it.isPrimary } &&
|
||||
trace.bindingContext.get(IS_DEFINITELY_NOT_ASSIGNED_IN_CONSTRUCTOR, propertyDescriptor) == false
|
||||
val factory = when {
|
||||
suggestMakingItFinal && suggestMakingItAbstract -> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT
|
||||
suggestMakingItFinal -> MUST_BE_INITIALIZED_OR_BE_FINAL
|
||||
suggestMakingItAbstract -> MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||
else -> MUST_BE_INITIALIZED
|
||||
}
|
||||
if (isOpenValDeferredInitDeprecationWarning && factory == MUST_BE_INITIALIZED) {
|
||||
error("Not reachable case. We can always suggest making `open val` property `final`")
|
||||
}
|
||||
trace.report(
|
||||
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
||||
true -> factory.deprecationWarning
|
||||
false -> factory
|
||||
}.on(property)
|
||||
)
|
||||
}
|
||||
|
||||
private val DiagnosticFactory0<KtProperty>.deprecationWarning: DiagnosticFactory0<KtProperty>
|
||||
get() = when (this) {
|
||||
MUST_BE_INITIALIZED -> MUST_BE_INITIALIZED_WARNING
|
||||
MUST_BE_INITIALIZED_OR_BE_ABSTRACT -> MUST_BE_INITIALIZED_OR_BE_ABSTRACT_WARNING
|
||||
MUST_BE_INITIALIZED_OR_BE_FINAL -> MUST_BE_INITIALIZED_OR_BE_FINAL_WARNING
|
||||
MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT -> MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING
|
||||
else -> error("Only MUST_BE_INITIALIZED is supported")
|
||||
}
|
||||
|
||||
private fun noExplicitTypeOrGetterType(property: KtProperty) =
|
||||
property.typeReference == null
|
||||
&& (property.getter == null || (property.getter!!.hasBlockBody() && property.getter!!.returnTypeReference == null))
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Base(x: Int)
|
||||
class Foo : Base {
|
||||
constructor() : super(1)
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Base(x: Int)
|
||||
class Foo : Base {
|
||||
constructor() : super(1)
|
||||
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
constructor() {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
constructor() {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
constructor()
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
constructor()
|
||||
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, +ProhibitOpenValDeferredInitialization
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT!>open val x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, +ProhibitOpenValDeferredInitialization
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, -ProhibitOpenValDeferredInitialization
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor, -ProhibitOpenValDeferredInitialization
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open val x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT!>open var x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
open class Foo {
|
||||
constructor()
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_FINAL_OR_ABSTRACT_WARNING!>open var x: String<!>
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
class Foo {
|
||||
<!MUST_BE_INITIALIZED!>var foo: Int<!>
|
||||
set(value) {}
|
||||
|
||||
constructor() {
|
||||
if (1 != 1) {
|
||||
foo = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// FIR_IDENTICAL
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
class Foo {
|
||||
<!MUST_BE_INITIALIZED!>var foo: Int<!>
|
||||
set(value) {}
|
||||
|
||||
constructor(x: Int) {}
|
||||
constructor() {
|
||||
foo = 1
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:+ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
constructor()
|
||||
constructor(x: Int)
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo {
|
||||
constructor()
|
||||
constructor(x: Int)
|
||||
<!MUST_BE_INITIALIZED_WARNING!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE:-ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor
|
||||
// !DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||
class Foo() {
|
||||
constructor(x: Int) : this()
|
||||
|
||||
<!MUST_BE_INITIALIZED!>var x: String<!>
|
||||
set(value) {}
|
||||
|
||||
init {
|
||||
x = ""
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -33,8 +33,8 @@ class SecondDerived : Second() {
|
||||
override fun foo() = y
|
||||
}
|
||||
|
||||
open class Third {
|
||||
open var x: String
|
||||
abstract class Third {
|
||||
abstract var x: String
|
||||
|
||||
constructor() {
|
||||
x = "X" // Non-final property access
|
||||
|
||||
@@ -33,8 +33,8 @@ class SecondDerived : Second() {
|
||||
override fun foo() = y
|
||||
}
|
||||
|
||||
open class Third {
|
||||
open var x: String
|
||||
abstract class Third {
|
||||
abstract var x: String
|
||||
|
||||
constructor() {
|
||||
<!DEBUG_INFO_LEAKING_THIS!>x<!> = "X" // Non-final property access
|
||||
|
||||
@@ -42,9 +42,9 @@ public final class SecondDerived : Second {
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public open class Third {
|
||||
public abstract class Third {
|
||||
public constructor Third()
|
||||
public open var x: kotlin.String
|
||||
public abstract var x: kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
+3
-4
@@ -1,7 +1,7 @@
|
||||
open class Base {
|
||||
open var x: Int
|
||||
abstract class Base {
|
||||
abstract var x: Int
|
||||
|
||||
open var y: Int
|
||||
abstract var y: Int
|
||||
|
||||
constructor() {
|
||||
x = 42
|
||||
@@ -9,6 +9,5 @@ open class Base {
|
||||
val temp = this.x
|
||||
this.x = y
|
||||
y = temp
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
open class Base {
|
||||
open var x: Int
|
||||
abstract class Base {
|
||||
abstract var x: Int
|
||||
|
||||
open var y: Int
|
||||
abstract var y: Int
|
||||
|
||||
constructor() {
|
||||
<!DEBUG_INFO_LEAKING_THIS!>x<!> = 42
|
||||
@@ -9,6 +9,5 @@ open class Base {
|
||||
val temp = this.<!DEBUG_INFO_LEAKING_THIS!>x<!>
|
||||
this.<!DEBUG_INFO_LEAKING_THIS!>x<!> = <!DEBUG_INFO_LEAKING_THIS!>y<!>
|
||||
<!DEBUG_INFO_LEAKING_THIS!>y<!> = temp
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
package
|
||||
|
||||
public open class Base {
|
||||
public abstract class Base {
|
||||
public constructor Base()
|
||||
public open var x: kotlin.Int
|
||||
public open var y: kotlin.Int
|
||||
public abstract var x: kotlin.Int
|
||||
public abstract var y: kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
|
||||
Generated
+118
@@ -3043,6 +3043,124 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
public void testVarDeferredInitInOpenClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/VarDeferredInitInOpenClass.kt");
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor {
|
||||
@Test
|
||||
public void testAllFilesPresentInProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("implicitPrimaryConstructor_errorAnyway.kt")
|
||||
public void testImplicitPrimaryConstructor_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/implicitPrimaryConstructor_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneInheritedSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneInheritedSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_deferredInitInSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValError_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValError_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openValWarning_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openValWarning_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_oneSecondary_openVar_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_oneSecondary_openVar_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInSecondary_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInSecondary_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt")
|
||||
public void testNoPrimary_partialDeferredInitInTwoSecondaries_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_partialDeferredInitInTwoSecondaries_errorAnyway.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedError.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedError() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedError.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noPrimary_twoSecondary_mustBeInitializedWarning.kt")
|
||||
public void testNoPrimary_twoSecondary_mustBeInitializedWarning() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/noPrimary_twoSecondary_mustBeInitializedWarning.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("onePrimary_oneSecondary_errorAnyway.kt")
|
||||
public void testOnePrimary_oneSecondary_errorAnyway() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/backingField/prohibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor/onePrimary_oneSecondary_errorAnyway.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
@@ -289,6 +289,7 @@ enum class LanguageFeature(
|
||||
KeepNullabilityWhenApproximatingLocalType(KOTLIN_2_0, kind = BUG_FIX), // KT-53982
|
||||
ProhibitAccessToInvisibleSetterFromDerivedClass(KOTLIN_2_0, kind = BUG_FIX), // KT-56662
|
||||
ProhibitOpenValDeferredInitialization(KOTLIN_2_0, kind = BUG_FIX), // KT-57553
|
||||
ProhibitMissedMustBeInitializedWhenThereIsNoPrimaryConstructor(KOTLIN_2_0, kind = BUG_FIX), // KT-58472
|
||||
|
||||
// 2.1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user