Lines 42-53
Link Here
|
42 |
this.sourceEnd = sourceEnd; |
42 |
this.sourceEnd = sourceEnd; |
43 |
} |
43 |
} |
44 |
|
44 |
|
45 |
public FlowInfo analyseAssignment( |
45 |
public FlowInfo analyseAssignment(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo, Assignment assignment, boolean isCompound) { |
46 |
BlockScope currentScope, |
|
|
47 |
FlowContext flowContext, |
48 |
FlowInfo flowInfo, |
49 |
Assignment assignment, |
50 |
boolean isCompound) { |
51 |
|
46 |
|
52 |
// determine the rank until which we now we do not need any actual value for the field access |
47 |
// determine the rank until which we now we do not need any actual value for the field access |
53 |
int otherBindingsCount = otherBindings == null ? 0 : otherBindings.length; |
48 |
int otherBindingsCount = otherBindings == null ? 0 : otherBindings.length; |
Lines 74-84
Link Here
|
74 |
currentScope.problemReporter().enumStaticFieldUsedDuringInitialization(lastFieldBinding, this); |
69 |
currentScope.problemReporter().enumStaticFieldUsedDuringInitialization(lastFieldBinding, this); |
75 |
} |
70 |
} |
76 |
} |
71 |
} |
77 |
} |
72 |
} |
78 |
// check if final blank field |
73 |
// check if final blank field |
79 |
if (lastFieldBinding.isBlankFinal() |
74 |
if (lastFieldBinding.isBlankFinal() |
80 |
&& this.otherBindings != null // the last field binding is only assigned |
75 |
&& this.otherBindings != null // the last field binding is only assigned |
81 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { |
76 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { |
82 |
if (!flowInfo.isDefinitelyAssigned(lastFieldBinding)) { |
77 |
if (!flowInfo.isDefinitelyAssigned(lastFieldBinding)) { |
83 |
currentScope.problemReporter().uninitializedBlankFinalField( |
78 |
currentScope.problemReporter().uninitializedBlankFinalField( |
84 |
lastFieldBinding, |
79 |
lastFieldBinding, |
Lines 126-137
Link Here
|
126 |
|
121 |
|
127 |
if (isCompound) { |
122 |
if (isCompound) { |
128 |
if (otherBindingsCount == 0 |
123 |
if (otherBindingsCount == 0 |
129 |
&& lastFieldBinding.isBlankFinal() |
124 |
&& lastFieldBinding.isBlankFinal() |
130 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) |
125 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) |
131 |
&& (!flowInfo.isDefinitelyAssigned(lastFieldBinding))) { |
126 |
&& (!flowInfo.isDefinitelyAssigned(lastFieldBinding))) { |
132 |
currentScope.problemReporter().uninitializedBlankFinalField( |
127 |
currentScope.problemReporter().uninitializedBlankFinalField(lastFieldBinding, this); |
133 |
lastFieldBinding, |
|
|
134 |
this); |
135 |
} |
128 |
} |
136 |
TypeBinding lastReceiverType; |
129 |
TypeBinding lastReceiverType; |
137 |
switch (otherBindingsCount) { |
130 |
switch (otherBindingsCount) { |
Lines 164-173
Link Here
|
164 |
// the last field access is a write access |
157 |
// the last field access is a write access |
165 |
if (lastFieldBinding.isFinal()) { |
158 |
if (lastFieldBinding.isFinal()) { |
166 |
// in a context where it can be assigned? |
159 |
// in a context where it can be assigned? |
167 |
if (lastFieldBinding.isBlankFinal() |
160 |
if (otherBindingsCount == 0 |
|
|
161 |
&& lastFieldBinding.isBlankFinal() |
168 |
&& !isCompound |
162 |
&& !isCompound |
169 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding) |
163 |
&& currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { |
170 |
&& indexOfFirstFieldBinding == 1) { |
|
|
171 |
if (flowInfo.isPotentiallyAssigned(lastFieldBinding)) { |
164 |
if (flowInfo.isPotentiallyAssigned(lastFieldBinding)) { |
172 |
currentScope.problemReporter().duplicateInitializationOfBlankFinalField(lastFieldBinding, this); |
165 |
currentScope.problemReporter().duplicateInitializationOfBlankFinalField(lastFieldBinding, this); |
173 |
} else { |
166 |
} else { |
Lines 176-182
Link Here
|
176 |
flowInfo.markAsDefinitelyAssigned(lastFieldBinding); |
169 |
flowInfo.markAsDefinitelyAssigned(lastFieldBinding); |
177 |
} else { |
170 |
} else { |
178 |
currentScope.problemReporter().cannotAssignToFinalField(lastFieldBinding, this); |
171 |
currentScope.problemReporter().cannotAssignToFinalField(lastFieldBinding, this); |
179 |
if (currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { // pretend it got assigned |
172 |
if (otherBindingsCount == 0 && currentScope.allowBlankFinalFieldAssignment(lastFieldBinding)) { // pretend it got assigned |
180 |
flowInfo.markAsDefinitelyAssigned(lastFieldBinding); |
173 |
flowInfo.markAsDefinitelyAssigned(lastFieldBinding); |
181 |
} |
174 |
} |
182 |
} |
175 |
} |