ongoing refactoring
This commit is contained in:
Generated
+40
-111
@@ -14,31 +14,8 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
|
||||
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/function/cases/defaultParameters.kt" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/FunctionTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/FunctionTranslator.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/basicmethod.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/basicmethod.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/basicproperty.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/basicproperty.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObject.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObject.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObjectInterface.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObjectInterface.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObjectMethod.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/classObjectMethod.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/enclosed.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/enclosed.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/forwardTypeParameter.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/forwardTypeParameter.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/inheritance.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/inheritance.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/inheritedInnerClass.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/inheritedInnerClass.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/initializerBlockDImpl.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/initializerBlockDImpl.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/innerClass.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/innerClass.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/propertyInInitializer.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/propertyInInitializer.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/simpleBox.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/simpleBox.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/traitproperty.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/unsupported/traitproperty.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/usesJava/exceptionConstructor.jet" afterPath="$PROJECT_DIR$/translator/testFiles/examples/sortedTests/usesJava/exceptionConstructor.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/expression/misc/cases/localProperty.jet" afterPath="$PROJECT_DIR$/translator/testFiles/expression/misc/cases/localProperty.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/expression/operation/cases/assign.jet" afterPath="$PROJECT_DIR$/translator/testFiles/expression/operation/cases/assign.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/trait/cases/funDelegation.jet" afterPath="$PROJECT_DIR$/translator/testFiles/trait/cases/funDelegation.jet" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
|
||||
</list>
|
||||
<ignored path="k2js.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
@@ -212,7 +189,7 @@
|
||||
<favorites_list name="k2js" />
|
||||
</component>
|
||||
<component name="FileEditorManager">
|
||||
<splitter split-orientation="horizontal" split-proportion="0.50561196">
|
||||
<splitter split-orientation="horizontal" split-proportion="0.46178514">
|
||||
<split-first>
|
||||
<leaf>
|
||||
<file leaf-file-name="FunctionTranslator.java" pinned="false" current="false" current-in-tab="false">
|
||||
@@ -227,10 +204,10 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="BindingUtils.java" pinned="false" current="false" current-in-tab="true">
|
||||
<file leaf-file-name="BindingUtils.java" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="110" column="0" selection-start="5166" selection-end="5166" vertical-scroll-proportion="0.72521245">
|
||||
<state line="104" column="28" selection-start="4744" selection-end="4744" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -281,10 +258,10 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="RangeTest.java" pinned="false" current="false" current-in-tab="false">
|
||||
<file leaf-file-name="RangeTest.java" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/RangeTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.0">
|
||||
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.3900135">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
@@ -330,7 +307,7 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="defaultParameters.js" pinned="false" current="true" current-in-tab="true">
|
||||
<file leaf-file-name="defaultParameters.js" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/function/out/defaultParameters.js">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||
@@ -339,12 +316,14 @@
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="CallTranslator.java" pinned="false" current="false" current-in-tab="false">
|
||||
<file leaf-file-name="CallTranslator.java" pinned="false" current="false" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="72" column="37" selection-start="4112" selection-end="4112" vertical-scroll-proportion="0.0">
|
||||
<state line="163" column="48" selection-start="8734" selection-end="8734" vertical-scroll-proportion="0.8690958">
|
||||
<folding>
|
||||
<element signature="e#3699#3713#0" expanded="true" />
|
||||
<element signature="imports" expanded="true" />
|
||||
<element signature="e#5459#5473#0" expanded="true" />
|
||||
<element signature="e#9985#9999#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
@@ -711,58 +690,6 @@
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="k2js" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="translator" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="testFiles" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="expression" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="function" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="out" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="k2js" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="translator" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="testFiles" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="expression" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="function" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="cases" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="k2js" />
|
||||
@@ -908,7 +835,7 @@
|
||||
<recent name="org.jetbrains.k2js.test.examples" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="JUnit.FunctionTest.defaultParameters">
|
||||
<component name="RunManager" selected="JUnit.tests">
|
||||
<configuration default="false" name="ArrayListTest.access" type="JUnit" factoryName="JUnit" temporary="true">
|
||||
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
|
||||
<pattern>
|
||||
@@ -1294,7 +1221,7 @@
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20363443" sideWeight="0.284342" order="1" side_tool="true" content_ui="tabs" />
|
||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.7002882" order="4" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.22073758" sideWeight="0.7588857" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.22073758" sideWeight="0.7588857" order="0" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24111432" sideWeight="0.8530198" order="2" side_tool="false" content_ui="tabs" />
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.0908605" sideWeight="0.7146974" order="2" side_tool="false" content_ui="combo" />
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
|
||||
@@ -1339,7 +1266,7 @@
|
||||
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
|
||||
<option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
|
||||
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="switch to using ValueParameterDescriptor instead of JetParameter when translating function declarations implemented support for implicit 'it' parameter added 'clear' function to ArrayList temporary implementation" />
|
||||
<option name="LAST_COMMIT_MESSAGE" value="switch to using descriptors on call site default arguments support" />
|
||||
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
|
||||
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
|
||||
@@ -1352,7 +1279,6 @@
|
||||
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
|
||||
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
|
||||
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
|
||||
<MESSAGE value="string templates with primitive values." />
|
||||
<MESSAGE value="removed accidentally commited files." />
|
||||
<MESSAGE value="very simple try/catch/finally support." />
|
||||
<MESSAGE value="range standard implementation added. tests added." />
|
||||
@@ -1377,6 +1303,7 @@
|
||||
<MESSAGE value="resolved part of the problem" />
|
||||
<MESSAGE value="changed tests not to use std lib for now /*all tests pass*/" />
|
||||
<MESSAGE value="switch to using ValueParameterDescriptor instead of JetParameter when translating function declarations implemented support for implicit 'it' parameter added 'clear' function to ArrayList temporary implementation" />
|
||||
<MESSAGE value="switch to using descriptors on call site default arguments support" />
|
||||
</component>
|
||||
<component name="XDebuggerManager">
|
||||
<breakpoint-manager />
|
||||
@@ -1400,13 +1327,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/RangeTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="jar://C:/Program Files/Java/jdk1.6.0_29/src.zip!/java/util/Collections.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="2969" column="0" selection-start="115173" selection-end="115173" vertical-scroll-proportion="0.0">
|
||||
@@ -1463,22 +1383,6 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="110" column="0" selection-start="5166" selection-end="5166" vertical-scroll-proportion="0.72521245">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="72" column="37" selection-start="4112" selection-end="4112" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="e#3699#3713#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/function/cases/defaultParameters.kt">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="14" column="0" selection-start="232" selection-end="232" vertical-scroll-proportion="0.0">
|
||||
@@ -1500,6 +1404,31 @@
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="163" column="48" selection-start="8734" selection-end="8734" vertical-scroll-proportion="0.8690958">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
<element signature="e#5459#5473#0" expanded="true" />
|
||||
<element signature="e#9985#9999#0" expanded="true" />
|
||||
</folding>
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="104" column="28" selection-start="4744" selection-end="4744" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/RangeTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.3900135">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</component>
|
||||
<component name="masterDetails">
|
||||
<states>
|
||||
|
||||
@@ -35,88 +35,132 @@ import static org.jetbrains.k2js.translate.utils.TranslationUtils.*;
|
||||
//TODO: write tests on calling backing fields as functions
|
||||
public final class CallTranslator extends AbstractTranslator {
|
||||
|
||||
private static final class Builder {
|
||||
|
||||
@NotNull
|
||||
private final TranslationContext context;
|
||||
|
||||
private Builder(@NotNull TranslationContext context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private CallTranslator buildFromUnary(@NotNull JetUnaryExpression unaryExpression) {
|
||||
JsExpression receiver = TranslationUtils.translateBaseExpression(context, unaryExpression);
|
||||
List<JsExpression> arguments = Collections.emptyList();
|
||||
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression
|
||||
(context.bindingContext(), unaryExpression.getOperationReference());
|
||||
assert descriptor instanceof FunctionDescriptor;
|
||||
return new CallTranslator(receiver, arguments, (FunctionDescriptor) descriptor, context);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private CallTranslator buildFromBinary(@NotNull JetBinaryExpression binaryExpression,
|
||||
boolean swapReceiverAndArgument) {
|
||||
|
||||
JsExpression leftExpression = translateLeftExpression(context, binaryExpression);
|
||||
JsExpression rightExpression = translateRightExpression(context, binaryExpression);
|
||||
|
||||
JsExpression receiver;
|
||||
List<JsExpression> arguments;
|
||||
if (swapReceiverAndArgument) {
|
||||
receiver = rightExpression;
|
||||
arguments = Arrays.asList(leftExpression);
|
||||
} else {
|
||||
receiver = leftExpression;
|
||||
arguments = Arrays.asList(rightExpression);
|
||||
}
|
||||
|
||||
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression
|
||||
(context.bindingContext(), binaryExpression.getOperationReference());
|
||||
assert descriptor instanceof FunctionDescriptor;
|
||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
||||
return new CallTranslator(receiver, arguments, functionDescriptor, context);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private CallTranslator buildFromDotQualified(@NotNull JetDotQualifiedExpression dotExpression) {
|
||||
JsExpression receiver = translateReceiver(context, dotExpression);
|
||||
//TODO: util?
|
||||
JetExpression selectorExpression = dotExpression.getSelectorExpression();
|
||||
assert selectorExpression instanceof JetCallExpression;
|
||||
JetCallExpression callExpression = (JetCallExpression) selectorExpression;
|
||||
FunctionDescriptor descriptor =
|
||||
getFunctionDescriptorForCallExpression(context.bindingContext(), callExpression);
|
||||
List<JsExpression> arguments = translateArgumentsForCallExpression(callExpression, context);
|
||||
return new CallTranslator(receiver, arguments, descriptor, context);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private CallTranslator buildFromCallExpression(@NotNull JetCallExpression callExpression) {
|
||||
FunctionDescriptor descriptor =
|
||||
getFunctionDescriptorForCallExpression(context.bindingContext(), callExpression);
|
||||
JsExpression receiver = getImplicitReceiver(context, descriptor);
|
||||
List<JsExpression> arguments = translateArgumentsForCallExpression(callExpression, context);
|
||||
return new CallTranslator(receiver, arguments, descriptor, context);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<JsExpression> translateArgumentsForCallExpression(@NotNull JetCallExpression callExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
List<JsExpression> result = new ArrayList<JsExpression>();
|
||||
ResolvedCall<?> resolvedCall = getResolvedCallForCallExpression(context.bindingContext(), callExpression);
|
||||
Map<ValueParameterDescriptor, ResolvedValueArgument> formalToActualArguments = resolvedCall.getValueArguments();
|
||||
for (ValueParameterDescriptor parameterDescriptor : resolvedCall.getResultingDescriptor().getValueParameters()) {
|
||||
JetExpression argument = getActualArgument(formalToActualArguments, parameterDescriptor, context);
|
||||
result.add(Translation.translateAsExpression(argument, context));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JetExpression getActualArgument(
|
||||
@NotNull Map<ValueParameterDescriptor, ResolvedValueArgument> formalToActualArguments,
|
||||
@NotNull ValueParameterDescriptor parameterDescriptor, @NotNull TranslationContext context) {
|
||||
ResolvedValueArgument actualArgument = formalToActualArguments.get(parameterDescriptor);
|
||||
if (actualArgument instanceof DefaultValueArgument) {
|
||||
assert parameterDescriptor.hasDefaultValue() : "Unsupplied parameter must have default value.";
|
||||
JetParameter psiParameter = getParameterForDescriptor(context.bindingContext(), parameterDescriptor);
|
||||
JetExpression defaultValue = psiParameter.getDefaultValue();
|
||||
assert defaultValue != null : "No default value found in PSI.";
|
||||
return defaultValue;
|
||||
}
|
||||
List<JetExpression> argumentExpressions = actualArgument.getArgumentExpressions();
|
||||
assert !argumentExpressions.isEmpty() : "Actual arguments must be supplied.";
|
||||
assert argumentExpressions.size() == 1 : "Varargs not supported.";
|
||||
return argumentExpressions.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsExpression translate(@NotNull JetUnaryExpression unaryExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
JsExpression receiver = TranslationUtils.translateBaseExpression(context, unaryExpression);
|
||||
List<JsExpression> arguments = Collections.emptyList();
|
||||
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression
|
||||
(context.bindingContext(), unaryExpression.getOperationReference());
|
||||
assert descriptor instanceof FunctionDescriptor;
|
||||
return translate(context, receiver, arguments, (FunctionDescriptor) descriptor);
|
||||
return (new Builder(context).buildFromUnary(unaryExpression)).translate();
|
||||
}
|
||||
|
||||
//TODO: method too long
|
||||
@NotNull
|
||||
public static JsExpression translate(@NotNull JetDotQualifiedExpression dotExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
JsExpression receiver = translateReceiver(context, dotExpression);
|
||||
//TODO: util?
|
||||
JetExpression selectorExpression = dotExpression.getSelectorExpression();
|
||||
assert selectorExpression instanceof JetCallExpression;
|
||||
JetCallExpression callExpression = (JetCallExpression) selectorExpression;
|
||||
FunctionDescriptor descriptor =
|
||||
getFunctionDescriptorForCallExpression(context.bindingContext(), callExpression);
|
||||
List<JsExpression> arguments = translateArgumentsForCallExpression(callExpression, context);
|
||||
return translate(context, receiver, arguments, descriptor);
|
||||
return (new Builder(context).buildFromDotQualified(dotExpression)).translate();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<JsExpression> translateArgumentsForCallExpression(@NotNull JetCallExpression callExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
List<JsExpression> result = new ArrayList<JsExpression>();
|
||||
ResolvedCall<?> resolvedCall = getResolvedCallForCallExpression(context.bindingContext(), callExpression);
|
||||
Map<ValueParameterDescriptor, ResolvedValueArgument> formalToActualArguments = resolvedCall.getValueArguments();
|
||||
for (ValueParameterDescriptor parameterDescriptor : resolvedCall.getResultingDescriptor().getValueParameters()) {
|
||||
JetExpression argument = getActualArgument(formalToActualArguments, parameterDescriptor, context);
|
||||
result.add(Translation.translateAsExpression(argument, context));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JetExpression getActualArgument(
|
||||
@NotNull Map<ValueParameterDescriptor, ResolvedValueArgument> formalToActualArguments,
|
||||
@NotNull ValueParameterDescriptor parameterDescriptor, @NotNull TranslationContext context) {
|
||||
ResolvedValueArgument actualArgument = formalToActualArguments.get(parameterDescriptor);
|
||||
if (actualArgument instanceof DefaultValueArgument) {
|
||||
assert parameterDescriptor.hasDefaultValue() : "Unsupplied parameter must have default value.";
|
||||
JetParameter psiParameter = getParameterForDescriptor(context.bindingContext(), parameterDescriptor);
|
||||
JetExpression defaultValue = psiParameter.getDefaultValue();
|
||||
assert defaultValue != null : "No default value found in PSI.";
|
||||
return defaultValue;
|
||||
}
|
||||
List<JetExpression> argumentExpressions = actualArgument.getArgumentExpressions();
|
||||
assert !argumentExpressions.isEmpty() : "Actual arguments must be supplied.";
|
||||
assert argumentExpressions.size() == 1 : "Varargs not supported.";
|
||||
return argumentExpressions.get(0);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsExpression translate(@NotNull JetCallExpression callExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
FunctionDescriptor descriptor =
|
||||
(FunctionDescriptor) getFunctionDescriptorForCallExpression(context.bindingContext(), callExpression);
|
||||
JsExpression receiver = getImplicitReceiver(context, descriptor);
|
||||
List<JsExpression> arguments = translateArgumentsForCallExpression(callExpression, context);
|
||||
return translate(context, receiver, arguments, descriptor);
|
||||
return (new Builder(context).buildFromCallExpression(callExpression)).translate();
|
||||
}
|
||||
|
||||
//TODO: refactor
|
||||
@NotNull
|
||||
public static JsExpression translate(@NotNull JetBinaryExpression binaryExpression,
|
||||
@NotNull TranslationContext context) {
|
||||
JsExpression receiver = translateLeftExpression(context, binaryExpression);
|
||||
List<JsExpression> arguments = Arrays.asList(translateRightExpression(context, binaryExpression));
|
||||
DeclarationDescriptor descriptor = getDescriptorForReferenceExpression
|
||||
(context.bindingContext(), binaryExpression.getOperationReference());
|
||||
assert descriptor instanceof FunctionDescriptor;
|
||||
FunctionDescriptor functionDescriptor = (FunctionDescriptor) descriptor;
|
||||
boolean shouldSwapReceiverAndArgument = isInOrNotInOperation(binaryExpression);
|
||||
JsExpression result = (new Builder(context))
|
||||
.buildFromBinary(binaryExpression, shouldSwapReceiverAndArgument).translate();
|
||||
if (isInOrNotInOperation(binaryExpression)) {
|
||||
JsExpression inRangeCheck = translateAsInOperation(context, receiver, arguments, functionDescriptor);
|
||||
return mayBeWrapWithNegation(inRangeCheck, isNotInOperation(binaryExpression));
|
||||
return mayBeWrapWithNegation(result, isNotInOperation(binaryExpression));
|
||||
}
|
||||
return translate(context, receiver, arguments, functionDescriptor);
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -128,31 +172,6 @@ public final class CallTranslator extends AbstractTranslator {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JsExpression translateAsInOperation(@NotNull TranslationContext context,
|
||||
@NotNull JsExpression receiver,
|
||||
@NotNull List<JsExpression> arguments,
|
||||
@NotNull FunctionDescriptor functionDescriptor) {
|
||||
return translateWithReceiverAndArgumentSwapped(context, receiver, arguments, functionDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JsExpression translateWithReceiverAndArgumentSwapped(@NotNull TranslationContext context,
|
||||
@NotNull JsExpression receiver,
|
||||
@NotNull List<JsExpression> arguments,
|
||||
@NotNull FunctionDescriptor functionDescriptor) {
|
||||
assert arguments.size() == 1 : "Must have one argument.";
|
||||
return translate(context, arguments.get(0), Arrays.asList(receiver), functionDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static JsExpression translate(@NotNull TranslationContext context,
|
||||
@Nullable JsExpression receiver,
|
||||
@NotNull List<JsExpression> arguments,
|
||||
@NotNull FunctionDescriptor functionDescriptor) {
|
||||
return (new CallTranslator(receiver, arguments, functionDescriptor, context)).translate();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private final JsExpression receiver;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user