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 5b147979ee4..6db072477cf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/WhenChecker.java @@ -35,7 +35,10 @@ import java.util.Collections; /** * @author svtk */ -public class WhenChecker { +public final class WhenChecker { + private WhenChecker() { + } + public static boolean isWhenExhaustive(@NotNull JetWhenExpression expression, @NotNull BindingTrace trace) { JetExpression subjectExpression = expression.getSubjectExpression(); if (subjectExpression == null) return false; @@ -75,22 +78,30 @@ public class WhenChecker { assert enumEntry.getKind() == ClassKind.ENUM_ENTRY; for (JetWhenEntry whenEntry : whenExpression.getEntries()) { for (JetWhenCondition condition : whenEntry.getConditions()) { - if (condition instanceof JetWhenConditionWithExpression) { - JetExpression patternExpression = ((JetWhenConditionWithExpression) condition).getExpression(); - JetSimpleNameExpression reference = getReference(patternExpression); - if (reference == null) continue; - DeclarationDescriptor target = trace.get(BindingContext.REFERENCE_TARGET, reference); - if (target == null) continue; - ClassDescriptor classDescriptor = trace.get(BindingContext.OBJECT_DECLARATION_CLASS, (VariableDescriptor) target); - if (classDescriptor == enumEntry) { - return true; - } + if (!(condition instanceof JetWhenConditionWithExpression)) { + continue; + } + if (isCheckForEnumEntry((JetWhenConditionWithExpression) condition, enumEntry, trace)) { + return true; } } } return false; } + private static boolean isCheckForEnumEntry( + @NotNull JetWhenConditionWithExpression whenExpression, + @NotNull ClassDescriptor enumEntry, + @NotNull BindingTrace trace + ) { + JetSimpleNameExpression reference = getReference(whenExpression.getExpression()); + if (reference == null) return false; + DeclarationDescriptor target = trace.get(BindingContext.REFERENCE_TARGET, reference); + if (target == null) return false; + ClassDescriptor classDescriptor = trace.get(BindingContext.OBJECT_DECLARATION_CLASS, (VariableDescriptor) target); + return classDescriptor == enumEntry; + } + @Nullable private static JetSimpleNameExpression getReference(@Nullable JetExpression expression) { if (expression == null) {