From a7536e1ae9e2f43cf7d6eba71694e6bda417aa51 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 21 Nov 2012 20:50:55 +0400 Subject: [PATCH] Fix ClassCastException introduced in https://github.com/JetBrains/kotlin/commit/8d501bd7f4f1093bcf29165755aff3f2a945c88a --- .../src/org/jetbrains/jet/lang/cfg/WhenChecker.java | 6 +++++- .../diagnostics/tests/controlFlowAnalysis/kt1185enums.kt | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java index 6db072477cf..8d71c9f622a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java @@ -96,8 +96,12 @@ public final class WhenChecker { ) { JetSimpleNameExpression reference = getReference(whenExpression.getExpression()); if (reference == null) return false; + DeclarationDescriptor target = trace.get(BindingContext.REFERENCE_TARGET, reference); - if (target == null) return false; + if (!(target instanceof VariableDescriptor)) { + return false; + } + ClassDescriptor classDescriptor = trace.get(BindingContext.OBJECT_DECLARATION_CLASS, (VariableDescriptor) target); return classDescriptor == enumEntry; } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1185enums.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1185enums.kt index 407e442aa9f..2ca36cd1d58 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1185enums.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1185enums.kt @@ -9,6 +9,12 @@ enum class Direction { EAST } +class A { + class object { + + } +} + enum class Color(val rgb : Int) { RED : Color(0xFF0000) GREEN : Color(0x00FF00) @@ -18,6 +24,7 @@ enum class Color(val rgb : Int) { fun foo(d: Direction) = when(d) { //no 'else' should be requested Direction.NORTH -> 1 Direction.SOUTH -> 2 + A -> 1 Direction.WEST -> 3 Direction.EAST -> 4 }