Extract method for create fakeArgument
This commit is contained in:
+1
-1
@@ -766,7 +766,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
|
|||||||
|
|
||||||
// a[i]++/-- takes special treatment because it is actually let j = i, arr = a in arr.set(j, a.get(j).inc())
|
// a[i]++/-- takes special treatment because it is actually let j = i, arr = a in arr.set(j, a.get(j).inc())
|
||||||
if ((operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) && baseExpression instanceof JetArrayAccessExpression) {
|
if ((operationType == JetTokens.PLUSPLUS || operationType == JetTokens.MINUSMINUS) && baseExpression instanceof JetArrayAccessExpression) {
|
||||||
JetExpression stubExpression = ExpressionTypingUtils.createStubExpressionOfNecessaryType(baseExpression.getProject(), type, context.trace);
|
JetExpression stubExpression = ExpressionTypingUtils.createFakeExpressionOfType(baseExpression.getProject(), context.trace, "$e", type);
|
||||||
resolveArrayAccessSetMethod((JetArrayAccessExpression) baseExpression,
|
resolveArrayAccessSetMethod((JetArrayAccessExpression) baseExpression,
|
||||||
stubExpression,
|
stubExpression,
|
||||||
context.replaceExpectedType(NO_EXPECTED_TYPE).replaceBindingTrace(
|
context.replaceExpectedType(NO_EXPECTED_TYPE).replaceBindingTrace(
|
||||||
|
|||||||
+16
-14
@@ -206,14 +206,6 @@ public class ExpressionTypingUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static JetExpression createStubExpressionOfNecessaryType(@NotNull Project project, @NotNull JetType type, @NotNull BindingTrace trace) {
|
|
||||||
JetExpression expression = JetPsiFactory.createExpression(project, "$e");
|
|
||||||
trace.record(PROCESSED, expression);
|
|
||||||
trace.record(EXPRESSION_TYPE, expression, type);
|
|
||||||
return expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isVariableIterable(@NotNull ExpressionTypingServices expressionTypingServices,
|
public static boolean isVariableIterable(@NotNull ExpressionTypingServices expressionTypingServices,
|
||||||
@NotNull Project project, @NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope) {
|
@NotNull Project project, @NotNull VariableDescriptor variableDescriptor, @NotNull JetScope scope) {
|
||||||
JetExpression expression = JetPsiFactory.createExpression(project, "fake");
|
JetExpression expression = JetPsiFactory.createExpression(project, "fake");
|
||||||
@@ -339,18 +331,28 @@ public class ExpressionTypingUtils {
|
|||||||
@NotNull Name name,
|
@NotNull Name name,
|
||||||
@NotNull JetType... argumentTypes
|
@NotNull JetType... argumentTypes
|
||||||
) {
|
) {
|
||||||
TemporaryBindingTrace traceWithFakeArgumentInfo = TemporaryBindingTrace.create(context.trace, "trace to store fake argument for", name);
|
TemporaryBindingTrace traceWithFakeArgumentInfo = TemporaryBindingTrace.create(context.trace, "trace to store fake argument for",
|
||||||
int index = 0;
|
name);
|
||||||
List<JetExpression> fakeArguments = Lists.newArrayList();
|
List<JetExpression> fakeArguments = Lists.newArrayList();
|
||||||
for (JetType type : argumentTypes) {
|
for (JetType type : argumentTypes) {
|
||||||
JetReferenceExpression fakeArgument = JetPsiFactory.createSimpleName(context.expressionTypingServices.getProject(), "fakeArgument" + index++);
|
fakeArguments.add(createFakeExpressionOfType(context.expressionTypingServices.getProject(), traceWithFakeArgumentInfo,
|
||||||
fakeArguments.add(fakeArgument);
|
"fakeArgument" + fakeArguments.size(), type));
|
||||||
traceWithFakeArgumentInfo.record(EXPRESSION_TYPE, fakeArgument, type);
|
|
||||||
traceWithFakeArgumentInfo.record(PROCESSED, fakeArgument);
|
|
||||||
}
|
}
|
||||||
return makeAndResolveFakeCall(receiver, context.replaceBindingTrace(traceWithFakeArgumentInfo), fakeArguments, name).getSecond();
|
return makeAndResolveFakeCall(receiver, context.replaceBindingTrace(traceWithFakeArgumentInfo), fakeArguments, name).getSecond();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static JetExpression createFakeExpressionOfType(
|
||||||
|
@NotNull Project project,
|
||||||
|
@NotNull BindingTrace trace,
|
||||||
|
@NotNull String argumentName,
|
||||||
|
@NotNull JetType argumentType
|
||||||
|
) {
|
||||||
|
JetExpression fakeExpression = JetPsiFactory.createExpression(project, argumentName);
|
||||||
|
trace.record(EXPRESSION_TYPE, fakeExpression, argumentType);
|
||||||
|
trace.record(PROCESSED, fakeExpression);
|
||||||
|
return fakeExpression;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static OverloadResolutionResults<FunctionDescriptor> resolveFakeCall(
|
public static OverloadResolutionResults<FunctionDescriptor> resolveFakeCall(
|
||||||
@NotNull ExpressionTypingContext context,
|
@NotNull ExpressionTypingContext context,
|
||||||
|
|||||||
Reference in New Issue
Block a user