Corrected class declaration logic.

This commit is contained in:
Pavel Talanov
2011-11-25 21:00:18 +04:00
parent 793ec886c7
commit e3d62b7903
9 changed files with 490 additions and 235 deletions
+396 -195
View File
@@ -8,11 +8,15 @@
</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/propertyAccess/cases/classUsesNamespaceProperties.kt" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\test\org\jetbrains\k2js\test\PropertyAccessorTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.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/declaration/NamespaceTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt" afterPath="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.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/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/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/utils/PartiallyOrderedSet.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/utils/PartiallyOrderedSet.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -43,6 +47,99 @@
<disable_hints />
</component>
<component name="DebuggerManager">
<line_breakpoints>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" line="60" class="org.jetbrains.k2js.translate.reference.ReferenceTranslator" package="org.jetbrains.k2js.translate.reference">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java" line="54" class="org.jetbrains.k2js.translate.reference.ReferenceTranslator" package="org.jetbrains.k2js.translate.reference">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" line="123" class="org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator" package="org.jetbrains.k2js.translate.declaration">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" line="91" class="org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator" package="org.jetbrains.k2js.translate.declaration">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" line="88" class="org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator" package="org.jetbrains.k2js.translate.declaration">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" line="115" class="org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator" package="org.jetbrains.k2js.translate.declaration">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" line="67" class="org.jetbrains.k2js.translate.general.TranslationContext" package="org.jetbrains.k2js.translate.general">
<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>
<option name="NOTIFY_CAUGHT" value="true" />
@@ -82,99 +179,103 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.5281414">
<splitter split-orientation="horizontal" split-proportion="0.61649215">
<split-first>
<leaf>
<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="180" column="33" selection-start="8442" selection-end="8442" 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="80" column="0" selection-start="1981" selection-end="1981" vertical-scroll-proportion="0.0">
<folding />
</state>
</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="11" column="20" selection-start="76" selection-end="76" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="namespaceCustomAccessors.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="1" selection-start="108" selection-end="108" 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="69" column="16" selection-start="1607" selection-end="1607" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ReferenceProvider.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java">
<provider selected="true" editor-type-id="text-editor">
<state line="42" column="0" selection-start="1839" selection-end="1839" vertical-scroll-proportion="0.0">
<state line="46" column="49" selection-start="1980" selection-end="1980" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="NamespaceTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java">
<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="35" column="82" selection-start="1382" selection-end="1382" vertical-scroll-proportion="0.63244045">
<state line="54" column="0" selection-start="2163" selection-end="2163" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="classUsesNamespaceProperties.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/out/classUsesNamespaceProperties.js">
<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="4" column="15" selection-start="98" selection-end="98" vertical-scroll-proportion="0.0">
<state line="67" column="0" selection-start="2420" selection-end="2420" vertical-scroll-proportion="-8.269231">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassDeclarationTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="91" column="7" selection-start="3575" selection-end="3575" vertical-scroll-proportion="0.33427364">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="compareTo.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/compareTo.kt">
<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="11" column="0" selection-start="242" selection-end="242" vertical-scroll-proportion="0.0">
<state line="33" column="16" selection-start="789" selection-end="789" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<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">
<file leaf-file-name="AbstractTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/AbstractTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="58" column="60" selection-start="1296" selection-end="1296" vertical-scroll-proportion="0.0">
<state line="24" column="0" selection-start="544" selection-end="544" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="initializersOfBasicClassExecute.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/out/initializersOfBasicClassExecute.js">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="26" selection-start="217" selection-end="217" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetClass.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java">
<provider selected="true" editor-type-id="text-editor">
<state line="46" column="28" selection-start="1329" selection-end="1329" 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="47" column="0" selection-start="2189" selection-end="2189" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="104" column="36" selection-start="4491" selection-end="4491" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#5667#5690#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
@@ -211,7 +312,7 @@
<file leaf-file-name="PartiallyOrderedSet.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/utils/PartiallyOrderedSet.java">
<provider selected="true" editor-type-id="text-editor">
<state line="38" column="51" selection-start="1732" selection-end="1732" vertical-scroll-proportion="0.3328467">
<state line="2" column="48" selection-start="83" selection-end="83" vertical-scroll-proportion="0.05448718">
<folding />
</state>
</provider>
@@ -299,15 +400,6 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/utils/DiGraphNode.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslatorVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/PropertyTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.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/testFiles/operatorOverloading/cases/compareTo.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java" />
@@ -315,6 +407,15 @@
<option value="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/classUsesNamespaceProperties.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/utils/PartiallyOrderedSet.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java" />
<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/reference/ReferenceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java" />
</list>
</option>
</component>
@@ -494,6 +595,86 @@
<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="inheritance" />
<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="inheritance" />
<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="class" />
<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="class" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -910,46 +1091,7 @@
<recent name="C:\Dev\Projects\jet-contrib\k2js\translator\testFiles\inheritance" />
</key>
</component>
<component name="RunManager" selected="JUnit.PropertyAccessTest.classUsesNamespaceProperties">
<configuration default="false" name="postfixOnProperty.js" type="JavascriptDebugSession" factoryName="Local" temporary="true">
<JSDebuggerConfigurationSettings>
<option name="engineId" value="embedded" />
<option name="fileUrl" value="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/postfixOnProperty.js" />
</JSDebuggerConfigurationSettings>
<method />
</configuration>
<configuration default="false" name="PropertyAccessTest.customGetter" 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.PropertyAccessTest" />
<option name="METHOD_NAME" value="customGetter" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<component name="RunManager" selected="JUnit.All in translator">
<configuration default="false" name="PropertyAccessTest.customSetter" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea">
<pattern>
@@ -1048,6 +1190,61 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="All in translator" type="JUnit" factoryName="JUnit" temporary="true">
<extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="package" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="ClassInheritanceTest.initializersOfBasicClassExecute" 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.ClassInheritanceTest" />
<option name="METHOD_NAME" value="initializersOfBasicClassExecute" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
@@ -1144,11 +1341,11 @@
</method>
</configuration>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="JavaScript Debug.postfixOnProperty.js" />
<item index="1" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.customGetter" />
<item index="2" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.customSetter" />
<item index="3" class="java.lang.String" itemvalue="JUnit.ClassInheritanceTest.valuePassedToAncestorConstructor" />
<item index="4" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.classUsesNamespaceProperties" />
<item index="0" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.customSetter" />
<item index="1" class="java.lang.String" itemvalue="JUnit.ClassInheritanceTest.valuePassedToAncestorConstructor" />
<item index="2" class="java.lang.String" itemvalue="JUnit.PropertyAccessTest.classUsesNamespaceProperties" />
<item index="3" class="java.lang.String" itemvalue="JUnit.All in translator" />
<item index="4" class="java.lang.String" itemvalue="JUnit.ClassInheritanceTest.initializersOfBasicClassExecute" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -1266,7 +1463,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="compareTo support." />
<option name="LAST_COMMIT_MESSAGE" value="Fixed a bug where class could not access namespace properties." />
<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" />
@@ -1279,7 +1476,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="Supported overloading plus operator." />
<MESSAGE value="Rewrote reference translation a bit. Added support for when call expression." />
<MESSAGE value="." />
<MESSAGE value="Work on namespaces in progress." />
@@ -1304,6 +1500,7 @@
<MESSAGE value="Got rid of redundant ExpressionTranslator class." />
<MESSAGE value="Refactoring" />
<MESSAGE value="compareTo support." />
<MESSAGE value="Fixed a bug where class could not access namespace properties." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1313,116 +1510,120 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="35" column="82" selection-start="1382" selection-end="1382" vertical-scroll-proportion="0.0">
<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="42" column="16" selection-start="958" selection-end="958" 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="180" column="33" selection-start="8442" selection-end="8442" vertical-scroll-proportion="0.0">
<state line="97" column="30" selection-start="4527" selection-end="4527" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="3" selection-start="1999" selection-end="2170" vertical-scroll-proportion="0.0">
<state line="61" column="58" selection-start="2771" selection-end="2771" 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/ClassInheritanceTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="16" selection-start="321" selection-end="321" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/generate/CodeGenerator.java">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="19" selection-start="401" selection-end="401" vertical-scroll-proportion="0.0">
<state line="115" column="41" selection-start="7458" selection-end="7469" vertical-scroll-proportion="-61.346153">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/compareTo.kt">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="0" selection-start="242" selection-end="242" vertical-scroll-proportion="0.0">
<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="80" column="0" selection-start="1981" selection-end="1981" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/operation/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor">
<state line="18" column="19" selection-start="619" selection-end="619" 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="11" column="20" selection-start="76" selection-end="76" 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="31" column="0" selection-start="1197" selection-end="1197" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="1" selection-start="108" selection-end="108" 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="27" column="19" selection-start="1307" selection-end="1307" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/out/classUsesNamespaceProperties.js">
<provider selected="true" editor-type-id="text-editor">
<state line="4" column="15" selection-start="98" selection-end="98" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="69" column="16" selection-start="1607" selection-end="1607" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="3" selection-start="786" selection-end="786" vertical-scroll-proportion="0.0">
<state line="46" column="28" selection-start="1329" selection-end="1329" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java">
<provider selected="true" editor-type-id="text-editor">
<state line="42" column="0" selection-start="1839" selection-end="1839" vertical-scroll-proportion="0.0">
<state line="46" column="49" selection-start="1980" selection-end="1980" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/AbstractTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="24" column="0" selection-start="544" selection-end="544" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/general/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="0" selection-start="2189" selection-end="2189" 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="54" column="0" selection-start="2163" selection-end="2163" vertical-scroll-proportion="0.0">
<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="67" column="0" selection-start="2420" selection-end="2420" vertical-scroll-proportion="-8.269231">
<folding>
<element signature="imports" expanded="true" />
</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="33" column="16" selection-start="789" selection-end="789" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/out/initializersOfBasicClassExecute.js">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="26" selection-start="217" selection-end="217" 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="25" column="3" selection-start="1076" selection-end="1076" vertical-scroll-proportion="0.0">
<state line="104" column="36" selection-start="4491" selection-end="4491" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#5492#5515#0" expanded="true" />
<element signature="e#5667#5690#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/declaration/ClassDeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="35" column="82" selection-start="1382" selection-end="1382" vertical-scroll-proportion="0.63244045">
<state line="91" column="7" selection-start="3575" selection-end="3575" vertical-scroll-proportion="0.33427364">
<folding />
</state>
</provider>
@@ -89,9 +89,16 @@ public final class ClassDeclarationTranslator extends AbstractTranslator {
for (JetClass jetClass : getClassDeclarations()) {
classDeclarations.add(generateDeclaration(jetClass));
}
removeAliases();
return classDeclarations;
}
private void removeAliases() {
for (JetClass jetClass : getClassDeclarations()) {
context().aliases().remove(jetClass);
}
}
@NotNull
private List<JetClass> getClassDeclarations() {
List<JetClass> classes = new ArrayList<JetClass>();
@@ -105,11 +112,17 @@ public final class ClassDeclarationTranslator extends AbstractTranslator {
@NotNull
private JsStatement generateDeclaration(@NotNull JetClass declaration) {
JsName globalClassName = context().getNameForElement(declaration);
JsName localClassName = dummyFunctionScope.declareName(globalClassName.getIdent());
localToGlobalClassName.put(localClassName, globalClassName);
JsName localClassName = generateLocalAlias(declaration);
JsInvocation classDeclarationExpression =
Translation.translateClassDeclaration(declaration, context());
return AstUtil.newVar(localClassName, classDeclarationExpression);
}
private JsName generateLocalAlias(@NotNull JetClass declaration) {
JsName globalClassName = context().getNameForElement(declaration);
JsName localAlias = dummyFunctionScope.declareName(globalClassName.getIdent());
localToGlobalClassName.put(localAlias, globalClassName);
context().aliases().put(declaration, localAlias);
return localAlias;
}
}
@@ -100,9 +100,10 @@ public final class ClassTranslator extends AbstractTranslator {
@NotNull
private JsNameRef getClassReference(@NotNull ClassDescriptor superClassDescriptor) {
//TODO should get a full class name here
return context().getNamespaceQualifiedReference
(context().getNameForDescriptor(superClassDescriptor));
//TODO we actually know that in current implementation superclass must have an alias but
// if future it might change
return context().aliases().get
(BindingUtils.getClassForDescriptor(context().bindingContext(), superClassDescriptor)).makeRef();
}
@Nullable
@@ -56,11 +56,11 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public JsNode visitBlockExpression(@NotNull JetBlockExpression jetBlock, @NotNull TranslationContext context) {
List<JetElement> statements = jetBlock.getStatements();
JsBlock jsBlock = new JsBlock();
TranslationContext newContext = context.newBlock(jsBlock);
;
for (JetElement statement : statements) {
assert statement instanceof JetExpression : "Elements in JetBlockExpression " +
"should be of type JetExpression";
JsNode jsNode = statement.accept(this, newContext);
JsNode jsNode = statement.accept(this, context);
jsBlock.addStatement(AstUtil.convertToStatement(jsNode));
}
return jsBlock;
@@ -93,7 +93,7 @@ public final class Translation {
public static void generateAst(@NotNull JsProgram result, @NotNull BindingContext bindingContext,
@NotNull Declarations declarations, @NotNull JetNamespace namespace) {
JsBlock block = result.getFragmentBlock(0);
TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations, block);
TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations);
block.addStatement(Translation.translateNamespace(namespace, context));
}
@@ -1,6 +1,9 @@
package org.jetbrains.k2js.translate.general;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.JsName;
import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.backend.js.ast.JsProgram;
import com.google.dart.compiler.backend.js.ast.JsScope;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -10,6 +13,9 @@ import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.declarations.Declarations;
import org.jetbrains.k2js.translate.utils.BindingUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @author Talanov Pavel
*/
@@ -33,10 +39,11 @@ public final class TranslationContext {
@NotNull
public static TranslationContext rootContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext,
@NotNull Declarations extractor, @NotNull JsBlock block) {
@NotNull Declarations extractor) {
JsScope rootScope = program.getRootScope();
Scopes scopes = new Scopes(rootScope, rootScope, rootScope);
return new TranslationContext(null, program, bindingContext, scopes, extractor, block);
return new TranslationContext(null, program, bindingContext,
scopes, extractor, new HashMap<JetDeclaration, JsName>());
}
@NotNull
@@ -50,18 +57,18 @@ public final class TranslationContext {
@NotNull
private final Declarations declarations;
@NotNull
private final JsBlock block;
private final Map<JetDeclaration, JsName> aliases;
private TranslationContext(@Nullable JsName namespaceName, @NotNull JsProgram program,
@NotNull BindingContext bindingContext, @NotNull Scopes scopes,
@NotNull Declarations declarations, @NotNull JsBlock block) {
@NotNull Declarations declarations, @NotNull Map<JetDeclaration, JsName> aliases) {
this.program = program;
this.bindingContext = bindingContext;
this.namespaceName = namespaceName;
this.scopes = scopes;
this.declarations = declarations;
this.block = block;
this.aliases = aliases;
}
@NotNull
@@ -74,14 +81,7 @@ public final class TranslationContext {
JsScope namespaceScope = declarations.getScope(descriptor);
JsName namespaceName = scopes.enclosingScope.findExistingName(descriptor.getName());
Scopes newScopes = new Scopes(namespaceScope, namespaceScope, namespaceScope);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, block);
}
@NotNull
public TranslationContext newBlock(@NotNull JsBlock newBlock) {
Scopes newScopes = new Scopes(new JsScope
(scopes.enclosingScope, "Scope for a block"), scopes.classScope, scopes.namespaceScope);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, newBlock);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, aliases);
}
@NotNull
@@ -93,7 +93,7 @@ public final class TranslationContext {
public TranslationContext newClass(@NotNull ClassDescriptor descriptor) {
JsScope classScope = declarations.getScope(descriptor);
Scopes newScopes = new Scopes(classScope, classScope, scopes.namespaceScope);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, block);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, aliases);
}
@NotNull
@@ -115,14 +115,20 @@ public final class TranslationContext {
public TranslationContext newFunctionDeclaration(@NotNull FunctionDescriptor descriptor) {
JsScope functionScope = declarations.getScope(descriptor);
Scopes newScopes = new Scopes(functionScope, scopes.classScope, scopes.namespaceScope);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, block);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, aliases);
}
// @NotNull TranslationContext newAliases(Map<JetDeclaration, JsName> newAliases) {
// Map<JetDeclaration, JsName> aliases = new HashMap<JetDeclaration, JsName>(this.aliases);
// aliases.putAll(newAliases);
// return new TranslationContext(namespaceName, program, bindingContext, scopes, declarations, aliases);
// }
// Note: Should be used if and only if scope has no corresponding descriptor
@NotNull
public TranslationContext newEnclosingScope(@NotNull JsScope enclosingScope) {
Scopes newScopes = new Scopes(enclosingScope, scopes.classScope, scopes.namespaceScope);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, block);
return new TranslationContext(namespaceName, program, bindingContext, newScopes, declarations, aliases);
}
@@ -159,6 +165,11 @@ public final class TranslationContext {
return scopes.classScope;
}
@NotNull
public Map<JetDeclaration, JsName> aliases() {
return aliases;
}
@NotNull
public JsName declareLocalName(@NotNull String name) {
return scopes.enclosingScope.declareFreshName(name);
@@ -3,9 +3,11 @@ package org.jetbrains.k2js.translate.reference;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsInvocation;
import com.google.dart.compiler.backend.js.ast.JsName;
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.psi.JetDeclaration;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.general.Translation;
@@ -16,6 +18,7 @@ import org.jetbrains.k2js.translate.utils.TranslationUtils;
/**
* @author Talanov Pavel
*/
//TODO: implement state
public class ReferenceTranslator extends AbstractTranslator {
@NotNull
@@ -27,27 +30,42 @@ public class ReferenceTranslator extends AbstractTranslator {
super(context);
}
// TODO: refactor put the checks inside resolvers
@NotNull
public JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression) {
JsExpression result = resolveAsPropertyAccess(expression);
if (result != null) {
return result;
}
result = resolveAsGlobalReference(expression);
if (result != null) {
return result;
}
result = resolveAsLocalReference(expression);
if (result != null) {
return result;
}
throw new AssertionError("Undefined name in this scope: " + expression.getReferencedName());
JsExpression result = resolveAsAliasReference(expression);
if (result != null) return result;
result = resolveAsPropertyAccess(expression);
if (result != null) return result;
result = resolveAsGlobalReference(expression);
if (result != null) return result;
result = resolveAsLocalReference(expression);
if (result != null) return result;
throw new AssertionError("Undefined name in this scope: " + expression.getReferencedName());
}
@Nullable
private JsNameRef resolveAsAliasReference(@NotNull JetSimpleNameExpression expression) {
DeclarationDescriptor referencedDescriptor =
BindingUtils.getDescriptorForReferenceExpression(context().bindingContext(), expression);
if (referencedDescriptor == null) return null;
JetDeclaration declaration =
BindingUtils.getDeclarationForDescriptor(context().bindingContext(), referencedDescriptor);
if (declaration == null) return null;
JsName alias = context().aliases().get(declaration);
if (alias == null) return null;
return alias.makeRef();
}
@Nullable
private JsInvocation resolveAsPropertyAccess(@NotNull JetSimpleNameExpression expression) {
PropertyAccessTranslator propertyAccessTranslator = Translation.propertyAccessTranslator(context());
if (propertyAccessTranslator.canBePropertyGetterCall(expression)) {
return propertyAccessTranslator.translateAsPropertyGetterCall(expression);
@@ -88,6 +88,16 @@ public final class BindingUtils {
return (JetClass) result;
}
@Nullable
static public 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
static public List<ClassDescriptor> getSuperclassDescriptors(@NotNull BindingContext context,
@NotNull JetClass classDeclaration) {
@@ -1,5 +1,6 @@
package org.jetbrains.k2js.utils;
//TODO: find another implementation or steal it!
/*
* Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.