Extract method for create fakeArgument

This commit is contained in:
Natalia.Ukhorskaya
2013-04-29 13:47:26 +04:00
parent 97bbdb0037
commit a77d4279dd
2 changed files with 17 additions and 15 deletions
@@ -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(
@@ -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,