Skip to content

Commit 43e4265

Browse files
committed
Refactoring CallTranslator.
1 parent 8b98455 commit 43e4265

File tree

1 file changed

+26
-19
lines changed

1 file changed

+26
-19
lines changed

js/js.translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
* @author Pavel Talanov
4545
*/
4646
//TODO: write tests on calling backing fields as functions
47-
//TODO: refactor call parameters to be used across the class
47+
//TODO: think of the refactoring the class
4848
public final class CallTranslator extends AbstractTranslator {
4949

5050
private static class CallParameters {
@@ -96,13 +96,15 @@ public CallParameters(@Nullable JsExpression receiver, @NotNull JsExpression fun
9696

9797
@NotNull
9898
/*package*/ JsExpression translate() {
99+
if (isExpressionAsFunction()) {
100+
return expressionAsFunctionCall();
101+
}
99102
if (isIntrinsic()) {
100103
return intrinsicInvocation();
101104
}
102105
if (isConstructor()) {
103106
return constructorCall();
104107
}
105-
//NOTE: treat native extension function calls as usual calls
106108
if (isNativeExtensionFunctionCall()) {
107109
return nativeExtensionCall();
108110
}
@@ -112,13 +114,17 @@ public CallParameters(@Nullable JsExpression receiver, @NotNull JsExpression fun
112114
if (isExtensionFunction()) {
113115
return extensionFunctionCall();
114116
}
115-
return methodCall();
117+
return methodCall(callParameters(resolveThisObject(/*just get qualifier if null*/ true)));
116118
}
117119

118-
@NotNull
119-
private JsExpression nativeExtensionCall() {
120-
receiver = getExtensionFunctionCallReceiver();
121-
return methodCall();
120+
private boolean isExpressionAsFunction() {
121+
return callee != null;
122+
}
123+
124+
private JsExpression expressionAsFunctionCall() {
125+
assert callee != null;
126+
CallParameters expressionAsFunctionParameters = new CallParameters(null, callee);
127+
return methodCall(expressionAsFunctionParameters);
122128
}
123129

124130
private boolean isIntrinsic() {
@@ -155,6 +161,12 @@ private boolean isNativeExtensionFunctionCall() {
155161
return AnnotationsUtils.isNativeObject(descriptor) && isExtensionFunction();
156162
}
157163

164+
@NotNull
165+
private JsExpression nativeExtensionCall() {
166+
receiver = getExtensionFunctionCallReceiver();
167+
return methodCall(callParameters(resolveThisObject(/*just get qualifier if null = */ true)));
168+
}
169+
158170
private boolean isExtensionFunctionLiteral() {
159171
boolean isLiteral = descriptor instanceof VariableAsFunctionDescriptor
160172
|| descriptor instanceof ExpressionAsFunctionDescriptor;
@@ -187,7 +199,7 @@ private JsInvocation generateCallMethodInvocation() {
187199
JsNameRef callMethodNameRef = AstUtil.newQualifiedNameRef("call");
188200
JsInvocation callMethodInvocation = new JsInvocation();
189201
callMethodInvocation.setQualifier(callMethodNameRef);
190-
setQualifier(callMethodInvocation, callParameters().functionReference);
202+
setQualifier(callMethodInvocation, callParameters(resolveThisObject(/*just get qualifier if null*/ true)).functionReference);
191203
return callMethodInvocation;
192204
}
193205

@@ -226,8 +238,9 @@ private JsExpression getExtensionFunctionCallReceiver() {
226238
@NotNull
227239
private JsExpression constructExtensionFunctionCall(@NotNull JsExpression receiver) {
228240
List<JsExpression> argumentList = generateExtensionCallArgumentList(receiver);
229-
JsExpression functionReference = callParameters().functionReference;
230-
setQualifier(functionReference, callParameters().receiver);
241+
CallParameters callParameters = callParameters(resolveThisObject(/*just get qualifier if null*/ true));
242+
JsExpression functionReference = callParameters.functionReference;
243+
setQualifier(functionReference, callParameters.receiver);
231244
return newInvocation(functionReference, argumentList);
232245
}
233246

@@ -241,8 +254,7 @@ private List<JsExpression> generateExtensionCallArgumentList(@NotNull JsExpressi
241254
}
242255

243256
@NotNull
244-
private JsExpression methodCall() {
245-
final CallParameters callParameters = callParameters();
257+
private JsExpression methodCall(@NotNull final CallParameters callParameters) {
246258
return callType.constructCall(callParameters.receiver, new CallType.CallConstructor() {
247259
@NotNull
248260
@Override
@@ -257,14 +269,9 @@ public JsExpression construct(@Nullable JsExpression receiver) {
257269
}
258270

259271
@NotNull
260-
private CallParameters callParameters() {
261-
// TODO: this check corresponds to expression as function, make it clearer
262-
if (callee != null) {
263-
return new CallParameters(null, callee);
264-
}
265-
JsExpression thisObject = resolveThisObject(/*just get qualifier if null*/ true);
272+
private CallParameters callParameters(@Nullable JsExpression receiver) {
266273
JsExpression functionReference = functionReference();
267-
return new CallParameters(thisObject, functionReference);
274+
return new CallParameters(receiver, functionReference);
268275
}
269276

270277
@NotNull

0 commit comments

Comments
 (0)