Introduced OperationTranslator class and started work on Unary Expression.

This commit is contained in:
Pavel Talanov
2011-11-14 21:19:32 +04:00
parent 4111833376
commit 29ae566681
5 changed files with 219 additions and 165 deletions
+127 -119
View File
@@ -6,8 +6,11 @@
</component>
<component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -45,7 +48,7 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="124" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="92" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -58,7 +61,7 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="129" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="97" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -124,13 +127,42 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.5034388">
<splitter split-orientation="horizontal" split-proportion="0.49724898">
<split-first>
<leaf>
<file leaf-file-name="BasicClassTest.java" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="BasicClassTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="70" selection-start="957" selection-end="957" vertical-scroll-proportion="0.352649">
<state line="36" column="70" selection-start="957" selection-end="957" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="318" column="0" selection-start="14181" selection-end="14181" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OperationTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="64" selection-start="2745" selection-end="2745" vertical-scroll-proportion="0.8608838">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetBinaryExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="54" column="0" selection-start="1504" selection-end="1504" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -172,33 +204,6 @@
</provider>
</entry>
</file>
<file leaf-file-name="TranslationTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="89" column="0" selection-start="3196" selection-end="3196" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AstUtil.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="262" column="22" selection-start="9090" selection-end="9090" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JsIf.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsIf.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="335" selection-end="335" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="namespaceCustomAccessors.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/out/namespaceCustomAccessors.js">
<provider selected="true" editor-type-id="text-editor">
@@ -221,19 +226,19 @@
</split-first>
<split-second>
<leaf>
<file leaf-file-name="TranslationContext.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<file leaf-file-name="Translation.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="19" selection-start="647" selection-end="647" vertical-scroll-proportion="0.0">
<state line="50" column="0" selection-start="1703" selection-end="1703" vertical-scroll-proportion="0.7495908">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Translation.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java">
<file leaf-file-name="ExpressionTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="35" column="20" selection-start="1177" selection-end="1177" vertical-scroll-proportion="0.0">
<state line="24" column="0" selection-start="705" selection-end="705" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -293,10 +298,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="methodDeclarationAndCall.kt" pinned="false" current="false" current-in-tab="true">
<file leaf-file-name="methodDeclarationAndCall.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/methodDeclarationAndCall.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="6" selection-start="36" selection-end="159" vertical-scroll-proportion="0.08173077">
<state line="3" column="6" selection-start="36" selection-end="159" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -332,11 +337,7 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
@@ -348,6 +349,10 @@
<option value="$PROJECT_DIR$/translator/testFiles/class/cases/simpleInitializer.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/class/cases/methodDeclarationAndCall.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
</list>
</option>
</component>
@@ -989,7 +994,7 @@
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
<editor active="true" />
<editor active="false" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32907662" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
@@ -1004,7 +1009,7 @@
<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.2224599" sideWeight="0.6637931" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33620688" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33620688" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<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" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3275862" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
@@ -1043,7 +1048,7 @@
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Renamed function test suite to expression test suite. Work in progress on constructor parameters." />
<option name="LAST_COMMIT_MESSAGE" value="Found a bug so work on constructor parameters has stopped.&#10;i" />
<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" />
@@ -1074,6 +1079,7 @@
<MESSAGE value="Added Translation class for better instance creation control over the code." />
<MESSAGE value="Added anonymous initializer support in class declarations." />
<MESSAGE value="Renamed function test suite to expression test suite. Work in progress on constructor parameters." />
<MESSAGE value="Found a bug so work on constructor parameters has stopped.&#10;i" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1083,62 +1089,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/twoClassesWithProperties.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="11" selection-start="151" selection-end="151" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="147" column="9" selection-start="7203" selection-end="7203" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="89" column="0" selection-start="3196" selection-end="3196" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/incrementProperty.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="13" selection-start="13" selection-end="13" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/simpleInitializer.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="7" selection-start="67" selection-end="67" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="56" column="103" selection-start="2377" selection-end="2377" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="50" selection-start="371" selection-end="371" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/incrementProperty.js">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="45" selection-start="233" selection-end="233" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/classInstantiation.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">
@@ -1153,13 +1103,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/methodDeclarationAndCall.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="6" selection-start="36" selection-end="159" vertical-scroll-proportion="0.08173077">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="0" selection-start="1865" selection-end="1865" vertical-scroll-proportion="0.0">
@@ -1174,13 +1117,6 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="130" column="0" selection-start="5799" selection-end="5799" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassInheritanceTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="25" column="11" selection-start="575" selection-end="575" vertical-scroll-proportion="0.0">
@@ -1190,11 +1126,83 @@
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="70" selection-start="957" selection-end="957" vertical-scroll-proportion="0.352649">
<state line="36" column="70" selection-start="957" selection-end="957" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="262" column="22" selection-start="9090" selection-end="9090" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsIf.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="335" selection-end="335" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/methodDeclarationAndCall.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="6" selection-start="36" selection-end="159" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="19" selection-start="647" selection-end="647" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="24" column="0" selection-start="705" selection-end="705" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="0" selection-start="1703" selection-end="1703" vertical-scroll-proportion="0.7495908">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="318" column="0" selection-start="14181" selection-end="14181" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="89" column="0" selection-start="3196" selection-end="3196" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="54" column="0" selection-start="1504" selection-end="1504" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="64" selection-start="2745" selection-end="2745" vertical-scroll-proportion="0.8608838">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
@@ -10,11 +10,9 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -81,42 +79,9 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitBinaryExpression(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) {
JsInvocation setterCall = translateAsSetterCall(expression, context);
if (setterCall != null) {
return setterCall;
}
return translateAsBinaryOperation(expression, context);
return Translation.operationTranslator(context).translate(expression);
}
//TODO method too long
@Nullable
public JsInvocation translateAsSetterCall(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) {
JetToken jetOperationToken = (JetToken) expression.getOperationToken();
if (!OperatorTable.isAssignment(jetOperationToken)) {
return null;
}
JetExpression leftExpression = expression.getLeft();
JsInvocation setterCall = Translation.propertyAccessTranslator(context).resolveAsPropertySet(leftExpression);
if (setterCall == null) {
return null;
}
JetExpression rightExpression = expression.getRight();
assert rightExpression != null : "Selector should not be null";
JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context));
setterCall.setArguments(Arrays.asList(right));
return setterCall;
}
@NotNull
private JsNode translateAsBinaryOperation(@NotNull JetBinaryExpression expression, @NotNull TranslationContext context) {
JsExpression left = AstUtil.convertToExpression(expression.getLeft().accept(this, context));
JetExpression rightExpression = expression.getRight();
assert rightExpression != null : "Binary expression should have a right expression";
JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context));
JetToken jetOperationToken = (JetToken) expression.getOperationToken();
return new JsBinaryOperation(OperatorTable.getBinaryOperator(jetOperationToken), left, right);
}
//TODO support other cases
@Override
@@ -349,15 +314,12 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
return selector;
}
//TODO: implement unary operations
// @Override
// @NotNull
// public JsNode visitPrefixExpression(@NotNull JetUnaryExpression expression,
// @NotNull TranslationContext context) {
// JsExpression baseExpression = AstUtil.convertToExpression(expression.accept(this, context));
// expression
//
// }
@NotNull
public JsNode visitPrefixExpression(@NotNull JetUnaryExpression expression,
@NotNull TranslationContext context) {
return Translation.operationTranslator(context).translate(expression);
}
}
@@ -0,0 +1,79 @@
package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsInvocation;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetBinaryExpression;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetUnaryExpression;
import org.jetbrains.jet.lexer.JetToken;
import java.util.Arrays;
/**
* @author Talanov Pavel
*/
public final class OperationTranslator extends AbstractTranslator {
@NotNull
static public OperationTranslator newInstance(@NotNull TranslationContext context) {
return new OperationTranslator(context);
}
private OperationTranslator(TranslationContext context) {
super(context);
}
@NotNull
JsExpression translate(JetUnaryExpression expression) {
return translationContext().program().getBooleanLiteral(false);
}
@NotNull
JsExpression translate(@NotNull JetBinaryExpression expression) {
JsInvocation setterCall = translateAsSetterCall(expression);
if (setterCall != null) {
return setterCall;
}
return translateAsBinaryOperation(expression);
}
//TODO method too long
@Nullable
public JsInvocation translateAsSetterCall(@NotNull JetBinaryExpression expression) {
JetToken jetOperationToken = (JetToken) expression.getOperationToken();
if (!OperatorTable.isAssignment(jetOperationToken)) {
return null;
}
JetExpression leftExpression = expression.getLeft();
JsInvocation setterCall = Translation.propertyAccessTranslator(translationContext()).
resolveAsPropertySetterCall(leftExpression);
if (setterCall == null) {
return null;
}
JetExpression rightExpression = expression.getRight();
assert rightExpression != null : "Selector should not be null";
JsExpression right = AstUtil.convertToExpression
(Translation.translateExpression(rightExpression, translationContext()));
setterCall.setArguments(Arrays.asList(right));
return setterCall;
}
@NotNull
private JsExpression translateAsBinaryOperation(@NotNull JetBinaryExpression expression) {
JsExpression left = AstUtil.convertToExpression
(Translation.translateExpression(expression.getLeft(), translationContext()));
JetExpression rightExpression = expression.getRight();
assert rightExpression != null : "Binary expression should have a right expression";
JsExpression right = AstUtil.convertToExpression
(Translation.translateExpression(rightExpression, translationContext()));
JetToken jetOperationToken = (JetToken) expression.getOperationToken();
return new JsBinaryOperation(OperatorTable.getBinaryOperator(jetOperationToken), left, right);
}
}
@@ -63,7 +63,7 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
}
@Nullable
public JsInvocation resolveAsPropertySet(@NotNull JetExpression expression) {
public JsInvocation resolveAsPropertySetterCall(@NotNull JetExpression expression) {
if (expression instanceof JetDotQualifiedExpression) {
return resolveAsPropertySet((JetDotQualifiedExpression) expression);
}
@@ -36,6 +36,11 @@ public final class Translation {
return ClassTranslator.newInstance(context);
}
@NotNull
static public OperationTranslator operationTranslator(@NotNull TranslationContext context) {
return OperationTranslator.newInstance(context);
}
@NotNull
static public DeclarationTranslator declarationTranslator(@NotNull TranslationContext context) {
return DeclarationTranslator.newInstance(context);