Added Translation class for better instance creation control over the code.

This commit is contained in:
Pavel Talanov
2011-11-12 22:56:47 +04:00
parent 997ddce4b5
commit 158fccbac5
17 changed files with 314 additions and 173 deletions
+180 -128
View File
@@ -6,13 +6,23 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment=""> <list default="true" id="f02ef53d-47a4-4f5e-a1aa-3df68aae9b20" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/class/cases/incrementProperty.kt" /> <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/function/cases/functionWithTwoParametersCall.kt" />
<change type="MOVED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\OperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" afterPath="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
</list> </list>
<ignored path="k2js.iws" /> <ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
@@ -37,7 +47,7 @@
</component> </component>
<component name="DebuggerManager"> <component name="DebuggerManager">
<line_breakpoints> <line_breakpoints>
<breakpoint url="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" line="28" class="com.google.dart.compiler.util.AstUtil" package="com.google.dart.compiler.util"> <breakpoint url="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" line="29" class="com.google.dart.compiler.util.AstUtil" package="com.google.dart.compiler.util">
<option name="ENABLED" value="true" /> <option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" /> <option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" /> <option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -93,15 +103,6 @@
<splitter split-orientation="horizontal" split-proportion="0.37207702"> <splitter split-orientation="horizontal" split-proportion="0.37207702">
<split-first> <split-first>
<leaf> <leaf>
<file leaf-file-name="PropertyAccessorTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="16" selection-start="462" selection-end="462" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="twoClassesWithProperties.kt" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="twoClassesWithProperties.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/twoClassesWithProperties.kt"> <entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/twoClassesWithProperties.kt">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
@@ -134,7 +135,7 @@
<file leaf-file-name="incrementProperty.js" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="incrementProperty.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/incrementProperty.js"> <entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/incrementProperty.js">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="10" column="45" selection-start="224" selection-end="224" vertical-scroll-proportion="0.0"> <state line="10" column="45" selection-start="233" selection-end="233" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
@@ -149,10 +150,10 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="AstUtil.java" pinned="false" current="false" current-in-tab="true"> <file leaf-file-name="AstUtil.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java"> <entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="261" column="22" selection-start="9087" selection-end="9087" vertical-scroll-proportion="0.74067795"> <state line="262" column="22" selection-start="9090" selection-end="9090" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
@@ -176,10 +177,10 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="FunctionTest.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="FunctionTest.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java"> <entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="29" column="16" selection-start="685" selection-end="685" vertical-scroll-proportion="0.0"> <state line="80" column="58" selection-start="1974" selection-end="1974" vertical-scroll-proportion="1.1868852">
<folding /> <folding />
</state> </state>
</provider> </provider>
@@ -189,92 +190,96 @@
</split-first> </split-first>
<split-second> <split-second>
<leaf> <leaf>
<file leaf-file-name="K2JSTranslator.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="GenerationState.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="95" column="61" selection-start="3724" selection-end="3724" vertical-scroll-proportion="0.0"> <state line="34" column="78" selection-start="1150" selection-end="1150" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Namer.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Namer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="103" column="49" selection-start="4452" selection-end="4452" vertical-scroll-proportion="-18.576923"> <state line="12" column="19" selection-start="262" selection-end="262" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="FunctionTranslator.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="NamespaceTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="42" column="8" selection-start="1801" selection-end="1801" vertical-scroll-proportion="0.0"> <state line="39" column="69" selection-start="1420" selection-end="1420" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="JetSimpleNameExpression.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="OperatorTable.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetSimpleNameExpression.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="63" column="0" selection-start="2183" selection-end="2183" vertical-scroll-proportion="0.0"> <state line="13" column="32" selection-start="361" selection-end="361" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="PropertyAccessTranslator.java" pinned="false" current="true" current-in-tab="true"> <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/PropertyAccessTranslator.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="96" column="74" selection-start="4133" selection-end="4133" vertical-scroll-proportion="0.5730337"> <state line="56" column="103" selection-start="2377" selection-end="2377" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="ReflectiveCallable.class" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="TranslationContext.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/internal/runners/model/ReflectiveCallable.class"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="11" column="40" selection-start="397" selection-end="397" vertical-scroll-proportion="-6.8"> <state line="17" column="19" selection-start="647" selection-end="647" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="ParentRunner.class" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Translation.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/runners/ParentRunner.class"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="43" column="25" selection-start="2461" selection-end="2461" vertical-scroll-proportion="-8.52"> <state line="35" column="20" selection-start="1156" selection-end="1156" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslatorVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="59" selection-start="1667" selection-end="1667" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="JUnitCore.class" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="K2JSTranslator.java" pinned="false" current="true" current-in-tab="true">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/runner/JUnitCore.class"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="30" column="35" selection-start="1439" selection-end="1439" vertical-scroll-proportion="-18.52"> <state line="39" column="13" selection-start="1468" selection-end="1468" vertical-scroll-proportion="0.21587302">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="BlockJUnit4ClassRunner.class" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="InitializerVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/runners/BlockJUnit4ClassRunner.class"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java">
<provider selected="true" editor-type-id="text-editor"> <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="75" column="91" selection-start="2938" selection-end="2938" vertical-scroll-proportion="0.0">
<folding /> <folding>
</state> <element signature="imports" expanded="true" />
</provider> </folding>
</entry>
</file>
<file leaf-file-name="ClassInheritanceTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassInheritanceTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="16" selection-start="323" selection-end="323" vertical-scroll-proportion="0.0">
<folding />
</state> </state>
</provider> </provider>
</entry> </entry>
@@ -300,22 +305,22 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="changedFiles"> <option name="changedFiles">
<list> <list>
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" /> <option value="$PROJECT_DIR$/translator/testFiles/function/cases/functionWithTwoParametersCall.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BindingUtils.java" /> <option value="$PROJECT_DIR$/translator/testFiles/inheritance/cases/creationSequence.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java" />
<option value="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java" />
<option value="$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/twoClassesWithProperties.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/class/cases/Slot.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java" />
<option value="$PROJECT_DIR$/translator/testFiles/class/cases/incrementProperty.kt" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" /> <option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" />
</list> </list>
</option> </option>
</component> </component>
@@ -494,6 +499,50 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </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="function" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="out" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="function" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="k2js" /> <option name="myItemId" value="k2js" />
@@ -909,7 +958,7 @@
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1176" extended-state="6" /> <frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
<editor active="true" /> <editor active="false" />
<layout> <layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32907662" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32907662" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
@@ -925,7 +974,7 @@
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2224599" sideWeight="0.66283524" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2224599" sideWeight="0.66283524" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" /> <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33716476" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.33716476" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
@@ -963,7 +1012,7 @@
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" /> <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" /> <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" /> <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Added syntactic checks to main." /> <option name="LAST_COMMIT_MESSAGE" value="Added support for unqualified property reference inside method body." />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" /> <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" /> <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" /> <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
@@ -990,6 +1039,7 @@
<MESSAGE value="Added default getter/setter support and initializer support." /> <MESSAGE value="Added default getter/setter support and initializer support." />
<MESSAGE value="Added class inheritance support and reorganised test classes.&#10;Minor impovements include:&#10;1. Support for functions with no body&#10;2. Not equals operator&#10;3. Refactorings." /> <MESSAGE value="Added class inheritance support and reorganised test classes.&#10;Minor impovements include:&#10;1. Support for functions with no body&#10;2. Not equals operator&#10;3. Refactorings." />
<MESSAGE value="Added syntactic checks to main." /> <MESSAGE value="Added syntactic checks to main." />
<MESSAGE value="Added support for unqualified property reference inside method body." />
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager /> <breakpoint-manager />
@@ -999,116 +1049,118 @@
<option name="FILTER_TARGETS" value="false" /> <option name="FILTER_TARGETS" value="false" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/runners/ParentRunner.class"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="43" column="25" selection-start="2461" selection-end="2461" vertical-scroll-proportion="-8.52"> <state line="30" column="52" selection-start="1026" selection-end="1026" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/runners/BlockJUnit4ClassRunner.class">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$PROJECT_DIR$/translator/lib/junit-4.10.jar!/org/junit/internal/runners/model/ReflectiveCallable.class">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="40" selection-start="397" selection-end="397" vertical-scroll-proportion="-6.8">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="2" selection-start="368" selection-end="368" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="244" selection-end="244" vertical-scroll-proportion="0.0"> <state line="11" column="4" selection-start="300" selection-end="300" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="42" column="8" selection-start="1801" selection-end="1801" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsIf.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="335" selection-end="335" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationVisitor.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="20" column="108" selection-start="774" selection-end="774" vertical-scroll-proportion="0.0"> <state line="15" column="24" selection-start="562" selection-end="562" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="9" column="19" selection-start="238" selection-end="238" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="103" column="49" selection-start="4452" selection-end="4452" vertical-scroll-proportion="-18.576923"> <state line="318" column="94" selection-start="14400" selection-end="14400" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/propertyAccess/cases/namespaceCustomAccessors.kt"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="3" column="41" selection-start="34" selection-end="34" vertical-scroll-proportion="0.0"> <state line="65" column="0" selection-start="2768" selection-end="2768" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/classInstantiation.js"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java">
<provider selected="true" editor-type-id="text-editor"> <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="34" column="78" selection-start="1150" selection-end="1150" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/incrementProperty.js"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Namer.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="10" column="45" selection-start="224" selection-end="224" vertical-scroll-proportion="0.0"> <state line="12" column="19" selection-start="262" selection-end="262" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/cases/incrementProperty.kt"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="0" column="13" selection-start="13" selection-end="13" vertical-scroll-proportion="0.0"> <state line="39" column="69" selection-start="1420" selection-end="1420" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperatorTable.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="43" column="16" selection-start="1085" selection-end="1085" vertical-scroll-proportion="-15.64"> <state line="13" column="32" selection-start="361" selection-end="361" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java">
<provider selected="true" editor-type-id="text-editor">
<state line="261" column="22" selection-start="9087" selection-end="9087" vertical-scroll-proportion="0.74067795">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java"> <entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="96" column="74" selection-start="4133" selection-end="4133" vertical-scroll-proportion="0.5730337"> <state line="56" column="103" selection-start="2377" selection-end="2377" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="19" selection-start="647" selection-end="647" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="35" column="20" selection-start="1156" selection-end="1156" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="75" column="91" selection-start="2938" selection-end="2938" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="59" selection-start="1667" selection-end="1667" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/K2JSTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="39" column="13" selection-start="1468" selection-end="1468" vertical-scroll-proportion="0.21587302">
<folding /> <folding />
</state> </state>
</provider> </provider>
@@ -31,7 +31,7 @@ public final class ClassBodyVisitor extends TranslatorVisitor<List<JsPropertyIni
// method declaration // method declaration
public List<JsPropertyInitializer> visitNamedFunction(@NotNull JetNamedFunction expression, @NotNull TranslationContext context) { public List<JsPropertyInitializer> visitNamedFunction(@NotNull JetNamedFunction expression, @NotNull TranslationContext context) {
List<JsPropertyInitializer> properties = new ArrayList<JsPropertyInitializer>(); List<JsPropertyInitializer> properties = new ArrayList<JsPropertyInitializer>();
properties.add((new FunctionTranslator(context)).translateAsMethod(expression)); properties.add(Translation.functionTranslator(context).translateAsMethod(expression));
return properties; return properties;
} }
@@ -138,11 +138,10 @@ public final class ClassBodyVisitor extends TranslatorVisitor<List<JsPropertyIni
private JsFunction translateAccessorBody(@NotNull JetPropertyAccessor expression, private JsFunction translateAccessorBody(@NotNull JetPropertyAccessor expression,
@NotNull TranslationContext context) { @NotNull TranslationContext context) {
JsFunction methodBody = JsFunction.getAnonymousFunctionWithScope(context.getScopeForElement(expression)); JsFunction methodBody = JsFunction.getAnonymousFunctionWithScope(context.getScopeForElement(expression));
ExpressionTranslator expressionTranslator =
new ExpressionTranslator(context.newPropertyAccess(expression));
JetExpression bodyExpression = expression.getBodyExpression(); JetExpression bodyExpression = expression.getBodyExpression();
assert bodyExpression != null : "Custom accessor should have a body."; assert bodyExpression != null : "Custom accessor should have a body.";
JsBlock methodBodyBlock = AstUtil.convertToBlock(expressionTranslator.translate(bodyExpression)); JsBlock methodBodyBlock = AstUtil.convertToBlock(
Translation.translateExpression(bodyExpression, context.newPropertyAccess(expression)));
methodBody.setBody(methodBodyBlock); methodBody.setBody(methodBodyBlock);
return methodBody; return methodBody;
} }
@@ -19,7 +19,12 @@ public final class ClassTranslator extends AbstractTranslator {
@NotNull @NotNull
private final ClassBodyVisitor classBodyVisitor = new ClassBodyVisitor(); private final ClassBodyVisitor classBodyVisitor = new ClassBodyVisitor();
public ClassTranslator(TranslationContext context) { @NotNull
public static ClassTranslator newInstance(@NotNull TranslationContext context) {
return new ClassTranslator(context);
}
private ClassTranslator(TranslationContext context) {
super(context); super(context);
} }
@@ -11,7 +11,12 @@ public final class DeclarationTranslator extends AbstractTranslator {
private DeclarationVisitor visitor = new DeclarationVisitor(); private DeclarationVisitor visitor = new DeclarationVisitor();
public DeclarationTranslator(TranslationContext context) { @NotNull
public static DeclarationTranslator newInstance(@NotNull TranslationContext context) {
return new DeclarationTranslator(context);
}
private DeclarationTranslator(TranslationContext context) {
super(context); super(context);
} }
@@ -13,6 +13,7 @@ import org.jetbrains.jet.lang.psi.JetProperty;
/** /**
* @author Talanov Pavel * @author Talanov Pavel
*/ */
//TODO: rework the class
public class DeclarationVisitor extends TranslatorVisitor<JsStatement> { public class DeclarationVisitor extends TranslatorVisitor<JsStatement> {
@NotNull @NotNull
@@ -21,7 +22,7 @@ public class DeclarationVisitor extends TranslatorVisitor<JsStatement> {
public JsStatement visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) { public JsStatement visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) {
JsName propertyName = context.declareLocalName(getPropertyName(expression)); JsName propertyName = context.declareLocalName(getPropertyName(expression));
JsNameRef jsPropertyNameReference = context.getNamespaceQualifiedReference(propertyName); JsNameRef jsPropertyNameReference = context.getNamespaceQualifiedReference(propertyName);
JsExpression jsInitExpression = translateInitializer(expression, context); JsExpression jsInitExpression = translateInitializerForProperty(expression, context);
JsExpression result; JsExpression result;
if (jsInitExpression != null) { if (jsInitExpression != null) {
result = AstUtil.newAssignment(jsPropertyNameReference, jsInitExpression); result = AstUtil.newAssignment(jsPropertyNameReference, jsInitExpression);
@@ -34,15 +35,13 @@ public class DeclarationVisitor extends TranslatorVisitor<JsStatement> {
@NotNull @NotNull
@Override @Override
public JsStatement visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) { public JsStatement visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) {
ClassTranslator translator = new ClassTranslator(context); return Translation.classTranslator(context).translateClass(expression);
return translator.translateClass(expression);
} }
@NotNull @NotNull
@Override @Override
public JsStatement visitNamedFunction(@NotNull JetNamedFunction expression, @NotNull TranslationContext context) { public JsStatement visitNamedFunction(@NotNull JetNamedFunction expression, @NotNull TranslationContext context) {
FunctionTranslator functionTranslator = new FunctionTranslator(context); return AstUtil.convertToStatement(Translation.functionTranslator(context).translateAsFunction(expression));
return AstUtil.convertToStatement(functionTranslator.translateAsFunction(expression));
} }
} }
@@ -11,7 +11,12 @@ public final class ExpressionTranslator extends AbstractTranslator {
final private ExpressionVisitor visitor = new ExpressionVisitor(); final private ExpressionVisitor visitor = new ExpressionVisitor();
public ExpressionTranslator(@NotNull TranslationContext context) { @NotNull
public static ExpressionTranslator newInstance(@NotNull TranslationContext context) {
return new ExpressionTranslator(context);
}
private ExpressionTranslator(@NotNull TranslationContext context) {
super(context); super(context);
} }
@@ -93,12 +93,11 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public JsInvocation translateAsSetterCall(@NotNull JetBinaryExpression expression, public JsInvocation translateAsSetterCall(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) { @NotNull TranslationContext context) {
JetToken jetOperationToken = (JetToken) expression.getOperationToken(); JetToken jetOperationToken = (JetToken) expression.getOperationToken();
if (!OperationTranslator.isAssignment(jetOperationToken)) { if (!OperatorTable.isAssignment(jetOperationToken)) {
return null; return null;
} }
PropertyAccessTranslator translator = new PropertyAccessTranslator(context);
JetExpression leftExpression = expression.getLeft(); JetExpression leftExpression = expression.getLeft();
JsInvocation setterCall = translator.resolveAsPropertySet(leftExpression); JsInvocation setterCall = Translation.propertyAccessTranslator(context).resolveAsPropertySet(leftExpression);
if (setterCall == null) { if (setterCall == null) {
return null; return null;
} }
@@ -116,7 +115,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
assert rightExpression != null : "Binary expression should have a right expression"; assert rightExpression != null : "Binary expression should have a right expression";
JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context)); JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context));
JetToken jetOperationToken = (JetToken) expression.getOperationToken(); JetToken jetOperationToken = (JetToken) expression.getOperationToken();
return new JsBinaryOperation(OperationTranslator.getBinaryOperator(jetOperationToken), left, right); return new JsBinaryOperation(OperatorTable.getBinaryOperator(jetOperationToken), left, right);
} }
//TODO support other cases //TODO support other cases
@@ -140,8 +139,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
return nameRef; return nameRef;
} }
PropertyAccessTranslator propertyAccessTranslator = new PropertyAccessTranslator(context); JsInvocation getterCall = Translation.propertyAccessTranslator(context).resolveAsPropertyGet(expression);
JsInvocation getterCall = propertyAccessTranslator.resolveAsPropertyGet(expression);
if (getterCall != null) { if (getterCall != null) {
return getterCall; return getterCall;
} }
@@ -159,7 +157,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
// assume it is a local variable declaration // assume it is a local variable declaration
public JsNode visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) { public JsNode visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) {
JsName jsPropertyName = context.declareLocalName(getPropertyName(expression)); JsName jsPropertyName = context.declareLocalName(getPropertyName(expression));
JsExpression jsInitExpression = translateInitializer(expression, context); JsExpression jsInitExpression = translateInitializerForProperty(expression, context);
return AstUtil.newVar(jsPropertyName, jsInitExpression); return AstUtil.newVar(jsPropertyName, jsInitExpression);
} }
@@ -318,10 +316,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@Nullable @Nullable
private JsInvocation translateAsGetterCall(@NotNull JetDotQualifiedExpression expression, private JsInvocation translateAsGetterCall(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) { @NotNull TranslationContext context) {
JsInvocation result; return Translation.propertyAccessTranslator(context).resolveAsPropertyGet(expression);
PropertyAccessTranslator translator = new PropertyAccessTranslator(context);
result = translator.resolveAsPropertyGet(expression);
return result;
} }
@NotNull @NotNull
@@ -354,5 +349,15 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
return selector; return selector;
} }
//TODO: implement unary operations
// @Override
// @NotNull
// public JsNode visitPrefixExpression(@NotNull JetUnaryExpression expression,
// @NotNull TranslationContext context) {
// JsExpression baseExpression = AstUtil.convertToExpression(expression.accept(this, context));
// expression
//
// }
} }
@@ -3,7 +3,6 @@ package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil; import com.google.dart.compiler.util.AstUtil;
import com.sun.istack.internal.NotNull; import com.sun.istack.internal.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetNamedFunction; import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.jet.lang.psi.JetParameter;
@@ -16,7 +15,12 @@ import java.util.List;
*/ */
public final class FunctionTranslator extends AbstractTranslator { public final class FunctionTranslator extends AbstractTranslator {
public FunctionTranslator(@NotNull TranslationContext context) { @NotNull
public static FunctionTranslator newInstance(@NotNull TranslationContext context) {
return new FunctionTranslator(context);
}
private FunctionTranslator(@NotNull TranslationContext context) {
super(context); super(context);
} }
@@ -51,20 +55,14 @@ public final class FunctionTranslator extends AbstractTranslator {
JetExpression jetBodyExpression = jetFunction.getBodyExpression(); JetExpression jetBodyExpression = jetFunction.getBodyExpression();
//TODO support them ffs //TODO support them ffs
assert jetBodyExpression != null : "Function without body not supported at the moment"; assert jetBodyExpression != null : "Function without body not supported at the moment";
JsNode body = (new ExpressionTranslator(functionContext(jetFunction))).translate(jetBodyExpression); JsNode body = Translation.expressionTranslator
(translationContext().newFunction(jetFunction)).translate(jetBodyExpression);
if (jetFunction.hasBlockBody()) { if (jetFunction.hasBlockBody()) {
return AstUtil.convertToBlock(body); return AstUtil.convertToBlock(body);
} }
return AstUtil.convertToBlock(new JsReturn(AstUtil.convertToExpression((body)))); return AstUtil.convertToBlock(new JsReturn(AstUtil.convertToExpression((body))));
} }
@NotNull
private TranslationContext functionContext(@NotNull JetNamedFunction jetFunction) {
FunctionDescriptor descriptor =
BindingUtils.getFunctionDescriptor(translationContext().bindingContext(), jetFunction);
return translationContext().newFunction(descriptor);
}
@NotNull @NotNull
private List<JsParameter> translateParameters(@NotNull List<JetParameter> jetParameters, private List<JsParameter> translateParameters(@NotNull List<JetParameter> jetParameters,
@NotNull JsScope functionScope) { @NotNull JsScope functionScope) {
@@ -25,7 +25,7 @@ public final class GenerationState {
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace); NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
DeclarationExtractor extractor = new DeclarationExtractor(); DeclarationExtractor extractor = new DeclarationExtractor();
extractor.extractDeclarations(descriptor, result.getRootScope()); extractor.extractDeclarations(descriptor, result.getRootScope());
(new NamespaceTranslator(TranslationContext.rootContext(result, bindingContext, extractor))) Translation.namespaceTranslator(TranslationContext.rootContext(result, bindingContext, extractor))
.generateAst(namespace); .generateAst(namespace);
return result; return result;
} }
@@ -77,8 +77,8 @@ public class InitializerVisitor extends TranslatorVisitor<List<JsStatement>> {
@NotNull @NotNull
private JsStatement translateInitializer(@NotNull JetProperty property, @NotNull TranslationContext context, private JsStatement translateInitializer(@NotNull JetProperty property, @NotNull TranslationContext context,
@NotNull JetExpression initializer) { @NotNull JetExpression initializer) {
ExpressionTranslator translator = new ExpressionTranslator(context); JsExpression initExpression = AstUtil.convertToExpression(Translation.expressionTranslator(context)
JsExpression initExpression = AstUtil.convertToExpression(translator.translate(initializer)); .translate(initializer));
return assignmentToBackingField(property, initExpression, context); return assignmentToBackingField(property, initExpression, context);
} }
@@ -14,7 +14,12 @@ import java.util.List;
*/ */
public final class NamespaceTranslator extends AbstractTranslator { public final class NamespaceTranslator extends AbstractTranslator {
public NamespaceTranslator(@NotNull TranslationContext context) { @NotNull
public static NamespaceTranslator newInstance(@NotNull TranslationContext context) {
return new NamespaceTranslator(context);
}
private NamespaceTranslator(@NotNull TranslationContext context) {
super(context); super(context);
} }
@@ -40,7 +45,7 @@ public final class NamespaceTranslator extends AbstractTranslator {
@NotNull @NotNull
private JsBlock translateDeclarations(@NotNull JetNamespace namespace, @NotNull TranslationContext newContext) { private JsBlock translateDeclarations(@NotNull JetNamespace namespace, @NotNull TranslationContext newContext) {
DeclarationTranslator declarationTranslator = new DeclarationTranslator(newContext); DeclarationTranslator declarationTranslator = Translation.declarationTranslator(newContext);
JsBlock namespaceDeclarations = new JsBlock(); JsBlock namespaceDeclarations = new JsBlock();
for (JetDeclaration declaration : namespace.getDeclarations()) { for (JetDeclaration declaration : namespace.getDeclarations()) {
namespaceDeclarations.addStatement(declarationTranslator.translateDeclaration(declaration)); namespaceDeclarations.addStatement(declarationTranslator.translateDeclaration(declaration));
@@ -11,7 +11,7 @@ import java.util.Map;
/** /**
* @author Talanov Pavel * @author Talanov Pavel
*/ */
public final class OperationTranslator { public final class OperatorTable {
private static Map<JetToken, JsOperator> map = new HashMap<JetToken, JsOperator>(); private static Map<JetToken, JsOperator> map = new HashMap<JetToken, JsOperator>();
@@ -23,7 +23,12 @@ import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
//TODO ask for code review. Class has messy code. //TODO ask for code review. Class has messy code.
public final class PropertyAccessTranslator extends AbstractTranslator { public final class PropertyAccessTranslator extends AbstractTranslator {
public PropertyAccessTranslator(@NotNull TranslationContext context) { @NotNull
public static PropertyAccessTranslator newInstance(@NotNull TranslationContext context) {
return new PropertyAccessTranslator(context);
}
private PropertyAccessTranslator(@NotNull TranslationContext context) {
super(context); super(context);
} }
@@ -50,8 +55,8 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
@NotNull @NotNull
private JsInvocation translateReceiverAndReturnAccessorInvocation private JsInvocation translateReceiverAndReturnAccessorInvocation
(@NotNull JetDotQualifiedExpression dotQualifiedExpression, @NotNull JsName accessorName) { (@NotNull JetDotQualifiedExpression dotQualifiedExpression, @NotNull JsName accessorName) {
ExpressionTranslator translator = new ExpressionTranslator(translationContext()); JsNode node = Translation.expressionTranslator(translationContext())
JsNode node = translator.translate(dotQualifiedExpression.getReceiverExpression()); .translate(dotQualifiedExpression.getReceiverExpression());
JsNameRef result = accessorName.makeRef(); JsNameRef result = accessorName.makeRef();
result.setQualifier(AstUtil.convertToExpression(node)); result.setQualifier(AstUtil.convertToExpression(node));
return AstUtil.newInvocation(result); return AstUtil.newInvocation(result);
@@ -0,0 +1,48 @@
package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.JsNode;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetExpression;
/**
* @author Talanov Pavel
* <p/>
* This class is a factory for obtaining instances of translators.
*/
public final class Translation {
@NotNull
static public ExpressionTranslator expressionTranslator(@NotNull TranslationContext context) {
return ExpressionTranslator.newInstance(context);
}
@NotNull
static public FunctionTranslator functionTranslator(@NotNull TranslationContext context) {
return FunctionTranslator.newInstance(context);
}
@NotNull
static public PropertyAccessTranslator propertyAccessTranslator(@NotNull TranslationContext context) {
return PropertyAccessTranslator.newInstance(context);
}
@NotNull
static public NamespaceTranslator namespaceTranslator(@NotNull TranslationContext context) {
return NamespaceTranslator.newInstance(context);
}
@NotNull
static public ClassTranslator classTranslator(@NotNull TranslationContext context) {
return ClassTranslator.newInstance(context);
}
@NotNull
static public DeclarationTranslator declarationTranslator(@NotNull TranslationContext context) {
return DeclarationTranslator.newInstance(context);
}
@NotNull
static public JsNode translateExpression(@NotNull JetExpression expression, @NotNull TranslationContext context) {
return expressionTranslator(context).translate(expression);
}
}
@@ -40,12 +40,13 @@ public class TranslatorVisitor<T> extends JetVisitor<T, TranslationContext> {
@Nullable @Nullable
protected JsExpression translateInitializer(@NotNull JetProperty declaration, @NotNull TranslationContext context) { protected JsExpression translateInitializerForProperty(@NotNull JetProperty declaration,
@NotNull TranslationContext context) {
JsExpression jsInitExpression = null; JsExpression jsInitExpression = null;
JetExpression initializer = declaration.getInitializer(); JetExpression initializer = declaration.getInitializer();
if (initializer != null) { if (initializer != null) {
jsInitExpression = AstUtil.convertToExpression( jsInitExpression = AstUtil.convertToExpression(Translation.expressionTranslator(context)
(new ExpressionTranslator(context)).translate(initializer)); .translate(initializer));
} }
return jsInitExpression; return jsInitExpression;
} }
@@ -80,4 +80,9 @@ public final class FunctionTest extends TranslationTest {
public void functionUsedBeforeDeclaration() throws Exception { public void functionUsedBeforeDeclaration() throws Exception {
testFooBoxIsTrue("functionUsedBeforeDeclaration.kt"); testFooBoxIsTrue("functionUsedBeforeDeclaration.kt");
} }
@Test
public void functionWithTwoParametersCall() throws Exception {
testFooBoxIsTrue("functionWithTwoParametersCall.kt");
}
} }
@@ -0,0 +1,9 @@
namespace foo
fun sum(param1 : Int, param2 : Int) : Int {
return param1 + param2;
}
fun box() : Boolean {
return (sum(1, 5) == 6)
}