From e8a5df364b3ce298df5eeb187ab7b623a9757d90 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 21 Oct 2015 16:13:22 +0300 Subject: [PATCH] Refactoring (JetFlowInformationProvider) --- .../cfg/JetFlowInformationProvider.java | 48 ++++++++++--------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java index 60bf55a6267..6c437059afc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java @@ -346,7 +346,7 @@ public class JetFlowInformationProvider { error = checkAssignmentBeforeDeclaration(ctxt, (KtExpression) element); } if (!error && processClassOrObject) { - checkInitializationUsingBackingField(ctxt, (KtExpression) element); + checkInitializationForCustomSetter(ctxt, (KtExpression) element); } } } @@ -491,30 +491,34 @@ public class JetFlowInformationProvider { return false; } - private boolean checkInitializationUsingBackingField(@NotNull VariableInitContext ctxt, @NotNull KtExpression expression) { + private boolean checkInitializationForCustomSetter(@NotNull VariableInitContext ctxt, @NotNull KtExpression expression) { VariableDescriptor variableDescriptor = ctxt.variableDescriptor; - if (variableDescriptor instanceof PropertyDescriptor - && !ctxt.enterInitState.mayBeInitialized() - && ctxt.exitInitState.mayBeInitialized()) { - if (!variableDescriptor.isVar()) return false; - if (!trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor)) return false; - PsiElement property = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor); - assert property instanceof KtProperty; - KtPropertyAccessor setter = ((KtProperty) property).getSetter(); - if (((PropertyDescriptor) variableDescriptor).getModality() == Modality.FINAL && (setter == null || !setter.hasBody())) { - return false; - } - KtExpression variable = expression; - if (expression instanceof KtDotQualifiedExpression) { - if (((KtDotQualifiedExpression) expression).getReceiverExpression() instanceof KtThisExpression) { - variable = ((KtDotQualifiedExpression) expression).getSelectorExpression(); - } - } - if (variable instanceof KtSimpleNameExpression) { - trace.record(IS_UNINITIALIZED, (PropertyDescriptor) variableDescriptor); - return true; + if (!(variableDescriptor instanceof PropertyDescriptor) + || ctxt.enterInitState.mayBeInitialized() + || !ctxt.exitInitState.mayBeInitialized() + || !variableDescriptor.isVar() + || !trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor) + ) { + return false; + } + + PsiElement property = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor); + assert property instanceof KtProperty; + KtPropertyAccessor setter = ((KtProperty) property).getSetter(); + if (((PropertyDescriptor) variableDescriptor).getModality() == Modality.FINAL && (setter == null || !setter.hasBody())) { + return false; + } + + KtExpression variable = expression; + if (expression instanceof KtDotQualifiedExpression) { + if (((KtDotQualifiedExpression) expression).getReceiverExpression() instanceof KtThisExpression) { + variable = ((KtDotQualifiedExpression) expression).getSelectorExpression(); } } + if (variable instanceof KtSimpleNameExpression) { + trace.record(IS_UNINITIALIZED, (PropertyDescriptor) variableDescriptor); + return true; + } return false; }