update recorded EXPRESSION_TYPE of call expression
after type parameter inference completion
This commit is contained in:
@@ -274,21 +274,14 @@ public class BindingContextUtils {
|
||||
trace.report(AMBIGUOUS_LABEL.on(targetLabel));
|
||||
}
|
||||
|
||||
public static void recordExpressionType(
|
||||
@NotNull JetExpression expression, @NotNull BindingTrace trace,
|
||||
@NotNull JetScope resolutionScope, @NotNull JetTypeInfo result
|
||||
public static void updateRecordedType(
|
||||
@Nullable JetType type,
|
||||
@NotNull JetExpression expression,
|
||||
@NotNull BindingTrace trace
|
||||
) {
|
||||
JetType type = result.getType();
|
||||
if (type != null) {
|
||||
trace.record(BindingContext.EXPRESSION_TYPE, expression, type);
|
||||
}
|
||||
if (type == null) return;
|
||||
trace.record(BindingContext.EXPRESSION_TYPE, expression, type);
|
||||
trace.record(BindingContext.PROCESSED, expression);
|
||||
if (result.getDataFlowInfo() != DataFlowInfo.EMPTY) {
|
||||
trace.record(BindingContext.EXPRESSION_DATA_FLOW_INFO, expression, result.getDataFlowInfo());
|
||||
}
|
||||
if (!isExpressionWithValidReference(expression, trace.getBindingContext())) {
|
||||
trace.record(BindingContext.RESOLUTION_SCOPE, expression, resolutionScope);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -367,7 +367,7 @@ public class CandidateResolver {
|
||||
type = completeNestedCallsInference(contextForArgument);
|
||||
checkValueArgumentTypes(contextForArgument);
|
||||
}
|
||||
|
||||
BindingContextUtils.updateRecordedType(type, expression, context.trace);
|
||||
DataFlowUtils.checkType(type, expression, contextForArgument);
|
||||
}
|
||||
|
||||
@@ -397,7 +397,8 @@ public class CandidateResolver {
|
||||
if (type != null && !type.getConstructor().isDenotable()) {
|
||||
if (type.getConstructor() instanceof NumberValueTypeConstructor) {
|
||||
NumberValueTypeConstructor constructor = (NumberValueTypeConstructor) type.getConstructor();
|
||||
type = ConstantUtils.updateConstantValueType(constructor, context.expectedType, expression, context);
|
||||
type = TypeUtils.getPrimitiveNumberType(constructor, context.expectedType);
|
||||
BindingContextUtils.updateRecordedType(type, expression, context.trace);
|
||||
}
|
||||
}
|
||||
return type;
|
||||
|
||||
@@ -68,21 +68,4 @@ public class ConstantUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static JetType updateConstantValueType(
|
||||
@NotNull NumberValueTypeConstructor numberValueTypeConstructor,
|
||||
@NotNull JetType expectedType,
|
||||
@NotNull JetExpression expression,
|
||||
@NotNull ResolutionContext<?> context
|
||||
) {
|
||||
JetTypeInfo recordedTypeInfo = BindingContextUtils.getRecordedTypeInfo(expression, context.trace.getBindingContext());
|
||||
assert recordedTypeInfo != null : "Expression " + expression + " should have been analyzed";
|
||||
JetScope resolutionScope = context.trace.get(BindingContext.RESOLUTION_SCOPE, expression);
|
||||
assert resolutionScope != null : "Expression " + expression + " should have been analyzed";
|
||||
|
||||
JetType type = TypeUtils.getPrimitiveNumberType(numberValueTypeConstructor, expectedType);
|
||||
BindingContextUtils.recordExpressionType(expression, context.trace, resolutionScope,
|
||||
JetTypeInfo.create(type, recordedTypeInfo.getDataFlowInfo()));
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user