Refactoring (JetFlowInformationProvider)

This commit is contained in:
Mikhail Glukhikh
2015-10-21 16:13:22 +03:00
parent d6988ad69e
commit e8a5df364b
@@ -346,7 +346,7 @@ public class JetFlowInformationProvider {
error = checkAssignmentBeforeDeclaration(ctxt, (KtExpression) element); error = checkAssignmentBeforeDeclaration(ctxt, (KtExpression) element);
} }
if (!error && processClassOrObject) { if (!error && processClassOrObject) {
checkInitializationUsingBackingField(ctxt, (KtExpression) element); checkInitializationForCustomSetter(ctxt, (KtExpression) element);
} }
} }
} }
@@ -491,30 +491,34 @@ public class JetFlowInformationProvider {
return false; return false;
} }
private boolean checkInitializationUsingBackingField(@NotNull VariableInitContext ctxt, @NotNull KtExpression expression) { private boolean checkInitializationForCustomSetter(@NotNull VariableInitContext ctxt, @NotNull KtExpression expression) {
VariableDescriptor variableDescriptor = ctxt.variableDescriptor; VariableDescriptor variableDescriptor = ctxt.variableDescriptor;
if (variableDescriptor instanceof PropertyDescriptor if (!(variableDescriptor instanceof PropertyDescriptor)
&& !ctxt.enterInitState.mayBeInitialized() || ctxt.enterInitState.mayBeInitialized()
&& ctxt.exitInitState.mayBeInitialized()) { || !ctxt.exitInitState.mayBeInitialized()
if (!variableDescriptor.isVar()) return false; || !variableDescriptor.isVar()
if (!trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor)) return false; || !trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor)
PsiElement property = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor); ) {
assert property instanceof KtProperty; return false;
KtPropertyAccessor setter = ((KtProperty) property).getSetter(); }
if (((PropertyDescriptor) variableDescriptor).getModality() == Modality.FINAL && (setter == null || !setter.hasBody())) {
return false; PsiElement property = DescriptorToSourceUtils.descriptorToDeclaration(variableDescriptor);
} assert property instanceof KtProperty;
KtExpression variable = expression; KtPropertyAccessor setter = ((KtProperty) property).getSetter();
if (expression instanceof KtDotQualifiedExpression) { if (((PropertyDescriptor) variableDescriptor).getModality() == Modality.FINAL && (setter == null || !setter.hasBody())) {
if (((KtDotQualifiedExpression) expression).getReceiverExpression() instanceof KtThisExpression) { return false;
variable = ((KtDotQualifiedExpression) expression).getSelectorExpression(); }
}
} KtExpression variable = expression;
if (variable instanceof KtSimpleNameExpression) { if (expression instanceof KtDotQualifiedExpression) {
trace.record(IS_UNINITIALIZED, (PropertyDescriptor) variableDescriptor); if (((KtDotQualifiedExpression) expression).getReceiverExpression() instanceof KtThisExpression) {
return true; variable = ((KtDotQualifiedExpression) expression).getSelectorExpression();
} }
} }
if (variable instanceof KtSimpleNameExpression) {
trace.record(IS_UNINITIALIZED, (PropertyDescriptor) variableDescriptor);
return true;
}
return false; return false;
} }