if as expression with control statements support

This commit is contained in:
Pavel Talanov
2012-01-30 21:17:32 +04:00
parent ed0d5a8b06
commit 7a61a7520d
11 changed files with 437 additions and 353 deletions
+351 -318
View File
@@ -12,9 +12,17 @@
<bookmark url="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/safeCallReturnsNullIfFails.kt" line="3" />
</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/patternMatching/cases/whenWithIf.kt" />
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="added test for complex expression with when">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenAsExpressionWithThrow.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" afterPath="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/kotlin_lib.js" afterPath="$PROJECT_DIR$/translator/testFiles/kotlin_lib.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenValueOrType.kt" afterPath="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenValueOrType.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ConditionalTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ConditionalTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java" />
</list>
<ignored path="k2js.iws" />
@@ -115,27 +123,9 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.44590843">
<splitter split-orientation="horizontal" split-proportion="0.403215">
<split-first>
<leaf>
<file leaf-file-name="common.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/jslib/src/jquery/common.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>
</file>
<file leaf-file-name="annotations.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/jslib/src/core/annotations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="35" selection-start="94" selection-end="94" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="NativeDeclarationVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
@@ -185,10 +175,46 @@
</provider>
</entry>
</file>
<file leaf-file-name="KotlinDeclarationVisitor.java" pinned="false" current="false" current-in-tab="true">
<file leaf-file-name="KotlinDeclarationVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="46" column="67" selection-start="1781" selection-end="1781" vertical-scroll-proportion="1.4925053">
<state line="15" column="63" selection-start="551" selection-end="551" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="WhenTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="105" column="77" selection-start="4065" selection-end="4065" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AstUtil.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="366" column="40" selection-start="13142" selection-end="13142" vertical-scroll-proportion="0.5503212">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ifAsExpressionWithThrow.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/conditional/out/ifAsExpressionWithThrow.js">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="6" selection-start="264" selection-end="264" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="kt242.jet" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/examples/cases/kt242.jet">
<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>
@@ -198,62 +224,53 @@
</split-first>
<split-second>
<leaf>
<file leaf-file-name="multipleCases.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/multipleCases.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>
</file>
<file leaf-file-name="whenAsExpression.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/whenAsExpression.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>
</file>
<file leaf-file-name="whenWithIf.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenWithIf.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="15" selection-start="262" selection-end="262" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="whenWithIf.js" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/whenWithIf.js">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="29" selection-start="392" selection-end="392" vertical-scroll-proportion="0.648855">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PatternTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="19" selection-start="823" selection-end="823" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PatternMatchingTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="49" column="36" selection-start="1117" selection-end="1117" vertical-scroll-proportion="0.0">
<state line="65" column="0" selection-start="1460" selection-end="1460" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="multipleCases.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/multipleCases.js">
<file leaf-file-name="whenAsExpressionWithThrow.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenAsExpressionWithThrow.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="11" selection-start="11" selection-end="11" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslatorVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslatorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="0" selection-start="351" selection-end="351" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="127" column="0" selection-start="3936" selection-end="3936" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="133" column="56" selection-start="6129" selection-end="6129" vertical-scroll-proportion="-0.31340206">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="whenAsExpressionWithThrow.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/whenAsExpressionWithThrow.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 />
@@ -261,28 +278,39 @@
</provider>
</entry>
</file>
<file leaf-file-name="matchNullableType.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/matchNullableType.js">
<file leaf-file-name="kotlin_lib.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/kotlin_lib.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">
<state line="249" column="31" selection-start="6311" selection-end="6311" vertical-scroll-proportion="-8.538462">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="matchNullableType.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/matchNullableType.kt">
<file leaf-file-name="ifAsExpressionWithThrow.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.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">
<state line="2" column="27" selection-start="40" selection-end="40" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="whenAsExpression.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenAsExpression.kt">
<file leaf-file-name="ConditionalTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ConditionalTest.java">
<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="33" column="16" selection-start="766" selection-end="766" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StandardClasses.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java">
<provider selected="true" editor-type-id="text-editor">
<state line="155" column="81" selection-start="6052" selection-end="6052" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -313,22 +341,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/DeclarationFacade.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/AnnotationsUtils.java" />
<option value="$PROJECT_DIR$/jslib/src/core/annotations.kt" />
<option value="$PROJECT_DIR$/jslib/src/jquery/common.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/NativeDeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/config.txt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/config/Config.java" />
<option value="$PROJECT_DIR$/config.txt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenWithIf.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenValueOrType.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenAsExpressionWithReturn.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/kotlin_lib.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ConditionalTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" />
</list>
</option>
</component>
@@ -602,8 +630,22 @@
<option name="myItemId" value="patternMatching" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="out" />
<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="examples" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -621,7 +663,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="patternMatching" />
<option name="myItemId" value="examples" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
@@ -671,135 +713,7 @@
<recent name="org.jetbrains.k2js.test.examples" />
</key>
</component>
<component name="RunManager" selected="JUnit.PatternMatchingTest.whenWithIf">
<configuration default="false" name="StringTest.stringConstant" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.StringTest" />
<option name="METHOD_NAME" value="stringConstant" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<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="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="MiscTest.namespaceProperties" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.MiscTest" />
<option name="METHOD_NAME" value="namespaceProperties" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<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="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<configuration default="false" name="FunctionTest.functionWithTwoParametersCall" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.FunctionTest" />
<option name="METHOD_NAME" value="functionWithTwoParametersCall" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<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="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="PatternMatchingTest.whenType" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.PatternMatchingTest" />
<option name="METHOD_NAME" value="whenType" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<component name="RunManager" selected="JUnit.All in jetTests">
<configuration default="false" name="PatternMatchingTest.whenWithIf" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
@@ -828,6 +742,118 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="PatternMatchingTest.whenValueOrType" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.PatternMatchingTest" />
<option name="METHOD_NAME" value="whenValueOrType" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="PatternMatchingTest" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.PatternMatchingTest" />
<option name="METHOD_NAME" value="whenValueOrType" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="PatternMatchingTest.whenAsExpressionWithThrow" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.PatternMatchingTest" />
<option name="METHOD_NAME" value="whenAsExpressionWithThrow" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="ConditionalTest.ifElseAsExpressionWithThrow" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<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.ConditionalTest" />
<option name="METHOD_NAME" value="ifElseAsExpressionWithThrow" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -1014,11 +1040,11 @@
<item index="0" class="java.lang.String" itemvalue="Applet.Applet" />
<item index="1" class="java.lang.String" itemvalue="JUnit.tests" />
<item index="2" class="java.lang.String" itemvalue="JUnit.All in jetTests" />
<item index="3" class="java.lang.String" itemvalue="JUnit.StringTest.stringConstant" />
<item index="4" class="java.lang.String" itemvalue="JUnit.MiscTest.namespaceProperties" />
<item index="5" class="java.lang.String" itemvalue="JUnit.FunctionTest.functionWithTwoParametersCall" />
<item index="6" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest.whenType" />
<item index="7" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest.whenWithIf" />
<item index="3" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest.whenWithIf" />
<item index="4" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest.whenValueOrType" />
<item index="5" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest" />
<item index="6" class="java.lang.String" itemvalue="JUnit.PatternMatchingTest.whenAsExpressionWithThrow" />
<item index="7" class="java.lang.String" itemvalue="JUnit.ConditionalTest.ifElseAsExpressionWithThrow" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -1106,7 +1132,7 @@
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20363443" sideWeight="0.7588857" 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.6570605" 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.20096205" sideWeight="0.55043226" 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="true" weight="0.202031" sideWeight="0.55043226" order="0" side_tool="false" content_ui="combo" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24692678" sideWeight="0.55043226" order="2" 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.44956774" sideWeight="0.8530198" order="2" side_tool="false" content_ui="tabs" />
<window_info id="CodeWindow" 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" />
@@ -1154,7 +1180,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="solving when problem" />
<option name="LAST_COMMIT_MESSAGE" value="added test for complex expression with when" />
<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" />
@@ -1167,7 +1193,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="refactor qualified expression translation" />
<MESSAGE value="builder example working" />
<MESSAGE value="lots of minore refactorings" />
<MESSAGE value="implement and test extension properties" />
@@ -1192,6 +1217,7 @@
<MESSAGE value="adding annotations checks" />
<MESSAGE value="supported NativeClass() and NativeFun(String) annotations" />
<MESSAGE value="solving when problem" />
<MESSAGE value="added test for complex expression with when" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1201,21 +1227,112 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsStatement.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="27" selection-start="359" selection-end="359" vertical-scroll-proportion="0.0">
<state line="155" column="81" selection-start="6052" selection-end="6052" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenAsExpression.kt">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="65" column="0" selection-start="1460" selection-end="1460" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/kotlin_lib.js">
<provider selected="true" editor-type-id="text-editor">
<state line="249" column="31" selection-start="6311" selection-end="6311" vertical-scroll-proportion="-8.538462">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/whenValueOrType.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>
<marker date="1327942202025" expanded="true" signature="-1:-1" placeholder="{...}" />
<marker date="1327942202025" expanded="true" signature="-1:-1" placeholder="{...}" />
<marker date="1327942202025" expanded="true" signature="-1:-1" placeholder="{...}" />
<marker date="1327942202025" expanded="true" signature="-1:-1" placeholder="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenValueOrType.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="23" column="20" selection-start="306" selection-end="306" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ConditionalTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="33" column="16" selection-start="766" selection-end="766" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/conditional/cases/ifAsExpressionWithThrow.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="27" selection-start="40" selection-end="40" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/declaration/KotlinDeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="63" selection-start="551" selection-end="551" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="101" column="0" selection-start="5003" selection-end="5003" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="105" column="77" selection-start="4065" selection-end="4065" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="133" column="56" selection-start="6129" selection-end="6129" vertical-scroll-proportion="-0.31340206">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/jslib/src/jquery/common.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/testFiles/patternMatching/cases/multipleCases.kt">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/conditional/out/ifAsExpressionWithThrow.js">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="6" selection-start="264" selection-end="264" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/jslib/src/core/annotations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="35" selection-start="94" selection-end="94" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/examples/cases/kt242.jet">
<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 />
@@ -1224,91 +1341,7 @@
</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="331" column="72" selection-start="11820" selection-end="11820" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/multipleCases.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/WebDemoExamples2Test.java">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="49" selection-start="218" selection-end="218" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/matchNullableType.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/testFiles/patternMatching/out/whenAsExpression.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/src/org/jetbrains/k2js/translate/context/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="191" column="29" selection-start="6849" selection-end="6849" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsBlock.java">
<provider selected="true" editor-type-id="text-editor">
<state line="27" column="16" selection-start="691" selection-end="691" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="19" selection-start="823" selection-end="823" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/WhenTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="15" selection-start="1283" selection-end="1283" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PatternMatchingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="49" column="36" selection-start="1117" selection-end="1117" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/cases/whenWithIf.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="15" selection-start="262" selection-end="262" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config.txt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="42" selection-start="42" selection-end="42" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/patternMatching/out/whenWithIf.js">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="29" selection-start="392" selection-end="392" vertical-scroll-proportion="0.648855">
<state line="366" column="40" selection-start="13142" selection-end="13142" vertical-scroll-proportion="0.5503212">
<folding />
</state>
</provider>
@@ -7,6 +7,7 @@ package com.google.dart.compiler.util;
import com.google.dart.compiler.InternalCompilerException;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.common.SourceInfo;
import com.sun.istack.internal.NotNull;
import java.util.List;
@@ -357,6 +358,9 @@ public class AstUtil {
if (node instanceof JsBlock) {
JsBlock block = (JsBlock) node;
List<JsStatement> statements = block.getStatements();
if (statements.isEmpty()) return block;
int size = statements.size();
statements.set(size - 1,
AstUtil.convertToStatement(mutateLastExpression(statements.get(size - 1), mutator)));
@@ -376,4 +380,23 @@ public class AstUtil {
}
return mutator.mutate(node);
}
public static final class SaveLastExpressionMutator implements Mutator {
@NotNull
private final JsExpression toAssign;
public SaveLastExpressionMutator(@NotNull JsExpression toAssign) {
this.toAssign = toAssign;
}
@Override
public JsNode mutate(JsNode node) {
if (!(node instanceof JsExpression)) {
return node;
}
return AstUtil.assignment(toAssign, (JsExpression) node);
}
}
}
@@ -153,6 +153,7 @@ public final class StandardClasses {
standardClasses.declare().forFQ("js.parseInt").kotlinFunction("parseInt");
standardClasses.declare().forFQ("js.println").kotlinFunction("println");
standardClasses.declare().forFQ("js.print").kotlinFunction("print");
standardClasses.declare().forFQ("js.Exception").kotlinClass("Exception");
}
@NotNull
@@ -9,6 +9,7 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lang.resolve.constants.NullValue;
import org.jetbrains.k2js.translate.context.TemporaryVariable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslatorVisitor;
@@ -18,7 +19,6 @@ import org.jetbrains.k2js.translate.operation.UnaryOperationTranslator;
import org.jetbrains.k2js.translate.reference.AccessTranslator;
import org.jetbrains.k2js.translate.reference.CallTranslator;
import org.jetbrains.k2js.translate.reference.ReferenceTranslator;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.List;
@@ -122,12 +122,14 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@Override
@NotNull
public JsNode visitIfExpression(@NotNull JetIfExpression expression, @NotNull TranslationContext context) {
boolean isStatement = BindingUtils.isStatement(context.bindingContext(), expression);
if (isStatement) {
return translateAsIfStatement(expression, context);
} else {
return translateAsConditionalExpression(expression, context);
}
TemporaryVariable result = context.declareTemporary(context.program().getNullLiteral());
AstUtil.SaveLastExpressionMutator saveResultToTemporaryMutator =
new AstUtil.SaveLastExpressionMutator(result.nameReference());
JsNode mutatedIfStatement = AstUtil.mutateLastExpression(translateAsIfStatement(expression, context),
saveResultToTemporaryMutator);
JsStatement resultingStatement = AstUtil.convertToStatement(mutatedIfStatement);
context.jsBlock().addStatement(resultingStatement);
return result.nameReference();
}
@Override
@@ -158,16 +160,6 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
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;
}
@NotNull
private JsStatement translateNullableExpressionAsNotNullStatement(@Nullable JetExpression nullableExpression,
@NotNull TranslationContext context) {
@@ -354,4 +346,13 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
}
return result;
}
@Override
@NotNull
public JsNode visitThrowExpression(@NotNull JetThrowExpression expression,
@NotNull TranslationContext context) {
JetExpression thrownExpression = expression.getThrownExpression();
assert thrownExpression != null : "Thrown expression must not be null";
return new JsThrow(translateAsExpression(thrownExpression, context));
}
}
@@ -16,7 +16,6 @@ import java.util.List;
/**
* @author Pavel Talanov
*/
//TODO: look into using temporary variable for counter
public class WhenTranslator extends AbstractTranslator {
@NotNull
@@ -102,16 +101,9 @@ public class WhenTranslator extends AbstractTranslator {
@NotNull
JsStatement withReturnValueCaptured(@NotNull JsNode node) {
AstUtil.Mutator lastExpressionCapturer = new AstUtil.Mutator() {
@Override
public JsNode mutate(JsNode node) {
if (!(node instanceof JsExpression)) {
return node;
}
return AstUtil.assignment(result.nameReference(), (JsExpression) node);
}
};
return AstUtil.convertToStatement(AstUtil.mutateLastExpression(node, lastExpressionCapturer));
return AstUtil.convertToStatement(AstUtil.mutateLastExpression(node,
new AstUtil.SaveLastExpressionMutator(result.nameReference())));
}
@NotNull
@@ -1,6 +1,7 @@
package org.jetbrains.k2js.test;
import org.junit.Test;
import org.mozilla.javascript.JavaScriptException;
/**
* @author Pavel Talanov
@@ -24,9 +25,13 @@ public class ConditionalTest extends AbstractExpressionTest {
testFunctionOutput("if.kt", "foo", "box", 5);
}
//TODO: test fails due to isStatement issue, include when issue is solved or implement another solution
@Test
public void ifElseIf() throws Exception {
testFunctionOutput("elseif.kt", "foo", "box", 5);
}
@Test(expected = JavaScriptException.class)
public void ifElseAsExpressionWithThrow() throws Exception {
testFooBoxIsTrue("ifAsExpressionWithThrow.kt");
}
}
@@ -39,11 +39,10 @@ public final class PatternMatchingTest extends TranslationTest {
testFooBoxIsTrue("whenNotValue.kt");
}
//TODO: fails due to analyzing bug
// @Test
// public void whenValueOrType() throws Exception {
// testFooBoxIsTrue("whenValueOrType.kt");
// }
@Test
public void whenValueOrType() throws Exception {
testFooBoxIsTrue("whenValueOrType.kt");
}
@Test
public void whenWithIf() throws Exception {
@@ -64,4 +63,9 @@ public final class PatternMatchingTest extends TranslationTest {
public void whenAsExpression() throws Exception {
testFooBoxIsTrue("whenAsExpression.kt");
}
@Test(expected = org.mozilla.javascript.JavaScriptException.class)
public void whenAsExpressionWithThrow() throws Exception {
testFooBoxIsTrue("whenAsExpressionWithThrow.kt");
}
}
@@ -0,0 +1,3 @@
package foo
fun box() = if (true) throw Exception() else false
+2 -1
View File
@@ -250,6 +250,7 @@ Kotlin.equals = function (obj1, obj2) {
};
Kotlin.Exceptions = {}
Kotlin.Exception = Kotlin.Class.create();
Kotlin.Exceptions.IndexOutOfBounds = {}
Kotlin.array = function (len) {
return new Kotlin.Array(len, function () {
@@ -902,7 +903,7 @@ Kotlin.StringBuilder = Kotlin.Class.create(
}
);
Kotlin.toString = function(obj) {
Kotlin.toString = function (obj) {
return obj.toString();
};
@@ -0,0 +1,19 @@
package foo
fun box() : Boolean {
(when (1) {
3 -> {
3
}
1 -> {
throw Exception();
}
else -> {
return false
}
})
return false
}
@@ -16,10 +16,12 @@ fun box() : Boolean {
is null -> c = 10;
is B -> c = 10000
is A -> c = 20;
else -> c = 1000
}
when(b) {
is null -> c += 5
is B -> c += 100
else -> c = 1000
}
return (c == 25)
}