refactor and improve. Adopt standard class array implementation

This commit is contained in:
Pavel Talanov
2011-12-07 14:17:51 +04:00
parent c7a4d724a0
commit ab6895f2b0
30 changed files with 818 additions and 580 deletions
+7
View File
@@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0" is_locked="false">
<option name="myName" value="Project Default" />
<option name="myLocal" value="false" />
<inspection_tool class="SimplifiableIfStatement" enabled="false" level="WARNING" enabled_by_default="false" />
</profile>
</component>
+7
View File
@@ -0,0 +1,7 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="PROJECT_PROFILE" value="Project Default" />
<option name="USE_PROJECT_PROFILE" value="true" />
<version value="1.0" />
</settings>
</component>
+327 -360
View File
@@ -5,12 +5,36 @@
</component>
<component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/expression/function/cases/enclosingThis.jet" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/../WebView/.idea/workspace.xml" afterPath="$PROJECT_DIR$/../WebView/.idea/workspace.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/profiles_settings.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayGetIntrinsic.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArrayNullConstructorIntrinsic.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/array/ArraySetIntrinsic.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/array/IntrinsicArrayUtils.java" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\intrinsic\BinaryOperationIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveBinaryOperationIntrinsic.java" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\intrinsic\PrimitiveCompareToIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveCompareToIntrinsic.java" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\intrinsic\PrimitiveEqualsIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveEqualsIntrinsic.java" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\intrinsic\UnaryOperationIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java" />
<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/context/Aliaser.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Namer.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Namer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.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/intrinsic/FunctionIntrinsic.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/FunctionIntrinsic.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/IntrinsicDeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/IntrinsicDeclarationVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ArrayAccessTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/kotlinLib/cases/array.js" afterPath="$PROJECT_DIR$/translator/testFiles/kotlinLib/cases/array.js" />
<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/test/org/jetbrains/k2js/test/StandardClassesTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/StandardClassesTest.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -108,7 +132,7 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" line="225" class="org.jetbrains.k2js.translate.utils.BindingUtils" package="org.jetbrains.k2js.translate.utils">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" line="154" class="org.jetbrains.k2js.translate.utils.TranslationUtils" package="org.jetbrains.k2js.translate.utils">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -121,20 +145,20 @@
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" line="40" class="org.jetbrains.k2js.translate.reference.ReferenceTranslator" package="org.jetbrains.k2js.translate.reference">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" line="258" class="org.jetbrains.k2js.translate.expression.ExpressionVisitor" package="org.jetbrains.k2js.translate.expression">
<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="true" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="simpleName.getReferencedName().equals(&quot;m&quot;)&#13;&#13;JAVA" />
<option name="LOG_MESSAGE" value="&#13;&#13;JAVA" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" line="163" class="org.jetbrains.k2js.translate.utils.TranslationUtils" package="org.jetbrains.k2js.translate.utils">
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" line="259" class="org.jetbrains.k2js.translate.expression.ExpressionVisitor" package="org.jetbrains.k2js.translate.expression">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -204,76 +228,49 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.27758008">
<splitter split-orientation="horizontal" split-proportion="0.57962215">
<split-first>
<leaf>
<file leaf-file-name="TranslationContext.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java">
<file leaf-file-name="postfixIntOperations.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/operation/cases/postfixIntOperations.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="79" column="27" selection-start="3132" selection-end="3132" vertical-scroll-proportion="0.3859649">
<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="DeclarationBodyVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/DeclarationBodyVisitor.java">
<file leaf-file-name="positiveAndNegativeNumbers.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/operation/cases/positiveAndNegativeNumbers.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="19" selection-start="662" selection-end="662" vertical-scroll-proportion="0.0">
<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="TemporaryVariable.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/TemporaryVariable.java">
<file leaf-file-name="comparison.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/operation/cases/comparison.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="29" column="17" selection-start="884" selection-end="884" vertical-scroll-proportion="0.0">
<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="NamingScope.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/NamingScope.java">
<file leaf-file-name="comparison.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/operation/out/comparison.js">
<provider selected="true" editor-type-id="text-editor">
<state line="72" column="48" selection-start="2197" selection-end="2197" vertical-scroll-proportion="0.0">
<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="DynamicContext.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java">
<file leaf-file-name="PrimitiveUnaryOperationIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveUnaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="49" column="48" selection-start="1709" selection-end="1709" vertical-scroll-proportion="0.0">
<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/general/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="98" column="57" selection-start="5018" selection-end="5018" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CompareToIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/CompareToIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="62" selection-start="297" selection-end="297" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BinaryOperationIntrinsic.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/BinaryOperationIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="13" selection-start="520" selection-end="520" vertical-scroll-proportion="0.0">
<state line="19" column="10" selection-start="688" selection-end="688" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -282,10 +279,17 @@
<file leaf-file-name="DescriptorUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="13" column="52" selection-start="492" selection-end="492" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#2087#2110#0" expanded="true" />
</folding>
<state line="93" column="13" selection-start="3662" selection-end="3662" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="StandardClassesTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/StandardClassesTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="16" column="16" selection-start="317" selection-end="317" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
@@ -299,23 +303,19 @@
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="ReferenceTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<file leaf-file-name="PsiUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="40" column="0" selection-start="1492" selection-end="1492" vertical-scroll-proportion="0.0">
<state line="27" column="23" selection-start="858" selection-end="858" 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/expression/ExpressionVisitor.java">
<file leaf-file-name="ClassTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="115" column="21" selection-start="5098" selection-end="5098" vertical-scroll-proportion="0.0">
<state line="116" column="52" selection-start="4976" selection-end="4976" vertical-scroll-proportion="0.4501385">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -323,46 +323,14 @@
</provider>
</entry>
</file>
<file leaf-file-name="CallTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="ReferenceTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="117" column="24" selection-start="5841" selection-end="5841" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="FunctionTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="57" column="16" selection-start="1355" selection-end="1355" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PropertyAccessorDescriptor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="22" selection-start="457" selection-end="457" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslationUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="163" column="0" selection-start="7301" selection-end="7301" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PropertyAccessTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="152" column="83" selection-start="6581" selection-end="6581" vertical-scroll-proportion="0.28424153">
<state line="105" column="5" selection-start="4180" selection-end="4180" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -371,25 +339,81 @@
<file leaf-file-name="BindingUtils.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="225" column="0" selection-start="10552" selection-end="10552" vertical-scroll-proportion="0.0">
<state line="150" column="42" selection-start="7097" selection-end="7097" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="VariableAsFunctionDescriptor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java">
<file leaf-file-name="TranslationUtils.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="40" selection-start="308" selection-end="308" vertical-scroll-proportion="0.0">
<state line="77" column="0" selection-start="3549" selection-end="3549" vertical-scroll-proportion="0.44412607">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PropertyDescriptor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java">
<file leaf-file-name="PropertyAccessTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="33" column="12" selection-start="1331" selection-end="1331" vertical-scroll-proportion="0.0">
<state line="81" column="0" selection-start="3846" selection-end="3846" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<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="37" column="16" selection-start="861" selection-end="861" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetSimpleNameExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="45" column="24" selection-start="1606" selection-end="1606" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CallTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="28" column="58" selection-start="1275" selection-end="1275" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PropertyAccessTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="37" column="16" selection-start="826" selection-end="826" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OperatorOverloadingTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="16" selection-start="1070" selection-end="1070" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="operatorOverloadOnPropertyCallGetterAndSetterOnlyOnce.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/operatorOverloadOnPropertyCallGetterAndSetterOnlyOnce.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>
@@ -416,22 +440,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/AbstractInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/CompareToTranslator.java" />
<option value="$PROJECT_DIR$/translator/testFiles/kotlin_lib.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Namer.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/StandardClassesTest.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/KotlinLibTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/kotlinLib/cases/array.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/FunctionTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/NamingScope.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/DynamicContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/context/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/DescriptorUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java" />
</list>
</option>
</component>
@@ -521,6 +545,7 @@
<sortByType />
</navigator>
<panes>
<pane id="Scope" />
<pane id="PackagesPane">
<subPane>
<PATH>
@@ -535,7 +560,6 @@
</PATH>
</subPane>
</pane>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<PATH>
@@ -582,7 +606,11 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="trait" />
<option name="myItemId" value="standardClasses" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="out" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -600,7 +628,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="trait" />
<option name="myItemId" value="standardClasses" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
@@ -636,139 +664,11 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="expression" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="expression" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="function" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="out" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="expression" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="function" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<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_ELEMENT>
<option name="myItemId" value="sortedTests" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="examples" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="examples" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<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="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -789,6 +689,36 @@
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="utils" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
@@ -883,13 +813,6 @@
</key>
</component>
<component name="RunManager" selected="JUnit.tests">
<configuration default="false" name="compareTo.js" type="JavascriptDebugSession" factoryName="Local" temporary="true">
<JSDebuggerConfigurationSettings>
<option name="engineId" value="embedded" />
<option name="fileUrl" value="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/compareTo.js" />
</JSDebuggerConfigurationSettings>
<method />
</configuration>
<configuration default="false" name="TraitTest.traitAddsFunctionsToClass" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true">
<pattern>
@@ -1013,6 +936,41 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="StandardClassesTest.array" 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="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.StandardClassesTest" />
<option name="METHOD_NAME" value="array" />
<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="singleModule" />
</option>
<envs />
<dir value="$PROJECT_DIR$/translator" />
<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="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -1128,17 +1086,23 @@
<envs />
<dir value="$PROJECT_DIR$/translator" />
<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>
<list size="6">
<item index="0" class="java.lang.String" itemvalue="JUnit.tests" />
<item index="1" class="java.lang.String" itemvalue="JavaScript Debug.compareTo.js" />
<item index="2" class="java.lang.String" itemvalue="JUnit.TraitTest.traitAddsFunctionsToClass" />
<item index="3" class="java.lang.String" itemvalue="JUnit.TraitTest.classDerivesFromClassAndTrait" />
<item index="4" class="java.lang.String" itemvalue="JUnit.All in jetTests" />
<item index="5" class="java.lang.String" itemvalue="JUnit.FunctionTest.enclosingThis" />
<item index="1" class="java.lang.String" itemvalue="JUnit.TraitTest.traitAddsFunctionsToClass" />
<item index="2" class="java.lang.String" itemvalue="JUnit.TraitTest.classDerivesFromClassAndTrait" />
<item index="3" class="java.lang.String" itemvalue="JUnit.All in jetTests" />
<item index="4" class="java.lang.String" itemvalue="JUnit.FunctionTest.enclosingThis" />
<item index="5" class="java.lang.String" itemvalue="JUnit.StandardClassesTest.array" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -1196,6 +1160,7 @@
<frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
<editor active="true" />
<layout>
<window_info id="Data Sources" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32853025" sideWeight="0.49812934" 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" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32756963" sideWeight="0.46606094" order="1" side_tool="false" content_ui="tabs" />
@@ -1206,14 +1171,14 @@
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.6705091" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32854405" sideWeight="0.5" order="14" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.22382325" sideWeight="0.45750934" order="9" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.22382325" sideWeight="0.45750934" order="9" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32949087" sideWeight="0.49812934" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Metrics" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32756963" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.20363443" sideWeight="0.284342" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.728146" 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.24906467" sideWeight="0.6993276" order="0" 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.30067244" sideWeight="0.64190274" order="2" 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.20791021" sideWeight="0.77617675" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.29971182" sideWeight="0.64190274" 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="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
@@ -1256,7 +1221,7 @@
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Reorganise context structure, refactor" />
<option name="LAST_COMMIT_MESSAGE" value="fix &quot;enclosingThis&quot; bug" />
<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" />
@@ -1269,7 +1234,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="Corrected class declaration logic." />
<MESSAGE value="Supported single file without namespace." />
<MESSAGE value="Added array basic class." />
<MESSAGE value="Added and sorted tests from jet repository. Fixed a bug with custom setter." />
@@ -1294,6 +1258,7 @@
<MESSAGE value="refactor and fix assignment operator on property bug" />
<MESSAGE value="intrinsics refactor" />
<MESSAGE value="Reorganise context structure, refactor" />
<MESSAGE value="fix &quot;enclosingThis&quot; bug" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1303,120 +1268,122 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/testFiles/examples/cases/enclosingThis.jet">
<entry file="jar://$PROJECT_DIR$/translator/lib/js.jar!/org/mozilla/javascript/ScriptableObject.class">
<provider selected="true" editor-type-id="text-editor">
<state line="308" column="80" selection-start="19091" selection-end="19091" vertical-scroll-proportion="-18.64">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="16" selection-start="1070" selection-end="1070" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/operatorOverloadOnPropertyCallGetterAndSetterOnlyOnce.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/general/AbstractTranslator.java">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="0" selection-start="670" selection-end="670" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/function/cases/enclosingThis.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>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="17" selection-start="274" selection-end="274" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/expression/function/out/enclosingThis.js">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="37" selection-start="237" selection-end="237" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="40" selection-start="308" selection-end="308" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="225" column="0" selection-start="10552" selection-end="10552" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="40" column="0" selection-start="1492" selection-end="1492" 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="115" column="21" selection-start="5098" selection-end="5098" 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/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="163" column="0" selection-start="7301" selection-end="7301" 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="79" column="27" selection-start="3132" selection-end="3132" vertical-scroll-proportion="0.3859649">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="22" selection-start="457" selection-end="457" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="57" column="16" selection-start="1355" selection-end="1355" vertical-scroll-proportion="0.0">
<state line="45" column="24" selection-start="1606" selection-end="1606" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="117" column="24" selection-start="5841" selection-end="5841" vertical-scroll-proportion="0.0">
<state line="28" column="58" selection-start="1275" selection-end="1275" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="33" column="12" selection-start="1331" selection-end="1331" vertical-scroll-proportion="0.0">
<state line="37" column="16" selection-start="826" selection-end="826" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="37" column="16" selection-start="861" selection-end="861" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="152" column="83" selection-start="6581" selection-end="6581" vertical-scroll-proportion="0.28424153">
<state line="81" column="0" selection-start="3846" selection-end="3846" 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/utils/DescriptorUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="93" column="13" selection-start="3662" selection-end="3662" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="105" column="5" selection-start="4180" selection-end="4180" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/FunctionIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="5" column="43" selection-start="125" selection-end="125" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="150" column="42" selection-start="7097" selection-end="7097" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="77" column="0" selection-start="3549" selection-end="3549" vertical-scroll-proportion="0.44412607">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="27" column="23" selection-start="858" selection-end="858" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/intrinsic/CompareToIntrinsic.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="22" selection-start="257" selection-end="257" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="116" column="52" selection-start="4976" selection-end="4976" vertical-scroll-proportion="0.4501385">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
@@ -5,18 +5,24 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import java.util.HashMap;
import java.util.Map;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getFunctionByName;
//TODO: implement aliases stack for this
public class Aliaser {
static public Aliaser aliasesForStandardClasses(@NotNull JetStandardLibrary standardLibrary,
@NotNull Namer namer) {
//TODO: decide if this aliases are needed
return new Aliaser();
Aliaser aliaser = new Aliaser();
aliaser.setAliasForDescriptor(standardLibrary.getArray(), namer.libraryObject("Array"));
FunctionDescriptor nullConstructorFunction = getFunctionByName(standardLibrary.getLibraryScope(), "Array");
aliaser.setAliasForDescriptor(nullConstructorFunction, namer.libraryObject("array"));
return aliaser;
}
@NotNull
@@ -46,23 +52,23 @@ public class Aliaser {
}
public boolean hasAliasForDeclaration(@NotNull DeclarationDescriptor declaration) {
return aliases.containsKey(declaration);
return aliases.containsKey(declaration.getOriginal());
}
@NotNull
public JsNameRef getAliasForDeclaration(@NotNull DeclarationDescriptor declaration) {
JsName alias = aliases.get(declaration);
JsName alias = aliases.get(declaration.getOriginal());
assert alias != null : "Use has alias for declaration to check.";
return alias.makeRef();
}
public void setAliasForDescriptor(@NotNull DeclarationDescriptor declaration, @NotNull JsName alias) {
assert (!hasAliasForDeclaration(declaration)) : "This declaration already has an alias!";
aliases.put(declaration, alias);
assert (!hasAliasForDeclaration(declaration.getOriginal())) : "This declaration already has an alias!";
aliases.put(declaration.getOriginal(), alias);
}
public void removeAliasForDescriptor(@NotNull DeclarationDescriptor declaration) {
assert (hasAliasForDeclaration(declaration)) : "This declaration does not has an alias!";
aliases.remove(declaration);
assert (hasAliasForDeclaration(declaration.getOriginal())) : "This declaration does not has an alias!";
aliases.remove(declaration.getOriginal());
}
}
@@ -124,6 +124,11 @@ public final class Namer {
return reference;
}
@NotNull
public JsName libraryObject(@NotNull String name) {
return kotlinScope.declareName(name);
}
@NotNull
public JsNameRef kotlinObject() {
return kotlinName.makeRef();
@@ -21,6 +21,7 @@ import java.util.ArrayList;
import java.util.List;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.findAncestorClass;
/**
* @author Talanov Pavel
@@ -108,7 +109,7 @@ public final class ClassTranslator extends AbstractTranslator {
@Nullable
private ClassDescriptor findAndRemoveAncestorClass(@NotNull List<ClassDescriptor> superclassDescriptors) {
ClassDescriptor ancestorClass = BindingUtils.findAncestorClass(superclassDescriptors);
ClassDescriptor ancestorClass = findAncestorClass(superclassDescriptors);
superclassDescriptors.remove(ancestorClass);
return ancestorClass;
}
@@ -238,6 +238,9 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) {
if (expression.getSelectorExpression() instanceof JetCallExpression) {
return CallTranslator.translate(expression, context);
}
return translateQualifiedExpression(expression, context);
}
@@ -3,6 +3,6 @@ package org.jetbrains.k2js.translate.intrinsic;
/**
* @author Talanov Pavel
*/
public abstract class FunctionIntrinsic implements Intrinsic {
public interface FunctionIntrinsic extends Intrinsic {
}
@@ -31,7 +31,7 @@ public final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisi
@Override
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @Nullable Void nothing) {
if (!intrinsics.isIntrinsic(descriptor)) {
intrinsics.declareIntrinsic(descriptor);
intrinsics.declareOperatorIntrinsic(descriptor);
}
return null;
}
@@ -6,16 +6,24 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.types.JetStandardLibrary;
import org.jetbrains.jet.lang.types.expressions.OperatorConventions;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.intrinsic.array.ArrayGetIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.array.ArrayNullConstructorIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.array.ArraySetIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.primitive.PrimitiveBinaryOperationIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.primitive.PrimitiveCompareToIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.primitive.PrimitiveEqualsIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.primitive.PrimitiveUnaryOperationIntrinsic;
import org.jetbrains.k2js.translate.operation.OperatorTable;
import org.jetbrains.k2js.translate.utils.DescriptorUtils;
import java.util.HashMap;
import java.util.Map;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getFunctionByName;
/**
* @author Talanov Pavel
*/
//TODO: different maps for different kinds of intrinsics
public final class Intrinsics {
@NotNull
@@ -26,7 +34,6 @@ public final class Intrinsics {
private final Map<FunctionDescriptor, EqualsIntrinsic> equalsIntrinsics =
new HashMap<FunctionDescriptor, EqualsIntrinsic>();
@NotNull
private final Map<FunctionDescriptor, CompareToIntrinsic> compareToIntrinsics =
new HashMap<FunctionDescriptor, CompareToIntrinsic>();
@@ -35,14 +42,35 @@ public final class Intrinsics {
return new Intrinsics(library);
}
@NotNull
private final JetStandardLibrary library;
private Intrinsics(@NotNull JetStandardLibrary library) {
this.library = library;
declareOperatorIntrinsics();
//TODO: array intrinsic are under consideration
//declareArrayIntrinsics();
}
private void declareOperatorIntrinsics() {
IntrinsicDeclarationVisitor visitor = new IntrinsicDeclarationVisitor(this);
for (DeclarationDescriptor descriptor : library.getLibraryScope().getAllDescriptors()) {
descriptor.accept(visitor, null);
}
}
/*package*/ void declareIntrinsic(@NotNull FunctionDescriptor descriptor) {
private void declareArrayIntrinsics() {
FunctionDescriptor constructorFunction = getFunctionByName(library.getLibraryScope(), "Array");
functionIntrinsics.put(constructorFunction, ArrayNullConstructorIntrinsic.INSTANCE);
FunctionDescriptor getFunction = getFunctionByName(library.getArray(), "get");
functionIntrinsics.put(getFunction, ArrayGetIntrinsic.INSTANCE);
FunctionDescriptor setFunction = getFunctionByName(library.getArray(), "set");
functionIntrinsics.put(setFunction, ArraySetIntrinsic.INSTANCE);
}
/*package*/ void declareOperatorIntrinsic(@NotNull FunctionDescriptor descriptor) {
addCompareToIntrinsics(descriptor);
addEqualsIntrinsics(descriptor);
addUnaryIntrinsics(descriptor);
@@ -69,9 +97,10 @@ public final class Intrinsics {
if (token == null) return;
boolean isUnary = !DescriptorUtils.hasParameters(descriptor);
if (!isUnary) return;
functionIntrinsics.put(descriptor, UnaryOperationIntrinsic.newInstance(token));
functionIntrinsics.put(descriptor, PrimitiveUnaryOperationIntrinsic.newInstance(token));
}
//TODO: refactor
private void addBinaryIntrinsics(@NotNull FunctionDescriptor descriptor) {
String functionName = descriptor.getName();
boolean isUnary = !DescriptorUtils.hasParameters(descriptor);
@@ -80,7 +109,7 @@ public final class Intrinsics {
if (token == null) return;
//TODO: implement range and contains intrinsic
if (!OperatorTable.hasCorrespondingBinaryOperator(token)) return;
functionIntrinsics.put(descriptor, BinaryOperationIntrinsic.newInstance(token));
functionIntrinsics.put(descriptor, PrimitiveBinaryOperationIntrinsic.newInstance(token));
}
public boolean isIntrinsic(@NotNull DeclarationDescriptor descriptor) {
@@ -96,16 +125,16 @@ public final class Intrinsics {
@NotNull
public FunctionIntrinsic getFunctionIntrinsic(@NotNull FunctionDescriptor descriptor) {
return functionIntrinsics.get(descriptor);
return functionIntrinsics.get(descriptor.getOriginal());
}
@NotNull
public CompareToIntrinsic getCompareToIntrinsic(@NotNull FunctionDescriptor descriptor) {
return compareToIntrinsics.get(descriptor);
return compareToIntrinsics.get(descriptor.getOriginal());
}
@NotNull
public EqualsIntrinsic getEqualsIntrinsic(@NotNull FunctionDescriptor descriptor) {
return equalsIntrinsics.get(descriptor);
return equalsIntrinsics.get(descriptor.getOriginal());
}
}
@@ -0,0 +1,31 @@
package org.jetbrains.k2js.translate.intrinsic.array;
import com.google.dart.compiler.backend.js.ast.JsConditional;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TemporaryVariable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import java.util.List;
/**
* @author Talanov Pavel
*/
public enum ArrayGetIntrinsic implements FunctionIntrinsic {
INSTANCE;
@NotNull
@Override
public JsExpression apply(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 1 : "Array get expression must have one argument.";
JsExpression indexExpression = arguments.get(0);
TemporaryVariable arrayExpression = context.declareTemporary(receiver);
JsConditional indexInBoundsCheck =
IntrinsicArrayUtils.indexInBoundsCheck(indexExpression, arrayExpression, context);
return AstUtil.newSequence(arrayExpression.assignmentExpression(), AstUtil.newArrayAccess(receiver, indexExpression));
}
}
@@ -0,0 +1,25 @@
package org.jetbrains.k2js.translate.intrinsic.array;
import com.google.dart.compiler.backend.js.ast.JsArrayLiteral;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import java.util.List;
/**
* @author Talanov Pavel
*/
public enum ArrayNullConstructorIntrinsic implements FunctionIntrinsic {
INSTANCE;
//TODO: implement function passing to array constructor
@NotNull
@Override
public JsExpression apply(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull TranslationContext context) {
return new JsArrayLiteral();
}
}
@@ -0,0 +1,29 @@
package org.jetbrains.k2js.translate.intrinsic.array;
import com.google.dart.compiler.backend.js.ast.JsArrayAccess;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import java.util.List;
/**
* @author Talanov Pavel
*/
public enum ArraySetIntrinsic implements FunctionIntrinsic {
INSTANCE;
@NotNull
@Override
public JsExpression apply(@NotNull JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull TranslationContext context) {
assert arguments.size() == 2 : "Array set expression must have two arguments.";
JsExpression indexExpression = arguments.get(0);
JsExpression value = arguments.get(1);
JsArrayAccess arrayAccess = AstUtil.newArrayAccess(receiver, indexExpression);
return AstUtil.newAssignment(arrayAccess, value);
}
}
@@ -0,0 +1,41 @@
package org.jetbrains.k2js.translate.intrinsic.array;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TemporaryVariable;
import org.jetbrains.k2js.translate.context.TranslationContext;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.zeroLiteral;
/**
* @author Talanov Pavel
*/
public final class IntrinsicArrayUtils {
private IntrinsicArrayUtils() {
}
@NotNull
public static JsConditional indexInBoundsCheck(@NotNull JsExpression indexExpression,
@NotNull TemporaryVariable arrayTemporary,
@NotNull TranslationContext context) {
JsExpression positiveOrZero = new JsBinaryOperation
(JsBinaryOperator.GTE, indexExpression, zeroLiteral(context));
JsNameRef lengthExpression = AstUtil.newQualifiedNameRef("length");
lengthExpression.setQualifier(arrayTemporary.nameReference());
JsExpression lessThanLength = new JsBinaryOperation
(JsBinaryOperator.LT, indexExpression, lengthExpression);
JsExpression indexInBounds = AstUtil.and(positiveOrZero, lessThanLength);
JsConditional indexCheck = new JsConditional();
indexCheck.setTestExpression(indexInBounds);
indexCheck.setElseExpression(throwOutOfBoundsException());
return indexCheck;
}
@NotNull
public static JsExpression throwOutOfBoundsException() {
//TODO: think about exception
return new JsThisRef();
}
}
@@ -1,4 +1,4 @@
package org.jetbrains.k2js.translate.intrinsic;
package org.jetbrains.k2js.translate.intrinsic.primitive;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator;
@@ -6,6 +6,7 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import org.jetbrains.k2js.translate.operation.OperatorTable;
import java.util.List;
@@ -13,18 +14,18 @@ import java.util.List;
/**
* @author Talanov Pavel
*/
public class BinaryOperationIntrinsic extends FunctionIntrinsic {
public final class PrimitiveBinaryOperationIntrinsic implements FunctionIntrinsic {
@NotNull
/*package*/ static BinaryOperationIntrinsic newInstance(@NotNull JetToken token) {
public static PrimitiveBinaryOperationIntrinsic newInstance(@NotNull JetToken token) {
JsBinaryOperator operator = OperatorTable.getBinaryOperator(token);
return new BinaryOperationIntrinsic(operator);
return new PrimitiveBinaryOperationIntrinsic(operator);
}
@NotNull
private final JsBinaryOperator operator;
private BinaryOperationIntrinsic(@NotNull JsBinaryOperator operator) {
private PrimitiveBinaryOperationIntrinsic(@NotNull JsBinaryOperator operator) {
this.operator = operator;
}
@@ -1,10 +1,11 @@
package org.jetbrains.k2js.translate.intrinsic;
package org.jetbrains.k2js.translate.intrinsic.primitive;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.CompareToIntrinsic;
import org.jetbrains.k2js.translate.operation.OperatorTable;
import java.util.List;
@@ -15,7 +16,7 @@ import java.util.List;
public final class PrimitiveCompareToIntrinsic extends CompareToIntrinsic {
@NotNull
/*package*/ static PrimitiveCompareToIntrinsic newInstance() {
public static PrimitiveCompareToIntrinsic newInstance() {
return new PrimitiveCompareToIntrinsic();
}
@@ -1,9 +1,10 @@
package org.jetbrains.k2js.translate.intrinsic;
package org.jetbrains.k2js.translate.intrinsic.primitive;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.EqualsIntrinsic;
import java.util.List;
@@ -13,7 +14,7 @@ import java.util.List;
public final class PrimitiveEqualsIntrinsic extends EqualsIntrinsic {
@NotNull
/*package*/ static PrimitiveEqualsIntrinsic newInstance() {
public static PrimitiveEqualsIntrinsic newInstance() {
return new PrimitiveEqualsIntrinsic();
}
@@ -1,4 +1,4 @@
package org.jetbrains.k2js.translate.intrinsic;
package org.jetbrains.k2js.translate.intrinsic.primitive;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsPrefixOperation;
@@ -6,6 +6,7 @@ import com.google.dart.compiler.backend.js.ast.JsUnaryOperator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lexer.JetToken;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import org.jetbrains.k2js.translate.operation.OperatorTable;
import java.util.List;
@@ -13,18 +14,18 @@ import java.util.List;
/**
* @author Talanov Pavel
*/
public class UnaryOperationIntrinsic extends FunctionIntrinsic {
public final class PrimitiveUnaryOperationIntrinsic implements FunctionIntrinsic {
@NotNull
/*package*/ static UnaryOperationIntrinsic newInstance(@NotNull JetToken token) {
public static PrimitiveUnaryOperationIntrinsic newInstance(@NotNull JetToken token) {
JsUnaryOperator operator = OperatorTable.getUnaryOperator(token);
return new UnaryOperationIntrinsic(operator);
return new PrimitiveUnaryOperationIntrinsic(operator);
}
@NotNull
private final JsUnaryOperator operator;
private UnaryOperationIntrinsic(@NotNull JsUnaryOperator operator) {
private PrimitiveUnaryOperationIntrinsic(@NotNull JsUnaryOperator operator) {
this.operator = operator;
}
@@ -3,7 +3,6 @@ package org.jetbrains.k2js.translate.operation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperation;
import com.google.dart.compiler.backend.js.ast.JsBinaryOperator;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsNumberLiteral;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetBinaryExpression;
@@ -13,6 +12,7 @@ import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.intrinsic.CompareToIntrinsic;
import org.jetbrains.k2js.translate.reference.CallTranslator;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.Arrays;
@@ -73,10 +73,9 @@ public final class CompareToTranslator extends AbstractTranslator {
@NotNull
private JsExpression overloadedCompareTo() {
JsNumberLiteral zeroLiteral = program().getNumberLiteral(0);
JsBinaryOperator correspondingOperator = OperatorTable.getBinaryOperator(operationToken);
JsExpression methodCall = CallTranslator.translate(expression, context());
return new JsBinaryOperation(correspondingOperator, methodCall, zeroLiteral);
return new JsBinaryOperation(correspondingOperator, methodCall, TranslationUtils.zeroLiteral(context()));
}
@NotNull
@@ -9,6 +9,8 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetArrayAccessExpression;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.intrinsic.array.ArrayGetIntrinsic;
import org.jetbrains.k2js.translate.intrinsic.array.ArraySetIntrinsic;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
@@ -41,19 +43,47 @@ public final class ArrayAccessTranslator extends AccessTranslator {
@Override
@NotNull
public JsInvocation translateAsGet() {
return translateAsArrayAccessWithIndices();
public JsExpression translateAsGet() {
if (intrinsicCall()) {
return intrinsicGet();
}
return translateAsAccessMethodCall();
}
private boolean intrinsicCall() {
return context().intrinsics().isIntrinsic(methodDescriptor);
}
@NotNull
private JsExpression intrinsicGet() {
return ArrayGetIntrinsic.INSTANCE.apply(translateArrayExpression(), translateIndexExpressions(), context());
}
@Override
@NotNull
public JsExpression translateAsSet(@NotNull JsExpression expression) {
JsInvocation setCall = translateAsArrayAccessWithIndices();
if (intrinsicCall()) {
return intrinsicSet(expression);
}
return overloadedSet(expression);
}
@NotNull
private JsExpression intrinsicSet(@NotNull JsExpression expression) {
List<JsExpression> arguments = translateIndexExpressions();
arguments.add(expression);
return ArraySetIntrinsic.INSTANCE.apply(translateArrayExpression(), arguments, context());
}
@NotNull
private JsExpression overloadedSet(@NotNull JsExpression expression) {
JsInvocation setCall = translateAsAccessMethodCall();
setCall.getArguments().add(expression);
return setCall;
}
private JsInvocation translateAsArrayAccessWithIndices() {
@NotNull
private JsInvocation translateAsAccessMethodCall() {
JsNameRef accessMethodReference = getAccessMethodReference();
AstUtil.setQualifier(accessMethodReference, translateArrayExpression());
return AstUtil.newInvocation(accessMethodReference, translateIndexExpressions());
@@ -26,18 +26,9 @@ import static org.jetbrains.k2js.translate.utils.TranslationUtils.*;
/**
* @author Talanov Pavel
*/
//TODO: write tests on calling backing fields as functions
public final class CallTranslator extends AbstractTranslator {
//TODO: remove?
// public static boolean isFunctionCall(@NotNull JetOperationExpression expression,
// @NotNull TranslationContext context) {
// DeclarationDescriptor descriptor = getDescriptorForReferenceExpression
// (context.bindingContext(), expression.getOperation());
// return (descriptor instanceof FunctionDescriptor);
// }
public static JsExpression translate(@NotNull JetUnaryExpression unaryExpression,
@NotNull TranslationContext context) {
JsExpression receiver = TranslationUtils.translateBaseExpression(context, unaryExpression);
@@ -48,6 +39,7 @@ public final class CallTranslator extends AbstractTranslator {
return (new CallTranslator(receiver, arguments, (FunctionDescriptor) descriptor, context)).translate();
}
//TODO: method too long
public static JsExpression translate(@NotNull JetDotQualifiedExpression dotExpression,
@NotNull TranslationContext context) {
//TODO: look for duplication
@@ -7,6 +7,7 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
@@ -15,9 +16,11 @@ import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
import static org.jetbrains.k2js.translate.utils.PsiUtils.getSelectorAsSimpleName;
import static org.jetbrains.k2js.translate.utils.PsiUtils.isBackingFieldReference;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.backingFieldReference;
/**
* @author Talanov Pavel
@@ -85,7 +88,8 @@ public final class PropertyAccessTranslator extends AccessTranslator {
public static boolean canBePropertyGetterCall(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
return (BindingUtils.getPropertyDescriptorForSimpleName(context.bindingContext(), expression) != null);
return (getDescriptorForReferenceExpression
(context.bindingContext(), expression) instanceof PropertyDescriptor);
}
public static boolean canBePropertyGetterCall(@NotNull JetExpression expression,
@@ -108,19 +112,23 @@ public final class PropertyAccessTranslator extends AccessTranslator {
private final JetExpression qualifier;
@NotNull
private final PropertyDescriptor propertyDescriptor;
private final boolean isBackingFieldAccess;
private PropertyAccessTranslator(@NotNull JetSimpleNameExpression simpleName,
@NotNull TranslationContext context) {
super(context);
this.qualifier = null;
this.propertyDescriptor = getPropertyDescriptor(simpleName);
this.isBackingFieldAccess = isBackingFieldReference(simpleName);
}
private PropertyAccessTranslator(@NotNull JetQualifiedExpression qualifiedExpression,
@NotNull TranslationContext context) {
super(context);
this.qualifier = qualifiedExpression.getReceiverExpression();
this.propertyDescriptor = getPropertyDescriptor(getNotNullSelector(qualifiedExpression));
JetSimpleNameExpression selector = getNotNullSelector(qualifiedExpression);
this.propertyDescriptor = getPropertyDescriptor(selector);
this.isBackingFieldAccess = isBackingFieldReference(selector);
}
private PropertyAccessTranslator(@NotNull PropertyDescriptor descriptor,
@@ -128,11 +136,26 @@ public final class PropertyAccessTranslator extends AccessTranslator {
super(context);
this.qualifier = null;
this.propertyDescriptor = descriptor;
this.isBackingFieldAccess = false;
}
@Override
@NotNull
public JsExpression translateAsGet() {
if (isBackingFieldAccess) {
return backingFieldGet();
} else {
return getterCall();
}
}
@NotNull
private JsExpression backingFieldGet() {
return backingFieldReference(context(), propertyDescriptor);
}
@NotNull
private JsExpression getterCall() {
JsName getterName = getGetterName();
return qualifiedAccessorInvocation(getterName);
}
@@ -140,12 +163,27 @@ public final class PropertyAccessTranslator extends AccessTranslator {
@Override
@NotNull
public JsExpression translateAsSet(@NotNull JsExpression toSetTo) {
if (isBackingFieldAccess) {
return backingFieldAssignment(toSetTo);
} else {
return setterCall(toSetTo);
}
}
@NotNull
private JsExpression setterCall(@NotNull JsExpression toSetTo) {
JsName setterName = getSetterName();
JsInvocation setterCall = qualifiedAccessorInvocation(setterName);
setterCall.getArguments().add(toSetTo);
return setterCall;
}
@NotNull
private JsExpression backingFieldAssignment(@NotNull JsExpression toSetTo) {
JsNameRef backingFieldReference = backingFieldReference(context(), propertyDescriptor);
return AstUtil.newAssignment(backingFieldReference, toSetTo);
}
@NotNull
private JsInvocation qualifiedAccessorInvocation(@NotNull JsName accessorName) {
JsNameRef accessorReference = accessorName.makeRef();
@@ -197,12 +235,12 @@ public final class PropertyAccessTranslator extends AccessTranslator {
return setter;
}
@NotNull
private PropertyDescriptor getPropertyDescriptor(@NotNull JetSimpleNameExpression expression) {
PropertyDescriptor propertyDescriptor =
BindingUtils.getPropertyDescriptorForSimpleName(context().bindingContext(), expression);
assert propertyDescriptor != null;
return propertyDescriptor;
DeclarationDescriptor descriptor =
getDescriptorForReferenceExpression(context().bindingContext(), expression);
//TODO
assert descriptor instanceof PropertyDescriptor;
return (PropertyDescriptor) descriptor;
}
}
@@ -12,61 +12,14 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
/**
* @author Talanov Pavel
*/
public class ReferenceTranslator extends AbstractTranslator {
@NotNull
private final JetSimpleNameExpression simpleName;
@Nullable
private JsExpression result;
@NotNull
public static JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
return (new ReferenceTranslator(expression, context)).translateSimpleName();
}
private ReferenceTranslator(@NotNull JetSimpleNameExpression expression, @NotNull TranslationContext context) {
super(context);
this.simpleName = expression;
this.result = null;
}
@NotNull
//TODO: make this process simpler and clearer
public JsExpression translateSimpleName() {
tryResolveAsAlias();
tryResolveAsPropertyAccess();
tryResolveAsReference();
if (result != null) {
return result;
}
throw new AssertionError("Undefined name in this scope: " + simpleName.getReferencedName());
}
//TODO: refactor
private void tryResolveAsReference() {
if (alreadyResolved()) return;
DeclarationDescriptor referencedDescriptor =
BindingUtils.getDescriptorForReferenceExpression(context().bindingContext(), simpleName);
if (referencedDescriptor == null) return;
if (!context().isDeclared(referencedDescriptor)) return;
JsName referencedName = context().getNameForDescriptor(referencedDescriptor);
JsExpression implicitReceiver = getImplicitReceiver(referencedDescriptor, context());
if (implicitReceiver != null) {
result = AstUtil.qualified(referencedName, implicitReceiver);
} else {
result = context().getNameForDescriptor(referencedDescriptor).makeRef();
}
}
// TODO: move to other util
@Nullable
public static JsExpression getImplicitReceiver(@NotNull DeclarationDescriptor referencedDescriptor,
@NotNull TranslationContext context) {
@@ -80,28 +33,74 @@ public class ReferenceTranslator extends AbstractTranslator {
return context.declarations().getQualifier(referencedDescriptor);
}
@NotNull
public static JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
if (PropertyAccessTranslator.canBePropertyAccess(expression, context)) {
return PropertyAccessTranslator.translateAsPropertyGetterCall(expression, context);
}
DeclarationDescriptor referencedDescriptor =
getDescriptorForReferenceExpression(context.bindingContext(), expression);
return (new ReferenceTranslator(referencedDescriptor, context)).translate();
}
@NotNull
public static JsExpression translateReference(@NotNull DeclarationDescriptor referencedDescriptor,
@NotNull TranslationContext context) {
return (new ReferenceTranslator(referencedDescriptor, context)).translate();
}
@NotNull
private final DeclarationDescriptor referencedDescriptor;
@Nullable
private JsExpression result;
private ReferenceTranslator(@NotNull DeclarationDescriptor referencedDescriptor, @NotNull TranslationContext context) {
super(context);
this.referencedDescriptor = referencedDescriptor;
this.result = null;
}
@NotNull
public JsExpression translate() {
tryResolveAsAlias();
tryResolveAsReference();
if (result != null) {
return result;
}
throw new AssertionError("Undefined name in this scope: " + referencedDescriptor.getName());
}
private void tryResolveAsAlias() {
//TODO: decide if this code is meaningful
if (alreadyResolved()) return;
DeclarationDescriptor referencedDescriptor =
BindingUtils.getDescriptorForReferenceExpression(context().bindingContext(), simpleName);
if (referencedDescriptor == null) return;
if (!context().aliaser().hasAliasForDeclaration(referencedDescriptor)) return;
result = context().aliaser().getAliasForDeclaration(referencedDescriptor);
}
private void tryResolveAsReference() {
if (alreadyResolved()) return;
if (!context().isDeclared(referencedDescriptor)) return;
JsName referencedName = context().getNameForDescriptor(referencedDescriptor);
JsExpression implicitReceiver = getImplicitReceiver(referencedDescriptor, context());
generateReference(referencedName, implicitReceiver);
}
private void generateReference(@NotNull JsName referencedName, @Nullable JsExpression implicitReceiver) {
if (implicitReceiver != null) {
result = AstUtil.qualified(referencedName, implicitReceiver);
} else {
result = context().getNameForDescriptor(referencedDescriptor).makeRef();
}
}
private boolean alreadyResolved() {
return result != null;
}
private void tryResolveAsPropertyAccess() {
if (alreadyResolved()) return;
if (!PropertyAccessTranslator.canBePropertyGetterCall(simpleName, context())) return;
result = PropertyAccessTranslator.translateAsPropertyGetterCall(simpleName, context());
}
}
@@ -14,6 +14,8 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getVariableDescriptorForVariableAsFunction;
/**
* @author Talanov Pavel
* <p/>
@@ -32,6 +34,7 @@ public final class BindingUtils {
assert descriptor != null;
assert descriptorClass.isInstance(descriptor)
: expression.toString() + " expected to have of type" + descriptorClass.toString();
//noinspection unchecked
return (D) descriptor;
}
@@ -64,23 +67,6 @@ public final class BindingUtils {
return getDescriptorForExpression(context, declaration, PropertyDescriptor.class);
}
//TODO: possibly remove
// @NotNull
// public static PropertySetterDescriptor getPropertySetterDescriptorForProperty(@NotNull BindingContext context,
// @NotNull JetProperty property) {
// PropertySetterDescriptor result = getPropertyDescriptor(context, property).getSetter();
// assert result != null : "Property should have a setter descriptor";
// return result;
// }
//
// @NotNull
// public static PropertyGetterDescriptor getPropertyGetterDescriptorForProperty(@NotNull BindingContext context,
// @NotNull JetProperty property) {
// PropertyGetterDescriptor result = getPropertyDescriptor(context, property).getGetter();
// assert result != null : "Property should have a getter descriptor";
// return result;
// }
@NotNull
public static JetClass getClassForDescriptor(@NotNull BindingContext context,
@NotNull ClassDescriptor descriptor) {
@@ -89,17 +75,6 @@ public final class BindingUtils {
return (JetClass) result;
}
//TODO: delete?
@Nullable
public static JetDeclaration getDeclarationForDescriptor(@NotNull BindingContext context,
@NotNull DeclarationDescriptor descriptor) {
PsiElement result = context.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor);
if (!(result instanceof JetDeclaration)) {
return null;
}
return (JetDeclaration) result;
}
@NotNull
public static List<ClassDescriptor> getSuperclassDescriptors(@NotNull BindingContext context,
@NotNull JetClass classDeclaration) {
@@ -131,7 +106,7 @@ public final class BindingUtils {
public static boolean hasAncestorClass(@NotNull BindingContext context, @NotNull JetClass classDeclaration) {
List<ClassDescriptor> superclassDescriptors = getSuperclassDescriptors(context, classDeclaration);
return (findAncestorClass(superclassDescriptors) != null);
return (DescriptorUtils.findAncestorClass(superclassDescriptors) != null);
}
public static boolean isStatement(@NotNull BindingContext context, @NotNull JetExpression expression) {
@@ -170,25 +145,26 @@ public final class BindingUtils {
return (JetProperty) result;
}
@Nullable
@NotNull
public static DeclarationDescriptor getDescriptorForReferenceExpression(@NotNull BindingContext context,
@NotNull JetReferenceExpression reference) {
return context.get(BindingContext.REFERENCE_TARGET, reference);
DeclarationDescriptor referencedDescriptor = getNullableDescriptorForReferenceExpression(context, reference);
assert referencedDescriptor != null : "Reference expression must reference a descriptor.";
return referencedDescriptor;
}
static private boolean isNotAny(@NotNull DeclarationDescriptor superClassDescriptor) {
return !superClassDescriptor.equals(JetStandardClasses.getAny());
}
//TODO move unrelated utils to other class
@Nullable
public static ClassDescriptor findAncestorClass(@NotNull List<ClassDescriptor> superclassDescriptors) {
for (ClassDescriptor descriptor : superclassDescriptors) {
if (descriptor.getKind() == ClassKind.CLASS) {
return descriptor;
}
private static DeclarationDescriptor getNullableDescriptorForReferenceExpression(@NotNull BindingContext context,
@NotNull JetReferenceExpression reference) {
DeclarationDescriptor referencedDescriptor = context.get(BindingContext.REFERENCE_TARGET, reference);
if (referencedDescriptor instanceof VariableAsFunctionDescriptor) {
return getVariableDescriptorForVariableAsFunction((VariableAsFunctionDescriptor) referencedDescriptor);
}
return null;
return referencedDescriptor;
}
private static boolean isNotAny(@NotNull DeclarationDescriptor superClassDescriptor) {
return !superClassDescriptor.equals(JetStandardClasses.getAny());
}
//TODO: duplication
@@ -210,48 +186,30 @@ public final class BindingUtils {
return (descriptor.getContainingDeclaration() instanceof ClassDescriptor);
}
//TODO: refactor, check with getDescriptorForReferenceExpression
@Nullable
public static PropertyDescriptor getPropertyDescriptorForSimpleName(@NotNull BindingContext context,
@NotNull JetSimpleNameExpression expression) {
ResolvedCall<?> resolvedCall = BindingUtils.getResolvedCall(context, expression);
if (resolvedCall == null) return null;
DeclarationDescriptor descriptor = resolvedCall.getCandidateDescriptor();
if (descriptor instanceof PropertyDescriptor) {
return (PropertyDescriptor) descriptor;
}
if (descriptor instanceof VariableAsFunctionDescriptor) {
VariableAsFunctionDescriptor functionVariable = (VariableAsFunctionDescriptor) descriptor;
VariableDescriptor variableDescriptor = functionVariable.getVariableDescriptor();
if (variableDescriptor instanceof PropertyDescriptor) {
return (PropertyDescriptor) variableDescriptor;
}
}
return null;
}
@Nullable
@NotNull
public static ResolvedCall<?> getResolvedCall(@NotNull BindingContext context,
@NotNull JetExpression expression) {
return (context.get(BindingContext.RESOLVED_CALL, expression));
ResolvedCall<? extends CallableDescriptor> resolvedCall = context.get(BindingContext.RESOLVED_CALL, expression);
assert resolvedCall != null : "Must resolve to a call.";
return resolvedCall;
}
@NotNull
public static FunctionDescriptor getFunctionDescriptorForCallExpression(@NotNull BindingContext context,
@NotNull JetCallExpression expression) {
//TODO: move to PSI utils
JetExpression calleeExpression = expression.getCalleeExpression();
assert calleeExpression != null;
JetExpression calleeExpression = PsiUtils.getCallee(expression);
ResolvedCall<?> resolvedCall = getResolvedCall(context, calleeExpression);
//TODO
CallableDescriptor descriptor = resolvedCall.getCandidateDescriptor();
CallableDescriptor descriptor = getDescriptorForResolvedCall(resolvedCall);
assert descriptor instanceof FunctionDescriptor :
"Callee expression must have resolved call with descriptor of type FunctionDescriptor";
return (FunctionDescriptor) descriptor;
}
@NotNull
private static CallableDescriptor getDescriptorForResolvedCall(@NotNull ResolvedCall<?> resolvedCall) {
return resolvedCall.getCandidateDescriptor();
}
public static boolean isVariableReassignment(@NotNull BindingContext context, @NotNull JetExpression expression) {
Boolean result = context.get(BindingContext.VARIABLE_REASSIGNMENT, expression);
assert result != null;
@@ -262,7 +220,7 @@ public final class BindingUtils {
@Nullable
public static FunctionDescriptor getFunctionDescriptorForOperationExpression(@NotNull BindingContext context,
@NotNull JetOperationExpression expression) {
DeclarationDescriptor descriptorForReferenceExpression = getDescriptorForReferenceExpression
DeclarationDescriptor descriptorForReferenceExpression = getNullableDescriptorForReferenceExpression
(context, expression.getOperation());
if (descriptorForReferenceExpression == null) return null;
@@ -1,15 +1,15 @@
package org.jetbrains.k2js.translate.utils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.expressions.OperatorConventions;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* @author Talanov Pavel
@@ -58,4 +58,43 @@ public final class DescriptorUtils {
}
return resultingList;
}
@NotNull
public static FunctionDescriptor getFunctionByName(@NotNull ClassDescriptor classDescriptor,
@NotNull String name) {
JetScope scope = classDescriptor.getDefaultType().getMemberScope();
return getFunctionByName(scope, name);
}
@NotNull
public static FunctionDescriptor getFunctionByName(@NotNull JetScope scope,
@NotNull String name) {
Set<FunctionDescriptor> functionDescriptors = scope.getFunctions(name);
assert functionDescriptors.size() == 1 :
"In scope " + scope + " supposed to be exactly one " + name + " function.";
//noinspection LoopStatementThatDoesntLoop
for (FunctionDescriptor descriptor : functionDescriptors) {
return descriptor;
}
throw new AssertionError("In scope " + scope
+ " supposed to be exactly one " + name + " function.");
}
@Nullable
public static ClassDescriptor findAncestorClass(@NotNull List<ClassDescriptor> superclassDescriptors) {
for (ClassDescriptor descriptor : superclassDescriptors) {
if (descriptor.getKind() == ClassKind.CLASS) {
return descriptor;
}
}
return null;
}
@NotNull
/*package*/ static VariableDescriptor getVariableDescriptorForVariableAsFunction
(@NotNull VariableAsFunctionDescriptor descriptor) {
VariableDescriptor functionVariable = descriptor.getVariableDescriptor();
assert functionVariable != null;
return functionVariable;
}
}
@@ -47,4 +47,15 @@ public final class PsiUtils {
public static boolean isAssignment(JetToken token) {
return (token == JetTokens.EQ);
}
public static boolean isBackingFieldReference(@NotNull JetSimpleNameExpression expression) {
return expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER;
}
@NotNull
/*package*/ static JetExpression getCallee(@NotNull JetCallExpression expression) {
JetExpression calleeExpression = expression.getCalleeExpression();
assert calleeExpression != null;
return calleeExpression;
}
}
@@ -76,15 +76,6 @@ public final class TranslationUtils {
return AstUtil.qualified(backingFieldName, qualifier);
}
@NotNull
public static String getPropertyName(@NotNull JetProperty expression) {
String propertyName = expression.getName();
if (propertyName == null) {
throw new AssertionError("Property with no name encountered!");
}
return propertyName;
}
@Nullable
public static JsExpression translateInitializerForProperty(@NotNull JetProperty declaration,
@NotNull TranslationContext context) {
@@ -212,4 +203,9 @@ public final class TranslationUtils {
return JsFunction.getAnonymousFunctionWithScope(scope.jsScope());
}
@NotNull
public static JsNumberLiteral zeroLiteral(@NotNull TranslationContext context) {
return context.program().getNumberLiteral(0);
}
}
@@ -1,5 +1,7 @@
package org.jetbrains.k2js.test;
import org.junit.Test;
/**
* @author Talanov Pavel
*/
@@ -11,14 +13,13 @@ public class StandardClassesTest extends TranslationTest {
return MAIN;
}
//TODO: implement via intrinsics
// @Test
// public void array() throws Exception {
// testFooBoxIsTrue("array.kt");
// }
//
// @Test
// public void arrayAccess() throws Exception {
// testFooBoxIsTrue("arrayAccess.kt");
// }
@Test
public void array() throws Exception {
testFooBoxIsTrue("array.kt");
}
@Test
public void arrayAccess() throws Exception {
testFooBoxIsTrue("arrayAccess.kt");
}
}
@@ -1,6 +1,8 @@
function test() {
var a = new Kotlin.Array();
var a = new Kotlin.Array(3, function () {
return 3
});
a.set(0, "1")
a.set(2, "4")
return (a.get(0) == "1") && (a.get(2) == "4") && (a.get(1) == undefined);
return (a.get(0) == "1") && (a.get(2) == "4") && (a.get(1) == 3);
}
+20 -2
View File
@@ -447,17 +447,35 @@ Object.extend(Function.prototype, (function () {
})());
Kotlin = {}
Kotlin.Exceptions = {}
Kotlin.Exceptions.IndexOutOfBounds = {}
Kotlin.array = function (len) {
return new Kotlin.Array(len, function () {
return null
});
}
Kotlin.Array = Class.create({
initialize:function () {
initialize:function (len, f) {
this.array = [];
var i = 0;
while (i < len) {
this.array.push(f(i));
++i;
}
},
get:function (index) {
if ((index < 0) || (index > this.array.length)) {
throw Kotlin.Exceptions.IndexOutOfBounds;
}
return (this.array)[index];
},
set:function (index, value) {
if ((index < 0) || (index > this.array.length)) {
throw Kotlin.Exceptions.IndexOutOfBounds;
}
(this.array)[index] = value;
}
})
});
Kotlin.Class = Class
Kotlin.Namespace = Namespace