Refactor: slightly improve code in WhenChecker

This commit is contained in:
Pavel V. Talanov
2012-11-19 15:46:30 +04:00
parent 8d501bd7f4
commit 6017604e38
@@ -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) {