This commit is contained in:
Pavel Talanov
2011-11-30 15:24:50 +04:00
parent f8d342c207
commit 9c9c9e3141
12 changed files with 453 additions and 353 deletions
+253 -221
View File
@@ -7,17 +7,18 @@
<bookmark url="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/safeCallReturnsNullIfFails.kt" line="3" />
</component>
<component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="DELETED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\reference\ReferenceProvider.java" afterPath="" />
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="Work on reference expression. Test fixes to follow.">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.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/declarations/DeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.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/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/TranslationUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
</list>
<ignored path="k2js.iws" />
@@ -89,19 +90,6 @@
<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="135" 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" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
</line_breakpoints>
<breakpoint_any>
<breakpoint>
@@ -162,26 +150,6 @@
<splitter split-orientation="horizontal" split-proportion="0.41879195">
<split-first>
<leaf>
<file leaf-file-name="DeclarationVisitor.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="44" column="7" selection-start="1742" selection-end="1742" vertical-scroll-proportion="0.33848533">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="MutableClassDescriptor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/MutableClassDescriptor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="284" column="0" selection-start="11305" selection-end="11305" vertical-scroll-proportion="0.0">
<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">
<provider selected="true" editor-type-id="text-editor">
@@ -221,12 +189,23 @@
<file leaf-file-name="TraitTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TraitTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="27" column="16" selection-start="588" selection-end="588" vertical-scroll-proportion="0.0">
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Declarations.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java">
<provider selected="true" editor-type-id="text-editor">
<state line="77" column="72" selection-start="3004" selection-end="3004" vertical-scroll-proportion="0.36939722">
<folding>
<element signature="e#912#946#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Aliaser.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Aliaser.java">
<provider selected="true" editor-type-id="text-editor">
@@ -256,52 +235,32 @@
</provider>
</entry>
</file>
<file leaf-file-name="classUsesNamespaceProperties.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/classUsesNamespaceProperties.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="78" selection-start="94" selection-end="94" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="ReferenceTranslator.java" pinned="false" current="false" current-in-tab="false">
<file leaf-file-name="ReferenceTranslator.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="58" column="13" selection-start="2190" selection-end="2190" vertical-scroll-proportion="0.0">
<state line="68" column="0" selection-start="2643" selection-end="2643" vertical-scroll-proportion="0.3323398">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Declarations.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java">
<file leaf-file-name="UnaryOperationTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="61" column="0" selection-start="2388" selection-end="2388" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#912#946#0" expanded="true" />
</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="145" column="0" selection-start="6548" selection-end="6548" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PropertyAccessTest.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="61" column="43" selection-start="1443" selection-end="1443" vertical-scroll-proportion="0.5277778">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslationContext.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="170" column="0" selection-start="6259" selection-end="6259" vertical-scroll-proportion="0.0">
<state line="128" column="92" selection-start="5282" selection-end="5282" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -310,7 +269,7 @@
<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="124" column="67" selection-start="5325" selection-end="5325" vertical-scroll-proportion="18.038462">
<state line="105" column="20" selection-start="5187" selection-end="5187" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -321,14 +280,50 @@
<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">
<provider selected="true" editor-type-id="text-editor">
<state line="145" column="35" selection-start="6252" selection-end="6252" vertical-scroll-proportion="0.0">
<state line="261" column="93" selection-start="11645" selection-end="11645" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="funDelegation.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/trait/out/funDelegation.js">
<file leaf-file-name="OperationTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="45" column="39" selection-start="1882" selection-end="1882" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BinaryOperationTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="148" column="102" selection-start="5773" selection-end="5773" 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="135" column="0" selection-start="6206" selection-end="6206" 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="63" column="16" selection-start="1470" selection-end="1470" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="namespaceCustomAccessors.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/out/namespaceCustomAccessors.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
@@ -336,19 +331,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="traitExtendsTrait.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/trait/out/traitExtendsTrait.js">
<file leaf-file-name="TranslationTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="simpleInitializer.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/simpleInitializer.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<state line="2" column="25" selection-start="59" selection-end="59" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -375,22 +361,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/JetStandardLibrary.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java" />
<option value="$PROJECT_DIR$/translator/testFiles/class/out/classInstantiation.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java" />
<option value="$PROJECT_DIR$/translator/testFiles/class/out/simpleInitializer.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java" />
<option value="$PROJECT_DIR$/translator/testFiles/propertyAccess/out/namespaceCustomAccessors.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java" />
</list>
</option>
</component>
@@ -607,6 +593,50 @@
<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="propertyAccess" />
<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="propertyAccess" />
<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" />
@@ -669,7 +699,7 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="reference" />
<option name="myItemId" value="initializer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -788,40 +818,6 @@
</key>
</component>
<component name="RunManager" selected="JUnit.All in jetTests">
<configuration default="false" name="StandardClassesTest.array" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<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" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="BasicClassTest.classInstantiation" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
@@ -887,17 +883,17 @@
<method />
</configuration>
<configuration default="false" name="All in jetTests" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" />
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="jetTests" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<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">
@@ -941,6 +937,40 @@
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<configuration default="false" name="PropertyAccessTest.namespaceCustomAccessors" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true">
<pattern>
<option name="PATTERN" value="org.jetbrains.k2js.test.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<module name="jetTests" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.PropertyAccessTest" />
<option name="METHOD_NAME" value="namespaceCustomAccessors" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -1061,12 +1091,12 @@
<method />
</configuration>
<list size="6">
<item index="0" class="java.lang.String" itemvalue="JUnit.StandardClassesTest.array" />
<item index="1" class="java.lang.String" itemvalue="JUnit.BasicClassTest.classInstantiation" />
<item index="2" class="java.lang.String" itemvalue="JUnit.ClassInheritanceTest.initializersOfBasicClassExecute" />
<item index="3" class="java.lang.String" itemvalue="JUnit.tests" />
<item index="4" class="java.lang.String" itemvalue="JUnit.All in jetTests" />
<item index="5" class="java.lang.String" itemvalue="JUnit.BasicClassTest.SimpleInitializer" />
<item index="0" class="java.lang.String" itemvalue="JUnit.BasicClassTest.classInstantiation" />
<item index="1" class="java.lang.String" itemvalue="JUnit.ClassInheritanceTest.initializersOfBasicClassExecute" />
<item index="2" class="java.lang.String" itemvalue="JUnit.tests" />
<item index="3" class="java.lang.String" itemvalue="JUnit.All in jetTests" />
<item index="4" class="java.lang.String" itemvalue="JUnit.BasicClassTest.SimpleInitializer" />
<item index="5" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.namespaceCustomAccessors" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -1184,7 +1214,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="Reworked ExtractionVisitor into Declaration visitor." />
<option name="LAST_COMMIT_MESSAGE" value="Work on reference expression. Test fixes to follow." />
<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" />
@@ -1197,7 +1227,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="Added test for unary operation on int properties." />
<MESSAGE value="Refactoring BinaryOperationTranslator." />
<MESSAGE value="Binary operation overloading for most cases (except contains, compareTo)." />
<MESSAGE value="Added test for operator overloading." />
@@ -1222,6 +1251,7 @@
<MESSAGE value="Worked on namer." />
<MESSAGE value="Include standard library." />
<MESSAGE value="Reworked ExtractionVisitor into Declaration visitor." />
<MESSAGE value="Work on reference expression. Test fixes to follow." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1231,111 +1261,67 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/simpleInitializer.js">
<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="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<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/OperatorOverloadingTest.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/utils/PsiUtils.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">
<state line="16" column="18" selection-start="420" selection-end="420" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="25" selection-start="59" selection-end="59" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/UnaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="59" column="0" selection-start="2671" selection-end="2857" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/trait/out/funDelegation.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/trait/out/traitExtendsTrait.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/initializer/InitializerVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="37" selection-start="1852" selection-end="1852" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="89" column="84" selection-start="3662" selection-end="3662" vertical-scroll-proportion="0.0">
<state line="128" column="92" selection-start="5282" selection-end="5282" 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="145" column="35" selection-start="6252" selection-end="6252" vertical-scroll-proportion="0.0">
<state line="261" column="93" selection-start="11645" selection-end="11645" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="44" column="7" selection-start="1742" selection-end="1742" vertical-scroll-proportion="0.33848533">
<folding>
<element signature="imports" expanded="true" />
</folding>
<state line="45" column="39" selection-start="1882" selection-end="1882" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/BinaryOperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="148" column="102" selection-start="5773" selection-end="5773" 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="124" column="67" selection-start="5325" selection-end="5325" vertical-scroll-proportion="18.038462">
<state line="105" column="20" selection-start="5187" selection-end="5187" 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/declarations/Declarations.java">
<provider selected="true" editor-type-id="text-editor">
<state line="61" column="0" selection-start="2388" selection-end="2388" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#912#946#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="170" column="0" selection-start="6259" selection-end="6259" 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="58" column="13" selection-start="2190" selection-end="2190" 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="145" column="0" selection-start="6548" selection-end="6548" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/kotlinLib/cases/array.js">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/out/namespaceCustomAccessors.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 />
@@ -1344,11 +1330,57 @@
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="61" column="43" selection-start="1443" selection-end="1443" vertical-scroll-proportion="0.5277778">
<state line="63" column="16" selection-start="1470" selection-end="1470" 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="135" column="0" selection-start="6206" selection-end="6206" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/classUsesNamespaceProperties.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="78" selection-start="94" selection-end="94" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="44" column="7" selection-start="1742" selection-end="1742" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TraitTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="16" selection-start="304" selection-end="304" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="68" column="0" selection-start="2643" selection-end="2643" vertical-scroll-proportion="0.3323398">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/Declarations.java">
<provider selected="true" editor-type-id="text-editor">
<state line="77" column="72" selection-start="3004" selection-end="3004" vertical-scroll-proportion="0.36939722">
<folding>
<element signature="e#912#946#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
@@ -78,7 +78,7 @@ public final class Declarations {
}
/*package*/ void putScope(@NotNull DeclarationDescriptor descriptor, @NotNull JsScope scope) {
assert !descriptorToScopeMap.containsKey(descriptor) : "Already contains that key!";
// assert !descriptorToScopeMap.containsKey(descriptor) : "Already contains that key!";
descriptorToScopeMap.put(descriptor, scope);
}
@@ -89,7 +89,7 @@ public final class Declarations {
}
/*package*/ void putQualifier(@NotNull DeclarationDescriptor descriptor, @Nullable JsNameRef qualifier) {
assert !descriptorToQualifierMap.containsKey(descriptor) : "Already contains that key!";
// assert !descriptorToQualifierMap.containsKey(descriptor) : "Already contains that key!";
descriptorToQualifierMap.put(descriptor, qualifier);
}
}
@@ -258,9 +258,8 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
private JsExpression translateQualifiedExpression(@NotNull JetQualifiedExpression expression,
@NotNull TranslationContext context) {
PropertyAccessTranslator propertyAccessTranslator = Translation.propertyAccessTranslator(context);
if (propertyAccessTranslator.canBePropertyGetterCall(expression)) {
return propertyAccessTranslator.translateAsPropertyGetterCall(expression);
if (PropertyAccessTranslator.canBePropertyGetterCall(expression, context)) {
return PropertyAccessTranslator.translateAsPropertyGetterCall(expression, context);
}
return translateAsQualifiedAccess(expression, context);
}
@@ -17,7 +17,6 @@ import org.jetbrains.k2js.translate.expression.PatternTranslator;
import org.jetbrains.k2js.translate.expression.WhenTranslator;
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator;
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
import org.jetbrains.k2js.translate.utils.BindingUtils;
/**
@@ -34,11 +33,6 @@ public final class Translation {
return FunctionTranslator.newInstance(function, context);
}
@NotNull
static public PropertyAccessTranslator propertyAccessTranslator(@NotNull TranslationContext context) {
return PropertyAccessTranslator.newInstance(context);
}
@NotNull
static public JsStatement translateNamespace(@NotNull JetNamespace namespace,
@NotNull TranslationContext context) {
@@ -56,11 +50,6 @@ public final class Translation {
return PatternTranslator.newInstance(context);
}
// @NotNull
// static public ReferenceTranslator referenceTranslator(@NotNull TranslationContext context) {
// return ReferenceTranslator.translateSimpleName(context);
// }
@NotNull
static public JsNode translateExpression(@NotNull JetExpression expression, @NotNull TranslationContext context) {
return expression.accept(new ExpressionVisitor(), context);
@@ -145,8 +145,8 @@ public final class BinaryOperationTranslator extends OperationTranslator {
@NotNull
public JsInvocation setterCall(@NotNull JsExpression assignTo) {
PropertyAccessTranslator propertyAccessTranslator = Translation.propertyAccessTranslator(context());
JsInvocation setterCall = propertyAccessTranslator.translateAsPropertySetterCall(expression.getLeft());
JsInvocation setterCall =
PropertyAccessTranslator.translateAsPropertySetterCall(expression.getLeft(), context());
setterCall.setArguments(assignTo);
return setterCall;
}
@@ -10,8 +10,8 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslationContext;
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
import org.jetbrains.k2js.translate.utils.BindingUtils;
/**
@@ -42,7 +42,7 @@ public class OperationTranslator extends AbstractTranslator {
}
protected boolean isPropertyAccess(@NotNull JetExpression expression) {
return Translation.propertyAccessTranslator(context()).canBePropertyAccess(expression);
return PropertyAccessTranslator.canBePropertyAccess(expression, context());
}
@@ -124,9 +124,9 @@ public final class UnaryOperationTranslator extends OperationTranslator {
@NotNull
private JsExpression propertyReassignment(@NotNull JsExpression toCallMethodUpon) {
JetExpression jetBaseExpression = getBaseExpression();
PropertyAccessTranslator propertyAccessTranslator = Translation.propertyAccessTranslator(context());
JsInvocation setterCall = propertyAccessTranslator.translateAsPropertySetterCall(jetBaseExpression);
assert propertyAccessTranslator.canBePropertyGetterCall(jetBaseExpression) : "Should be a getter call";
JsInvocation setterCall =
PropertyAccessTranslator.translateAsPropertySetterCall(jetBaseExpression, context());
assert PropertyAccessTranslator.canBePropertyGetterCall(jetBaseExpression, context()) : "Should be a getter call";
JsExpression overloadedMethodCallOnPropertyGetter = operationExpression(toCallMethodUpon);
setterCall.setArguments(overloadedMethodCallOnPropertyGetter);
return setterCall;
@@ -10,7 +10,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
@@ -18,152 +17,189 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslationContext;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.PsiUtils;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
/**
* @author Talanov Pavel
*/
//TODO ask for code review. Class has messy code.
//TODO Refactor.
public final class PropertyAccessTranslator extends AbstractTranslator {
private static String MESSAGE = "Cannot be accessor call. Use canBeProperty*Call to ensure this method " +
"can be called safely.";
@NotNull
public static PropertyAccessTranslator newInstance(@NotNull TranslationContext context) {
return new PropertyAccessTranslator(context);
}
private PropertyAccessTranslator(@NotNull TranslationContext context) {
super(context);
}
//TODO: ask if these methods can be more clear
public boolean canBePropertyGetterCall(@NotNull JetExpression expression) {
if (expression instanceof JetQualifiedExpression) {
JetSimpleNameExpression selector = getNullableSelector((JetQualifiedExpression) expression);
if (selector == null) {
return false;
}
return (getNullableGetterName(selector) != null);
}
if (expression instanceof JetSimpleNameExpression) {
return (getNullableGetterName((JetSimpleNameExpression) expression) != null);
}
return false;
}
public boolean canBePropertyAccess(@NotNull JetExpression expression) {
return canBePropertyGetterCall(expression);
}
//TODO: delete?
public boolean canBePropertySetterCall(@NotNull JetExpression expression) {
if (expression instanceof JetQualifiedExpression) {
JetSimpleNameExpression selector = getNullableSelector((JetQualifiedExpression) expression);
if (selector == null) {
return false;
}
return (getNullableSetterName(selector) != null);
}
if (expression instanceof JetSimpleNameExpression) {
return (getNullableSetterName((JetSimpleNameExpression) expression) != null);
}
return false;
public static JsInvocation translateAsPropertySetterCall(@NotNull JetQualifiedExpression expression,
@NotNull TranslationContext context) {
return (new PropertyAccessTranslator(expression, context))
.translateAsPropertySetterCall();
}
@NotNull
public JsInvocation translateAsPropertyGetterCall(@NotNull JetExpression expression) {
public static JsInvocation translateAsPropertySetterCall(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
return (new PropertyAccessTranslator(expression, context))
.translateAsPropertySetterCall();
}
@NotNull
public static JsInvocation translateAsPropertySetterCall(@NotNull JetExpression expression,
@NotNull TranslationContext context) {
if (expression instanceof JetQualifiedExpression) {
return resolveAsPropertyGet((JetQualifiedExpression) expression);
return translateAsPropertySetterCall((JetQualifiedExpression) expression, context);
}
if (expression instanceof JetSimpleNameExpression) {
return resolveAsPropertyGet((JetSimpleNameExpression) expression);
return translateAsPropertySetterCall((JetSimpleNameExpression) expression, context);
}
throw new AssertionError(MESSAGE);
}
@NotNull
private JsInvocation resolveAsPropertyGet(@NotNull JetQualifiedExpression expression) {
JsName getterName = getNotNullGetterName(getNotNullSelector(expression));
return translateReceiverAndReturnAccessorInvocation(expression, getterName);
public static JsInvocation translateAsPropertyGetterCall(@NotNull JetQualifiedExpression expression,
@NotNull TranslationContext context) {
return (new PropertyAccessTranslator(expression, context))
.translateAsPropertyGetterCall();
}
@NotNull
private JsInvocation resolveAsPropertyGet(@NotNull JetSimpleNameExpression expression) {
JsName getterName = getNotNullGetterName(expression);
JsNameRef getterReference = getAccessorReference(getterName);
return AstUtil.newInvocation(getterReference);
public static JsInvocation translateAsPropertyGetterCall(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
return (new PropertyAccessTranslator(expression, context))
.translateAsPropertyGetterCall();
}
@NotNull
private JsNameRef getAccessorReference(@NotNull JsName getterName) {
return TranslationUtils.getThisQualifiedNameReference(context(), getterName);
}
@NotNull
public JsInvocation translateAsPropertySetterCall(@NotNull JetExpression expression) {
if (expression instanceof JetDotQualifiedExpression) {
return resolveAsPropertySet((JetDotQualifiedExpression) expression);
public static JsInvocation translateAsPropertyGetterCall(@NotNull JetExpression expression,
@NotNull TranslationContext context) {
if (expression instanceof JetQualifiedExpression) {
return translateAsPropertyGetterCall((JetQualifiedExpression) expression, context);
}
if (expression instanceof JetSimpleNameExpression) {
return resolveAsPropertySet((JetSimpleNameExpression) expression);
return translateAsPropertyGetterCall((JetSimpleNameExpression) expression, context);
}
throw new AssertionError(MESSAGE);
}
@NotNull
private JsInvocation resolveAsPropertySet(@NotNull JetDotQualifiedExpression dotQualifiedExpression) {
JsName setterName = getNotNullSetterName(getNotNullSelector(dotQualifiedExpression));
return translateReceiverAndReturnAccessorInvocation(dotQualifiedExpression, setterName);
public static boolean canBePropertyGetterCall(@NotNull JetQualifiedExpression expression,
@NotNull TranslationContext context) {
JetSimpleNameExpression selector = PsiUtils.getSelectorAsSimpleName(expression);
if (selector == null) {
return false;
}
return canBePropertyGetterCall(selector, context);
}
@NotNull
private JsInvocation resolveAsPropertySet(@NotNull JetSimpleNameExpression expression) {
JsName setterName = getNotNullSetterName(expression);
JsNameRef setterReference = getAccessorReference(setterName);
return AstUtil.newInvocation(setterReference);
public static boolean canBePropertyGetterCall(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
return (BindingUtils.getPropertyDescriptorForSimpleName(context.bindingContext(), expression) != null);
}
@NotNull
private JsInvocation translateReceiverAndReturnAccessorInvocation
(@NotNull JetQualifiedExpression qualifiedExpression, @NotNull JsName accessorName) {
JsExpression qualifier = Translation.translateAsExpression
(qualifiedExpression.getReceiverExpression(), context());
JsNameRef result = accessorName.makeRef();
AstUtil.setQualifier(result, qualifier);
return AstUtil.newInvocation(result);
public static boolean canBePropertyGetterCall(@NotNull JetExpression expression,
@NotNull TranslationContext context) {
if (expression instanceof JetQualifiedExpression) {
return canBePropertyGetterCall((JetQualifiedExpression) expression, context);
}
if (expression instanceof JetSimpleNameExpression) {
return canBePropertyGetterCall((JetSimpleNameExpression) expression, context);
}
return false;
}
public static boolean canBePropertyAccess(@NotNull JetExpression expression,
@NotNull TranslationContext context) {
return canBePropertyGetterCall(expression, context);
}
@NotNull
private final JetSimpleNameExpression expression;
@Nullable
private JetSimpleNameExpression getNullableSelector(@NotNull JetQualifiedExpression expression) {
JetExpression selectorExpression = expression.getSelectorExpression();
assert selectorExpression != null : "Selector should not be null.";
if (!(selectorExpression instanceof JetSimpleNameExpression)) {
return null;
private final JetExpression qualifier;
@NotNull
private final PropertyDescriptor propertyDescriptor;
private PropertyAccessTranslator(@NotNull JetSimpleNameExpression simpleName,
@NotNull TranslationContext context) {
super(context);
this.expression = simpleName;
this.qualifier = null;
this.propertyDescriptor = getNotNullPropertyDescriptor();
}
private PropertyAccessTranslator(@NotNull JetQualifiedExpression qualifiedExpression,
@NotNull TranslationContext context) {
super(context);
this.expression = getNotNullSelector(qualifiedExpression);
this.qualifier = qualifiedExpression.getReceiverExpression();
this.propertyDescriptor = getNotNullPropertyDescriptor();
}
@NotNull
public JsInvocation translateAsPropertyGetterCall() {
JsName getterName = getNotNullGetterName();
return qualifiedAccessorInvocation(getterName);
}
@NotNull
private JsInvocation qualifiedAccessorInvocation(@NotNull JsName accessorName) {
JsNameRef accessorReference = accessorName.makeRef();
AstUtil.setQualifier(accessorReference, translateQualifier());
return AstUtil.newInvocation(accessorReference);
}
@NotNull
private JsExpression defaultQualifier() {
if (BindingUtils.isOwnedByClass(propertyDescriptor)) {
return TranslationUtils.getThisQualifier(context());
}
return (JetSimpleNameExpression) selectorExpression;
assert BindingUtils.isOwnedByNamespace(propertyDescriptor)
: "Property can be a member of class or a namespace.";
//NOTE: qualifier for descriptor and it's accessor should be equal
return context().declarations().getQualifier(propertyDescriptor);
}
@NotNull
public JsInvocation translateAsPropertySetterCall() {
JsName setterName = getNotNullSetterName();
return qualifiedAccessorInvocation(setterName);
}
@NotNull
private JsExpression translateQualifier() {
if (qualifier != null) {
return Translation.translateAsExpression(qualifier, context());
}
return defaultQualifier();
}
@NotNull
private JetSimpleNameExpression getNotNullSelector(@NotNull JetQualifiedExpression expression) {
JetSimpleNameExpression selectorExpression = getNullableSelector(expression);
private static JetSimpleNameExpression getNotNullSelector(@NotNull JetQualifiedExpression qualifiedExpression) {
JetSimpleNameExpression selectorExpression = PsiUtils.getSelectorAsSimpleName(qualifiedExpression);
assert selectorExpression != null : MESSAGE;
return selectorExpression;
}
@NotNull
private JsName getNotNullGetterName(@NotNull JetSimpleNameExpression selectorExpression) {
JsName getterName = getNullableGetterName(selectorExpression);
private JsName getNotNullGetterName() {
JsName getterName = getNullableGetterName();
assert getterName != null : MESSAGE;
return getterName;
}
@Nullable
private JsName getNullableGetterName(@NotNull JetSimpleNameExpression expression) {
PropertyDescriptor property = getPropertyDescriptor(expression);
private JsName getNullableGetterName() {
PropertyGetterDescriptor getter = getGetterDescriptor();
if (getter == null) return null;
return context().getNameForDescriptor(getter);
}
@Nullable
private PropertyGetterDescriptor getGetterDescriptor() {
PropertyDescriptor property = getNullablePropertyDescriptor();
if (property == null) {
return null;
}
@@ -171,19 +207,19 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
if (getter == null) {
return null;
}
return context().getNameForDescriptor(getter);
return getter;
}
@NotNull
private JsName getNotNullSetterName(@NotNull JetSimpleNameExpression selectorExpression) {
JsName setterName = getNullableSetterName(selectorExpression);
private JsName getNotNullSetterName() {
JsName setterName = getNullableSetterName();
assert setterName != null : MESSAGE;
return setterName;
}
@Nullable
private JsName getNullableSetterName(@NotNull JetSimpleNameExpression expression) {
PropertyDescriptor property = getPropertyDescriptor(expression);
private JsName getNullableSetterName() {
PropertyDescriptor property = getNullablePropertyDescriptor();
if (property == null) {
return null;
}
@@ -195,7 +231,14 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
}
@Nullable
private PropertyDescriptor getPropertyDescriptor(@NotNull JetSimpleNameExpression expression) {
private PropertyDescriptor getNullablePropertyDescriptor() {
return BindingUtils.getPropertyDescriptorForSimpleName(context().bindingContext(), expression);
}
@NotNull
private PropertyDescriptor getNotNullPropertyDescriptor() {
PropertyDescriptor propertyDescriptor = getNullablePropertyDescriptor();
assert propertyDescriptor != null;
return propertyDescriptor;
}
}
@@ -8,7 +8,6 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslationContext;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
@@ -38,9 +37,9 @@ public class ReferenceTranslator extends AbstractTranslator {
@NotNull
public JsExpression translateSimpleName() {
tryResolveAsPropertyAccess();
tryResolveAsThisQualifiedExpression();
tryResolveAsAliasReference();
tryResolveAsPropertyAccess();
tryResolveAsGlobalReference();
tryResolveAsLocalReference();
if (result != null) {
@@ -62,7 +61,12 @@ public class ReferenceTranslator extends AbstractTranslator {
if (!requiresThisQualifier(simpleName, referencedName)) return;
result = TranslationUtils.getThisQualifiedNameReference(context(), referencedName);
if (BindingUtils.isOwnedByClass(referencedDescriptor)) {
result = TranslationUtils.getThisQualifiedNameReference(context(), referencedName);
}
if (BindingUtils.isOwnedByNamespace(referencedDescriptor)) {
result = TranslationUtils.getQualifiedReference(context(), referencedDescriptor);
}
}
private boolean requiresThisQualifier(@NotNull JetSimpleNameExpression expression,
@@ -94,11 +98,9 @@ public class ReferenceTranslator extends AbstractTranslator {
private void tryResolveAsPropertyAccess() {
if (alreadyResolved()) return;
PropertyAccessTranslator propertyAccessTranslator = Translation.propertyAccessTranslator(context());
if (!PropertyAccessTranslator.canBePropertyGetterCall(simpleName, context())) return;
if (!propertyAccessTranslator.canBePropertyGetterCall(simpleName)) return;
result = propertyAccessTranslator.translateAsPropertyGetterCall(simpleName);
result = PropertyAccessTranslator.translateAsPropertyGetterCall(simpleName, context());
}
private void tryResolveAsGlobalReference() {
@@ -7,6 +7,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.jet.lang.types.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetType;
import java.util.ArrayList;
@@ -88,6 +89,7 @@ public final class BindingUtils {
return (JetClass) result;
}
//TODO: delete?
@Nullable
static public JetDeclaration getDeclarationForDescriptor(@NotNull BindingContext context,
@NotNull DeclarationDescriptor descriptor) {
@@ -174,9 +176,8 @@ public final class BindingUtils {
return context.get(BindingContext.REFERENCE_TARGET, reference);
}
//TODO better implementation?
static private boolean isNotAny(@NotNull DeclarationDescriptor superClassDescriptor) {
return !superClassDescriptor.getName().equals("Any");
return !superClassDescriptor.equals(JetStandardClasses.getAny());
}
//TODO move unrelated utils to other class
@@ -190,8 +191,16 @@ public final class BindingUtils {
return null;
}
static public boolean isOwnedByNamespace(@NotNull DeclarationDescriptor descriptor) {
return (descriptor.getContainingDeclaration() instanceof NamespaceDescriptor);
}
//TODO: refactor
static public boolean isOwnedByClass(@NotNull DeclarationDescriptor descriptor) {
return (descriptor.getContainingDeclaration() instanceof ClassDescriptor);
}
//TODO: refactor, check with getDescriptorForReferenceExpression
@Nullable
public static PropertyDescriptor getPropertyDescriptorForSimpleName(@NotNull BindingContext context,
@NotNull JetSimpleNameExpression expression) {
@@ -224,4 +233,5 @@ public final class BindingUtils {
assert result != null;
return result;
}
}
@@ -0,0 +1,26 @@
package org.jetbrains.k2js.translate.utils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
/**
* @author Talanov Pavel
*/
public final class PsiUtils {
private PsiUtils() {
}
@Nullable
public static JetSimpleNameExpression getSelectorAsSimpleName(@NotNull JetQualifiedExpression expression) {
JetExpression selectorExpression = expression.getSelectorExpression();
assert selectorExpression != null : "Selector should not be null.";
if (!(selectorExpression instanceof JetSimpleNameExpression)) {
return null;
}
return (JetSimpleNameExpression) selectorExpression;
}
}
@@ -152,14 +152,13 @@ public final class TranslationUtils {
public static JsNameRef getThisQualifiedNameReference(@NotNull TranslationContext context,
@NotNull JsName name) {
JsExpression qualifier = getThisQualifier(context);
JsNameRef reference = name.makeRef();
AstUtil.setQualifier(reference, qualifier);
return reference;
}
@NotNull
private static JsExpression getThisQualifier(@NotNull TranslationContext context) {
public static JsExpression getThisQualifier(@NotNull TranslationContext context) {
JsExpression qualifier;
if (context.aliaser().hasAliasForThis()) {
qualifier = context.aliaser().getAliasForThis();