Lines 155-183
Link Here
|
155 |
for (int i = 0, length = this.expressions.length; i < length; i++) { |
155 |
for (int i = 0, length = this.expressions.length; i < length; i++) { |
156 |
Expression expression = this.expressions[i]; |
156 |
Expression expression = this.expressions[i]; |
157 |
expression.setExpectedType(elementType); |
157 |
expression.setExpectedType(elementType); |
158 |
TypeBinding exprType = expression instanceof ArrayInitializer |
158 |
TypeBinding expressionType = expression instanceof ArrayInitializer |
159 |
? expression.resolveTypeExpecting(scope, elementType) |
159 |
? expression.resolveTypeExpecting(scope, elementType) |
160 |
: expression.resolveType(scope); |
160 |
: expression.resolveType(scope); |
161 |
if (exprType == null) |
161 |
if (expressionType == null) |
162 |
return null; |
162 |
continue; |
163 |
|
163 |
|
164 |
// Compile-time conversion required? |
164 |
// Compile-time conversion required? |
165 |
if (elementType != exprType) // must call before computeConversion() and typeMismatchError() |
165 |
if (elementType != expressionType) // must call before computeConversion() and typeMismatchError() |
166 |
scope.compilationUnitScope().recordTypeConversion(elementType, exprType); |
166 |
scope.compilationUnitScope().recordTypeConversion(elementType, expressionType); |
167 |
|
167 |
|
168 |
if ((expression.isConstantValueOfTypeAssignableToType(exprType, elementType) |
168 |
if ((expression.isConstantValueOfTypeAssignableToType(expressionType, elementType) |
169 |
|| (elementType.isBaseType() && BaseTypeBinding.isWidening(elementType.id, exprType.id))) |
169 |
|| (elementType.isBaseType() && BaseTypeBinding.isWidening(elementType.id, expressionType.id))) |
170 |
|| exprType.isCompatibleWith(elementType)) { |
170 |
|| expressionType.isCompatibleWith(elementType)) { |
171 |
expression.computeConversion(scope, elementType, exprType); |
171 |
expression.computeConversion(scope, elementType, expressionType); |
172 |
} else if (scope.isBoxingCompatibleWith(exprType, elementType) |
172 |
} else if (scope.isBoxingCompatibleWith(expressionType, elementType) |
173 |
|| (exprType.isBaseType() // narrowing then boxing ? |
173 |
|| (expressionType.isBaseType() // narrowing then boxing ? |
174 |
&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing |
174 |
&& scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5 // autoboxing |
175 |
&& !elementType.isBaseType() |
175 |
&& !elementType.isBaseType() |
176 |
&& expression.isConstantValueOfTypeAssignableToType(exprType, scope.environment().computeBoxingType(elementType)))) { |
176 |
&& expression.isConstantValueOfTypeAssignableToType(expressionType, scope.environment().computeBoxingType(elementType)))) { |
177 |
expression.computeConversion(scope, elementType, exprType); |
177 |
expression.computeConversion(scope, elementType, expressionType); |
178 |
} else { |
178 |
} else { |
179 |
scope.problemReporter().typeMismatchError(exprType, elementType, expression); |
179 |
scope.problemReporter().typeMismatchError(expressionType, elementType, expression); |
180 |
return null; |
|
|
181 |
} |
180 |
} |
182 |
} |
181 |
} |
183 |
return this.binding; |
182 |
return this.binding; |