Refactoring (JetFlowInformationProvider)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user