Added support for if else clause as an expression. It has major issue with statement/expression resolving for JetExpression.

This commit is contained in:
Pavel Talanov
2011-11-14 22:57:26 +04:00
parent ed0c9f621d
commit 55d1f0f267
6 changed files with 250 additions and 229 deletions
+177 -200
View File
@@ -6,10 +6,12 @@
</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/cases/notBoolean.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/cases/positiveAndNegativeNumbers.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/cases/ifElseAsExpression.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/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/OperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -47,32 +49,6 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="89" 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" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="94" 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" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java" line="46" class="org.jetbrains.k2js.declarations.ExtractionVisitor" package="org.jetbrains.k2js.declarations">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
@@ -126,38 +102,29 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.5997249">
<splitter split-orientation="horizontal" split-proportion="0.7283356">
<split-first>
<leaf>
<file leaf-file-name="postfixIntOperations.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/postfixIntOperations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="124" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="prefixIntOperations.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/prefixIntOperations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="30" selection-start="117" selection-end="117" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExpressionTest.java" pinned="false" current="false" current-in-tab="false">
<file leaf-file-name="ExpressionTest.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="105" column="52" selection-start="2623" selection-end="2623" vertical-scroll-proportion="0.0">
<state line="43" column="60" selection-start="1073" selection-end="1073" vertical-scroll-proportion="0.30590063">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="positiveAndNegativeNumbers.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/positiveAndNegativeNumbers.js">
<file leaf-file-name="ifElseAsExpression.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/ifElseAsExpression.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="7" selection-start="22" selection-end="22" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ifElseAsExpression.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/ifElseAsExpression.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">
<folding />
@@ -165,8 +132,26 @@
</provider>
</entry>
</file>
<file leaf-file-name="postfixIntOperations.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/postfixIntOperations.js">
<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="93" selection-start="3289" selection-end="3289" 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="225" column="91" selection-start="9880" selection-end="9880" vertical-scroll-proportion="-9.230769">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="elseif.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/elseif.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
@@ -174,46 +159,37 @@
</provider>
</entry>
</file>
<file leaf-file-name="prefixIntOperations.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/prefixIntOperations.js">
<file leaf-file-name="ReflectiveCallable.class" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/internal/runners/model/ReflectiveCallable.class">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<state line="11" column="40" selection-start="397" selection-end="397" vertical-scroll-proportion="-6.8">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="notBoolean.js" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/notBoolean.js">
<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="8" column="11" selection-start="87" selection-end="87" vertical-scroll-proportion="0.21794872">
<state line="255" column="0" selection-start="8760" selection-end="8760" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="notBoolean.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/notBoolean.kt">
<file leaf-file-name="ClassInheritanceTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassInheritanceTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="4" column="18" selection-start="55" selection-end="55" vertical-scroll-proportion="0.0">
<state line="22" column="16" selection-start="485" selection-end="485" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OperatorTable.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java">
<file leaf-file-name="JsConditional.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsConditional.java">
<provider selected="true" editor-type-id="text-editor">
<state line="51" column="60" selection-start="2261" selection-end="2261" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="positiveAndNegativeNumbers.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/positiveAndNegativeNumbers.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="23" selection-start="90" selection-end="90" vertical-scroll-proportion="0.0">
<state line="9" column="19" selection-start="345" selection-end="345" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -226,7 +202,7 @@
<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="53" column="13" selection-start="1779" selection-end="1779" vertical-scroll-proportion="1.4213198">
<state line="53" column="13" selection-start="1779" selection-end="1779" vertical-scroll-proportion="1.524501">
<folding />
</state>
</provider>
@@ -334,8 +310,6 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java" />
<option value="$PROJECT_DIR$/translator/testFiles/class/cases/simpleInitializer.kt" />
@@ -343,12 +317,14 @@
<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/OperatorTable.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/cases/prefixIntOperations.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/cases/postfixIntOperations.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/cases/notBoolean.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/cases/positiveAndNegativeNumbers.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/cases/ifElseAsExpression.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ExpressionTest.java" />
</list>
</option>
@@ -750,32 +726,6 @@
</key>
</component>
<component name="RunManager" selected="JUnit.All in translator">
<configuration default="false" name="BasicClassTest.classInstantiation" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.BasicClassTest" />
<option name="METHOD_NAME" value="classInstantiation" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="60386" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<configuration default="false" name="BasicClassTest.incrementProperty" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -876,6 +826,32 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="ExpressionTest.ifElseIf" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.ExpressionTest" />
<option name="METHOD_NAME" value="ifElseIf" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="50692" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -951,11 +927,11 @@
</method>
</configuration>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="JUnit.BasicClassTest.classInstantiation" />
<item index="1" class="java.lang.String" itemvalue="JUnit.BasicClassTest.incrementProperty" />
<item index="2" class="java.lang.String" itemvalue="JUnit.BasicClassTest.SimpleInitializer" />
<item index="3" class="java.lang.String" itemvalue="JUnit.BasicClassTest.constructorWithParameter" />
<item index="4" class="java.lang.String" itemvalue="JUnit.All in translator" />
<item index="0" class="java.lang.String" itemvalue="JUnit.BasicClassTest.incrementProperty" />
<item index="1" class="java.lang.String" itemvalue="JUnit.BasicClassTest.SimpleInitializer" />
<item index="2" class="java.lang.String" itemvalue="JUnit.BasicClassTest.constructorWithParameter" />
<item index="3" class="java.lang.String" itemvalue="JUnit.All in translator" />
<item index="4" class="java.lang.String" itemvalue="JUnit.ExpressionTest.ifElseIf" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -991,7 +967,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" />
@@ -1007,7 +983,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="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="true" content_ui="tabs" />
@@ -1045,7 +1021,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="Implemented basic version of unary operation translation(valid for primitive types) and added a 2 tests for it." />
<option name="LAST_COMMIT_MESSAGE" value="Added tests for remaining unary operators (!,+, -).Verified that generated code is what expected." />
<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" />
@@ -1079,6 +1055,7 @@
<MESSAGE value="Found a bug so work on constructor parameters has stopped.&#10;i" />
<MESSAGE value="Introduced OperationTranslator class and started work on Unary Expression." />
<MESSAGE value="Implemented basic version of unary operation translation(valid for primitive types) and added a 2 tests for it." />
<MESSAGE value="Added tests for remaining unary operators (!,+, -).Verified that generated code is what expected." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1088,92 +1065,6 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<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">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsUnaryOperator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="12" selection-start="319" selection-end="319" 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="35" column="27" selection-start="1211" selection-end="1211" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</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="328" column="82" selection-start="14676" selection-end="14676" vertical-scroll-proportion="0.0">
<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">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/if.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="236" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/prefixIntOperations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="7" column="30" selection-start="117" selection-end="117" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/postfixIntOperations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="124" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/notBoolean.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="4" column="18" selection-start="55" selection-end="55" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor">
<state line="51" column="60" selection-start="2261" selection-end="2261" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/positiveAndNegativeNumbers.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="23" selection-start="90" selection-end="90" 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="105" column="52" selection-start="2623" selection-end="2623" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/positiveAndNegativeNumbers.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">
@@ -1195,9 +1086,95 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverloadResolver.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="13" selection-start="657" selection-end="657" vertical-scroll-proportion="-3.197205">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/notBoolean.js">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="11" selection-start="87" selection-end="87" vertical-scroll-proportion="0.21794872">
<state line="8" column="0" selection-start="87" selection-end="87" 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="47" column="53" selection-start="1830" selection-end="1830" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsConditional.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="345" selection-end="345" 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="22" column="16" selection-start="485" selection-end="485" 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="255" column="0" selection-start="8760" selection-end="8760" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/internal/runners/model/ReflectiveCallable.class">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="40" selection-start="397" selection-end="397" vertical-scroll-proportion="-6.8">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/elseif.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<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="225" column="91" selection-start="9880" selection-end="9880" vertical-scroll-proportion="-9.230769">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/out/ifElseAsExpression.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">
<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="93" selection-start="3289" selection-end="3289" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/cases/ifElseAsExpression.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="7" selection-start="22" selection-end="22" 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="43" column="60" selection-start="1073" selection-end="1073" vertical-scroll-proportion="0.30590063">
<folding />
</state>
</provider>
@@ -2,6 +2,7 @@ package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
@@ -182,13 +183,58 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@Override
@NotNull
public JsNode visitIfExpression(@NotNull JetIfExpression expression, @NotNull TranslationContext context) {
if (isStatement(expression)) {
return translateAsIfStatement(expression, context);
} else {
return translateAsConditionalExpression(expression, context);
}
}
@NotNull
private JsIf translateAsIfStatement(@NotNull JetIfExpression expression,
@NotNull TranslationContext context) {
JsIf result = new JsIf();
result.setIfExpr(translateConditionExpression(expression.getCondition(), context));
result.setThenStmt(translateNullableExpressionToNotNullStatement(expression.getThen(), context));
result.setElseStmt(translateElseStatement(expression, context));
result.setThenStmt(translateNullableExpressionAsNotNullStatement(expression.getThen(), context));
result.setElseStmt(translateElseAsStatement(expression, context));
return result;
}
@Nullable
private JsStatement translateElseAsStatement(JetIfExpression expression, TranslationContext context) {
JetExpression jetElse = expression.getElse();
if (jetElse == null) {
return null;
}
return AstUtil.convertToStatement(jetElse.accept(this, context));
}
@NotNull
private JsConditional translateAsConditionalExpression(@NotNull JetIfExpression expression,
@NotNull TranslationContext context) {
JsConditional result = new JsConditional();
result.setTestExpression(translateConditionExpression(expression.getCondition(), context));
result.setThenExpression(translateNullableExpression(expression.getThen(), context));
result.setElseExpression(translateNullableExpression(expression.getElse(), context));
return result;
}
//TODO: ask about a legal way to do it
private boolean isStatement(@NotNull JetIfExpression expression) {
PsiElement parent = expression.getParent();
return (parent instanceof JetBlockExpression) || (parent instanceof JetIfExpression);
}
@NotNull
private JsStatement translateNullableExpressionAsNotNullStatement(@Nullable JetExpression nullableExpression,
@NotNull TranslationContext context) {
if (nullableExpression == null) {
return context.program().getEmptyStmt();
}
return AstUtil.convertToStatement(nullableExpression.accept(this, context));
}
@NotNull
private JsExpression translateConditionExpression(@Nullable JetExpression expression,
@NotNull TranslationContext context) {
@@ -199,28 +245,13 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
return AstUtil.convertToExpression(jsCondition);
}
@NotNull
private JsStatement translateNullableExpressionToNotNullStatement(@Nullable JetExpression expression,
@NotNull TranslationContext context) {
return AstUtil.convertToStatement(translateNullableExpression(expression, context));
}
@Nullable
private JsStatement translateElseStatement(@NotNull JetIfExpression expression,
@NotNull TranslationContext context) {
if (expression.getElse() == null) {
private JsExpression translateNullableExpression(@Nullable JetExpression expression,
@NotNull TranslationContext context) {
if (expression == null) {
return null;
}
return AstUtil.convertToStatement(translateNullableExpression(expression.getElse(), context));
}
@NotNull
private JsNode translateNullableExpression(@Nullable JetExpression expression,
@NotNull TranslationContext context) {
if (expression == null) {
return context.program().getEmptyStmt();
}
return expression.accept(this, context);
return AstUtil.convertToExpression(expression.accept(this, context));
}
@Override
@@ -228,7 +259,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public JsNode visitWhileExpression(@NotNull JetWhileExpression expression, @NotNull TranslationContext context) {
JsWhile result = new JsWhile();
result.setCondition(translateConditionExpression(expression.getCondition(), context));
result.setBody(translateNullableExpressionToNotNullStatement(expression.getBody(), context));
result.setBody(translateNullableExpressionAsNotNullStatement(expression.getBody(), context));
return result;
}
@@ -237,7 +268,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public JsNode visitDoWhileExpression(@NotNull JetDoWhileExpression expression, @NotNull TranslationContext context) {
JsDoWhile result = new JsDoWhile();
result.setCondition(translateConditionExpression(expression.getCondition(), context));
result.setBody(translateNullableExpressionToNotNullStatement(expression.getBody(), context));
result.setBody(translateNullableExpressionAsNotNullStatement(expression.getBody(), context));
return result;
}
@@ -41,7 +41,7 @@ public final class OperationTranslator extends AbstractTranslator {
@NotNull
private JsExpression translateBaseExpression(@NotNull JetUnaryExpression expression) {
JetExpression baseExpression = expression.getBaseExpression();
assert baseExpression != null : "Unary operation should have not null base expression";
assert baseExpression != null : "Unary operation should have a base expression";
return AstUtil.convertToExpression
(Translation.translateExpression(baseExpression, translationContext()));
}
@@ -41,10 +41,11 @@ public final class ExpressionTest extends TranslationTest {
performTest("if.kt", "foo", "box", 5);
}
@Test
public void ifElseIf() throws Exception {
performTest("elseif.kt", "foo", "box", 5);
}
//TODO: test fails because of problem with isStatement()
// @Test
// public void ifElseIf() throws Exception {
// performTest("elseif.kt", "foo", "box", 5);
// }
@Test
public void whileSimpleTest() throws Exception {
@@ -105,4 +106,9 @@ public final class ExpressionTest extends TranslationTest {
public void positiveAndNegativeNumbers() throws Exception {
testFooBoxIsTrue("positiveAndNegativeNumbers.kt");
}
@Test
public void ifElseAsExpression() throws Exception {
testFooBoxIsTrue("ifElseAsExpression.kt");
}
}
@@ -87,7 +87,7 @@ public abstract class TranslationTest {
assertTrue(foo instanceof NativeObject);
NativeObject namespaceObject = (NativeObject) foo;
Object box = namespaceObject.get(functionName, namespaceObject);
assertTrue(box instanceof Function);
assertTrue("Function " + functionName + " not defined in namespace " + namespaceName, box instanceof Function);
Object functionArgs[] = {};
Function function = (Function) box;
return function.call(cx, scope, scope, functionArgs);
@@ -0,0 +1,7 @@
namespace foo
fun box() : Boolean
{
val a = 2;
return if (a == 2) true else false;
}