Fix ClassCastException at FirUninitializedEnumChecker

This commit is contained in:
Denis.Zharkov
2021-10-06 17:14:17 +03:00
committed by TeamCityServer
parent 0d072de737
commit 1c16f2f8c9
10 changed files with 62 additions and 4 deletions
@@ -1957,7 +1957,7 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val expectedType: KtType
}
abstract class UninitializedVariable : KtFirDiagnostic<KtSimpleNameExpression>() {
abstract class UninitializedVariable : KtFirDiagnostic<KtExpression>() {
override val diagnosticClass get() = UninitializedVariable::class
abstract val variable: KtVariableSymbol
}
@@ -2361,7 +2361,7 @@ internal class UninitializedVariableImpl(
override val variable: KtVariableSymbol,
override val firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.UninitializedVariable(), KtAbstractFirDiagnostic<KtSimpleNameExpression>
) : KtFirDiagnostic.UninitializedVariable(), KtAbstractFirDiagnostic<KtExpression>
internal class UninitializedParameterImpl(
override val parameter: KtSymbol,
@@ -5745,6 +5745,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/tryWithAssignmentUsedInCatch.kt");
}
@Test
@TestMetadata("UninitializedEnumCompanionVals.kt")
public void testUninitializedEnumCompanionVals() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedEnumCompanionVals.kt");
}
@Test
@TestMetadata("uninitializedInLocalDeclarations.kt")
public void testUninitializedInLocalDeclarations() throws Exception {
@@ -5745,6 +5745,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/tryWithAssignmentUsedInCatch.kt");
}
@Test
@TestMetadata("UninitializedEnumCompanionVals.kt")
public void testUninitializedEnumCompanionVals() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedEnumCompanionVals.kt");
}
@Test
@TestMetadata("uninitializedInLocalDeclarations.kt")
public void testUninitializedInLocalDeclarations() throws Exception {
@@ -5745,6 +5745,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/tryWithAssignmentUsedInCatch.kt");
}
@Test
@TestMetadata("UninitializedEnumCompanionVals.kt")
public void testUninitializedEnumCompanionVals() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedEnumCompanionVals.kt");
}
@Test
@TestMetadata("uninitializedInLocalDeclarations.kt")
public void testUninitializedInLocalDeclarations() throws Exception {
@@ -996,7 +996,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
}
val CONTROL_FLOW by object : DiagnosticGroup("Control flow diagnostics") {
val UNINITIALIZED_VARIABLE by error<KtSimpleNameExpression> {
val UNINITIALIZED_VARIABLE by error<KtExpression> {
parameter<FirPropertySymbol>("variable")
}
val UNINITIALIZED_PARAMETER by error<KtSimpleNameExpression> {
@@ -543,7 +543,7 @@ object FirErrors {
val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by error3<KtExpression, Name, ConeKotlinType, ConeKotlinType>()
// Control flow diagnostics
val UNINITIALIZED_VARIABLE by error1<KtSimpleNameExpression, FirPropertySymbol>()
val UNINITIALIZED_VARIABLE by error1<KtExpression, FirPropertySymbol>()
val UNINITIALIZED_PARAMETER by error1<KtSimpleNameExpression, FirValueParameterSymbol>()
val UNINITIALIZED_ENUM_ENTRY by error1<KtSimpleNameExpression, FirEnumEntrySymbol>()
val UNINITIALIZED_ENUM_COMPANION by error1<KtSimpleNameExpression, FirRegularClassSymbol>(SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED)
@@ -0,0 +1,17 @@
// SKIP_TXT
enum class A(val z: Any) {
Y(<!UNINITIALIZED_VARIABLE!>x<!>);
companion object {
val x = A.Y.ordinal
}
}
enum class B(val z: Any) {
Y(<!UNINITIALIZED_VARIABLE!>B.x<!>);
companion object {
val x = B.Y.ordinal
}
}
@@ -0,0 +1,17 @@
// SKIP_TXT
enum class A(val z: Any) {
Y(<!UNINITIALIZED_VARIABLE!>x<!>);
companion object {
val x = A.Y.ordinal
}
}
enum class B(val z: Any) {
Y(B.x);
companion object {
val x = B.Y.ordinal
}
}
@@ -5751,6 +5751,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/tryWithAssignmentUsedInCatch.kt");
}
@Test
@TestMetadata("UninitializedEnumCompanionVals.kt")
public void testUninitializedEnumCompanionVals() throws Exception {
runTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedEnumCompanionVals.kt");
}
@Test
@TestMetadata("uninitializedInLocalDeclarations.kt")
public void testUninitializedInLocalDeclarations() throws Exception {