[FE] Fix "Not reachable case" exception
Review: https://jetbrains.team/p/kt/reviews/9967 This commit fixes: Cause 2: java.lang.IllegalStateException: Not reachable case. We can always suggest making `open val` property `final` at org.jetbrains.kotlin.resolve.DeclarationsChecker.reportMustBeInitialized(DeclarationsChecker.kt:845) at org.jetbrains.kotlin.resolve.DeclarationsChecker.checkPropertyInitializer(DeclarationsChecker.kt:778) at org.jetbrains.kotlin.resolve.DeclarationsChecker.checkProperty(DeclarationsChecker.kt:614) at org.jetbrains.kotlin.resolve.DeclarationsChecker.process(DeclarationsChecker.kt:106) at org.jetbrains.kotlin.resolve.BodyResolver.resolveBodies(BodyResolver.java:258) Reproducible in K1 & K2
This commit is contained in:
+6
@@ -3026,6 +3026,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("ValWithSetterDeferredInit.kt")
|
||||||
|
public void testValWithSetterDeferredInit() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/backingField/ValWithSetterDeferredInit.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
||||||
public void testVarDeferredInitInFinalClass() throws Exception {
|
public void testVarDeferredInitInFinalClass() throws Exception {
|
||||||
|
|||||||
+6
@@ -3026,6 +3026,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("ValWithSetterDeferredInit.kt")
|
||||||
|
public void testValWithSetterDeferredInit() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/backingField/ValWithSetterDeferredInit.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
||||||
public void testVarDeferredInitInFinalClass() throws Exception {
|
public void testVarDeferredInitInFinalClass() throws Exception {
|
||||||
|
|||||||
+6
@@ -3026,6 +3026,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("ValWithSetterDeferredInit.kt")
|
||||||
|
public void testValWithSetterDeferredInit() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/backingField/ValWithSetterDeferredInit.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
||||||
public void testVarDeferredInitInFinalClass() throws Exception {
|
public void testVarDeferredInitInFinalClass() throws Exception {
|
||||||
|
|||||||
+6
@@ -3032,6 +3032,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("ValWithSetterDeferredInit.kt")
|
||||||
|
public void testValWithSetterDeferredInit() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/backingField/ValWithSetterDeferredInit.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
||||||
public void testVarDeferredInitInFinalClass() throws Exception {
|
public void testVarDeferredInitInFinalClass() throws Exception {
|
||||||
|
|||||||
-3
@@ -201,9 +201,6 @@ private fun reportMustBeInitialized(
|
|||||||
suggestMakingItAbstract -> FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
suggestMakingItAbstract -> FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||||
else -> FirErrors.MUST_BE_INITIALIZED
|
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(
|
reporter.reportOn(
|
||||||
propertySource,
|
propertySource,
|
||||||
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
||||||
|
|||||||
@@ -841,9 +841,6 @@ class DeclarationsChecker(
|
|||||||
suggestMakingItAbstract -> MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
suggestMakingItAbstract -> MUST_BE_INITIALIZED_OR_BE_ABSTRACT
|
||||||
else -> MUST_BE_INITIALIZED
|
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(
|
trace.report(
|
||||||
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
when (isMissedMustBeInitializedDeprecationWarning || isOpenValDeferredInitDeprecationWarning) {
|
||||||
true -> factory.deprecationWarning
|
true -> factory.deprecationWarning
|
||||||
|
|||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
|
// LANGUAGE: -ProhibitOpenValDeferredInitialization
|
||||||
|
// DIAGNOSTICS: -DEBUG_INFO_LEAKING_THIS
|
||||||
|
open class A {
|
||||||
|
<!MUST_BE_INITIALIZED_WARNING!>open val c: Int<!>
|
||||||
|
<!VAL_WITH_SETTER!>set(value) {}<!>
|
||||||
|
|
||||||
|
init {
|
||||||
|
c = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
Generated
+6
@@ -3032,6 +3032,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
runTest("compiler/testData/diagnostics/tests/backingField/ValDeferredInitInOpenClassOpenValWarning.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("ValWithSetterDeferredInit.kt")
|
||||||
|
public void testValWithSetterDeferredInit() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/backingField/ValWithSetterDeferredInit.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
@TestMetadata("VarDeferredInitInFinalClass.kt")
|
||||||
public void testVarDeferredInitInFinalClass() throws Exception {
|
public void testVarDeferredInitInFinalClass() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user