Lots of refactoring and code improvements.

This commit is contained in:
Pavel Talanov
2011-11-25 14:00:28 +04:00
parent 97a413d0a2
commit 181bc45bf0
19 changed files with 664 additions and 448 deletions
+300 -234
View File
@@ -8,11 +8,25 @@
</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/operatorOverloading/cases/notOverload.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAndMinusAsAnExpression.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/AbstractInitializerTranslator.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/testFiles/class/cases/constructorWithPropertiesAsParameters.kt" />
<change type="DELETED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\ClassInitializerVisitor.java" afterPath="" />
<change type="DELETED" beforePath="C:\Dev\Projects\jet-contrib\k2js\translator\src\org\jetbrains\k2js\translate\InitializerGenerator.java" afterPath="" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/compareTo.kt" afterPath="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/compareTo.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/OperatorOverloadingTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BinaryOperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BinaryOperationTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.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/DeclarationBodyVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/DeclarationBodyVisitor.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/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/Translation.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationUtils.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationUtils.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/BasicClassTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -110,7 +124,7 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.51374346">
<splitter split-orientation="horizontal" split-proportion="0.32198954">
<split-first>
<leaf>
<file leaf-file-name="UnaryOperationTranslator.java" pinned="false" current="false" current-in-tab="false">
@@ -131,10 +145,10 @@
</provider>
</entry>
</file>
<file leaf-file-name="notOverload.kt" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="notOverload.kt" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/notOverload.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="37" selection-start="87" selection-end="87" vertical-scroll-proportion="0.18553889">
<state line="8" column="30" selection-start="87" selection-end="87" vertical-scroll-proportion="0.19181946">
<folding />
</state>
</provider>
@@ -153,80 +167,17 @@
</split-first>
<split-second>
<leaf>
<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="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="16" column="1" selection-start="332" selection-end="332" vertical-scroll-proportion="0.0">
<state line="37" column="16" selection-start="872" selection-end="872" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="plusAndMinusAsAnExpression.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAndMinusAsAnExpression.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="11" selection-start="138" selection-end="138" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="plusAndMinusAsAnExpression.js" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/plusAndMinusAsAnExpression.js">
<provider selected="true" editor-type-id="text-editor">
<state line="21" column="54" selection-start="416" selection-end="416" vertical-scroll-proportion="0.5211679">
<folding />
</state>
</provider>
</entry>
</file>
<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/BindingUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="177" column="0" selection-start="8328" selection-end="8328" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExpressionTypingVisitorForStatements.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java">
<provider selected="true" editor-type-id="text-editor">
<state line="140" column="63" selection-start="7306" selection-end="7306" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OperatorConventions.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/OperatorConventions.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="13" selection-start="357" selection-end="357" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TemporaryBindingTrace.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="0" selection-start="511" selection-end="511" 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="88" column="16" selection-start="2165" selection-end="2165" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="compareTo.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/compareTo.js">
<file leaf-file-name="valuePassedToAncestorConstructor.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/cases/valuePassedToAncestorConstructor.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
@@ -234,10 +185,75 @@
</provider>
</entry>
</file>
<file leaf-file-name="plusAssignReassign.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt">
<file leaf-file-name="AbstractInitializerTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/AbstractInitializerTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="14" selection-start="142" selection-end="142" vertical-scroll-proportion="0.0">
<state line="47" column="66" selection-start="1886" selection-end="1886" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="BasicClassTest.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/BasicClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="72" selection-start="1133" selection-end="1133" vertical-scroll-proportion="0.5726375">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="initializationOrder.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/out/initializationOrder.js">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="36" selection-start="224" selection-end="224" 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/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="35" column="22" selection-start="1318" selection-end="1318" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<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="52" column="16" selection-start="1184" selection-end="1184" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<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/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="80" column="85" selection-start="3267" selection-end="3267" 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/Translation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="37" column="72" selection-start="1514" selection-end="1514" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslationContext.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="86" column="35" selection-start="3339" selection-end="3339" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -264,22 +280,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/binaryPlusOverload.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/binaryDivOverload.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAssignNoReassign.kt" />
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/plusAssignReassign.kt" />
<option value="$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java" />
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/util/AstUtil.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsInvocation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/UnaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BindingUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BinaryOperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/notOverload.kt" />
<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/testFiles/operatorOverloading/cases/plusAndMinusAsAnExpression.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/AbstractInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/InitializerGenerator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslatorVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationUtils.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassDeclarationTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/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/initializer/InitializerVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Translation.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/AbstractInitializerTranslator.java" />
</list>
</option>
</component>
@@ -411,68 +427,6 @@
<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="patternMatching" />
<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="operatorOverloading" />
<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="operatorOverloading" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -508,6 +462,10 @@
<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>
@@ -523,7 +481,55 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="expression" />
<option name="myItemId" value="inheritance" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="testFiles" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="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_ELEMENT>
<option name="myItemId" value="cases" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
@@ -559,6 +565,54 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translate" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="initializer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -946,23 +1000,23 @@
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32853025" sideWeight="0.49812934" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32756963" sideWeight="0.4746125" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24973261" sideWeight="0.7183908" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.28530258" sideWeight="0.7685729" order="3" side_tool="false" content_ui="tabs" />
<window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27185398" sideWeight="0.2709781" order="10" side_tool="true" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27185398" sideWeight="0.14270444" order="10" 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" />
<window_info id="IDEtalk" 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="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32854405" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32853025" sideWeight="0.48743987" order="8" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32853025" sideWeight="0.4703367" order="8" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32949087" sideWeight="0.49812934" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32977018" sideWeight="0.728146" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997862" sideWeight="0.6705998" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.18332443" sideWeight="0.728146" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.27185398" sideWeight="0.7252806" order="2" 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.27185398" sideWeight="0.85355425" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32756963" sideWeight="0.48957777" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Metrics" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3275862" sideWeight="0.5" order="9" 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="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
@@ -1004,7 +1058,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="Binary operation overloading for most cases (except contains, compareTo)." />
<option name="LAST_COMMIT_MESSAGE" value="Added test for operator overloading." />
<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" />
@@ -1017,7 +1071,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 variable is value pattern matching." />
<MESSAGE value="Added tests and support for binary with type RHS expressions." />
<MESSAGE value="Added support for multiple cases in one when entry." />
<MESSAGE value="Split expression tests into different categories." />
@@ -1042,6 +1095,7 @@
<MESSAGE value="Added test for unary operation on int properties." />
<MESSAGE value="Refactoring BinaryOperationTranslator." />
<MESSAGE value="Binary operation overloading for most cases (except contains, compareTo)." />
<MESSAGE value="Added test for operator overloading." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -1051,110 +1105,122 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BinaryOperationTranslator.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="62" column="58" selection-start="2486" selection-end="2486" vertical-scroll-proportion="0.0">
<state line="105" column="56" selection-start="4505" selection-end="4505" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<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="45" column="61" selection-start="2749" selection-end="2749" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="789" column="22" selection-start="43248" selection-end="43248" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BindingUtils.java">
<provider selected="true" editor-type-id="text-editor">
<state line="177" column="0" selection-start="8328" selection-end="8328" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java">
<provider selected="true" editor-type-id="text-editor">
<state line="140" column="63" selection-start="7306" selection-end="7306" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/OperatorConventions.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="13" selection-start="357" selection-end="357" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="0" selection-start="511" selection-end="511" vertical-scroll-proportion="0.0" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="45" column="0" selection-start="1750" selection-end="1750" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/binaryDivOverload.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="103" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAssignReassign.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="14" selection-start="142" selection-end="142" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/compareTo.js">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/classInstantiation.js">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/compareTo.kt">
<entry file="file://$PROJECT_DIR$/translator/testFiles/class/out/propertyAccess.js">
<provider selected="true" editor-type-id="text-editor">
<state line="16" column="1" selection-start="332" selection-end="332" vertical-scroll-proportion="0.0">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="45" column="64" selection-start="1788" selection-end="1788" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
<element signature="e#2117#2130#0" expanded="true" />
<element signature="e#3424#3437#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/InitializerVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="83" column="84" selection-start="3447" selection-end="3447" vertical-scroll-proportion="0.0">
<folding>
<element signature="e#3127#3140#0" expanded="true" />
</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="88" column="16" selection-start="2165" selection-end="2165" vertical-scroll-proportion="0.0">
<state line="37" column="16" selection-start="812" selection-end="812" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/plusAndMinusAsAnExpression.kt">
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/out/initializationOrder.js">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="11" selection-start="138" selection-end="138" vertical-scroll-proportion="0.0">
<state line="10" column="36" selection-start="224" selection-end="224" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/out/plusAndMinusAsAnExpression.js">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java">
<provider selected="true" editor-type-id="text-editor">
<state line="21" column="54" selection-start="416" selection-end="416" vertical-scroll-proportion="0.5211679">
<state line="86" column="35" selection-start="3339" selection-end="3339" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/operatorOverloading/cases/notOverload.kt">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="8" column="37" selection-start="87" selection-end="87" vertical-scroll-proportion="0.18553889">
<state line="35" column="22" selection-start="1318" selection-end="1318" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/PropertyAccessorTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="52" column="16" selection-start="1184" selection-end="1184" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="80" column="85" selection-start="3267" selection-end="3267" 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="37" column="72" selection-start="1514" selection-end="1514" vertical-scroll-proportion="0.0">
<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="37" column="16" selection-start="872" selection-end="872" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/testFiles/inheritance/cases/valuePassedToAncestorConstructor.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/initializer/AbstractInitializerTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="47" column="66" selection-start="1886" selection-end="1886" 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/BasicClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="72" selection-start="1133" selection-end="1133" vertical-scroll-proportion="0.5726375">
<folding />
</state>
</provider>
@@ -39,7 +39,7 @@ public final class BinaryOperationTranslator extends OperationTranslator {
this.isVariableReassignment = isVariableReassignment(expression);
this.operationReference = getOverloadedOperationReference(expression.getOperationReference());
this.right = translateRightExpression();
//TODO: decide whether it is harmful to possibly translate left expression more than once
//TODO: decide whether it is harmful to possibly translateNamespace left expression more than once
this.left = translateLeftExpression();
}
@@ -106,7 +106,7 @@ public final class ClassDeclarationTranslator extends AbstractTranslator {
JsName localClassName = dummyFunctionScope.declareName(globalClassName.getIdent());
localToGlobalClassName.put(localClassName, globalClassName);
JsInvocation classDeclarationExpression =
Translation.classTranslator(translationContext()).translateClass(declaration);
Translation.translateClassDeclaration(declaration, translationContext());
return AstUtil.newVar(localClassName, classDeclarationExpression);
}
}
@@ -1,95 +0,0 @@
package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import java.util.ArrayList;
import java.util.List;
/**
* @author Talanov Pavel
*/
public final class ClassInitializerVisitor extends AbstractInitializerVisitor {
@NotNull
private final JetClass classDeclaration;
public ClassInitializerVisitor(@NotNull JetClass classDeclaration, @NotNull TranslationContext context) {
super(context, new JsScope(context.getScopeForElement(classDeclaration),
"initializer " + classDeclaration.getName()));
this.classDeclaration = classDeclaration;
}
@Override
@NotNull
public JsFunction generate() {
JsFunction result = JsFunction.getAnonymousFunctionWithScope(initializerMethodScope);
result.setParameters(translatePrimaryConstructorParameters(classDeclaration));
result.setBody(generateInitializerMethodBody(classDeclaration, initializerMethodContext));
return result;
}
@NotNull
private JsBlock generateInitializerMethodBody(@NotNull JetClass classDeclaration,
@NotNull TranslationContext context) {
List<JsStatement> initializerStatements = generateCallToSuperMethod(classDeclaration, context);
initializerStatements.addAll(classDeclaration.accept(this, context));
return AstUtil.newBlock(initializerStatements);
}
@NotNull
private List<JsStatement> generateCallToSuperMethod(@NotNull JetClass classDeclaration,
@NotNull TranslationContext context) {
List<JsStatement> result = new ArrayList<JsStatement>();
if (BindingUtils.hasAncestorClass(context.bindingContext(), classDeclaration)) {
JsName superMethodName = initializerMethodScope.declareName(Namer.SUPER_METHOD_NAME);
List<JsExpression> arguments = translateArguments(classDeclaration, context);
result.add(AstUtil.convertToStatement
(AstUtil.newInvocation(AstUtil.thisQualifiedReference(superMethodName), arguments)));
}
return result;
}
@NotNull
private List<JsExpression> translateArguments(@NotNull JetClass classDeclaration,
@NotNull TranslationContext context) {
JetDelegatorToSuperCall superCall = getSuperCall(classDeclaration);
return translateArgumentList(superCall.getValueArguments(), context);
}
@NotNull
private JetDelegatorToSuperCall getSuperCall(@NotNull JetClass classDeclaration) {
JetDelegatorToSuperCall result = null;
for (JetDelegationSpecifier specifier : classDeclaration.getDelegationSpecifiers()) {
if (specifier instanceof JetDelegatorToSuperCall) {
result = (JetDelegatorToSuperCall) specifier;
}
}
assert result != null : "Class must call ancestor's constructor.";
return result;
}
@Override
@NotNull
public List<JsStatement> visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) {
List<JsStatement> initializerStatements = new ArrayList<JsStatement>();
for (JetDeclaration declaration : expression.getDeclarations()) {
initializerStatements.addAll(declaration.accept(this, context));
}
return initializerStatements;
}
@NotNull
List<JsParameter> translatePrimaryConstructorParameters(@NotNull JetClass expression) {
List<JsParameter> result = new ArrayList<JsParameter>();
List<JetParameter> parameters = expression.getPrimaryConstructorParameters();
for (JetParameter parameter : parameters) {
JsName parameterName = initializerMethodScope.declareName(parameter.getName());
result.add(new JsParameter(parameterName));
}
return result;
}
}
@@ -25,46 +25,48 @@ public final class ClassTranslator extends AbstractTranslator {
private final DeclarationBodyVisitor declarationBodyVisitor = new DeclarationBodyVisitor();
@NotNull
public static ClassTranslator newInstance(@NotNull TranslationContext context) {
return new ClassTranslator(context);
private final JetClass classDeclaration;
@NotNull
static public JsInvocation translateClass(@NotNull JetClass classDeclaration, @NotNull TranslationContext context) {
return (new ClassTranslator(classDeclaration, context)).translateClass();
}
private ClassTranslator(TranslationContext context) {
super(context);
private ClassTranslator(@NotNull JetClass classDeclaration, @NotNull TranslationContext context) {
super(context.newClass(classDeclaration));
this.classDeclaration = classDeclaration;
}
@NotNull
public JsInvocation translateClass(@NotNull JetClass jetClassDeclaration) {
JsInvocation jsClassDeclaration = classCreateMethodInvocation(jetClassDeclaration);
addSuperclassReferences(jetClassDeclaration, jsClassDeclaration);
addClassOwnDeclarations(jetClassDeclaration, jsClassDeclaration);
private JsInvocation translateClass() {
JsInvocation jsClassDeclaration = classCreateMethodInvocation();
addSuperclassReferences(jsClassDeclaration);
addClassOwnDeclarations(jsClassDeclaration);
return jsClassDeclaration;
}
@NotNull
private JsInvocation classCreateMethodInvocation(@NotNull JetClass jetClassDeclaration) {
if (jetClassDeclaration.isTrait()) {
private JsInvocation classCreateMethodInvocation() {
if (classDeclaration.isTrait()) {
return AstUtil.newInvocation(Namer.traitCreationMethodReference());
} else {
return AstUtil.newInvocation(Namer.classCreationMethodReference());
}
}
private void addClassOwnDeclarations(@NotNull JetClass classDeclaration,
@NotNull JsInvocation jsClassDeclaration) {
JsObjectLiteral jsClassDescription = translateClassDeclarations(classDeclaration);
private void addClassOwnDeclarations(@NotNull JsInvocation jsClassDeclaration) {
JsObjectLiteral jsClassDescription = translateClassDeclarations();
jsClassDeclaration.getArguments().add(jsClassDescription);
}
private void addSuperclassReferences(@NotNull JetClass classDeclaration,
@NotNull JsInvocation jsClassDeclaration) {
for (JsNameRef superClassReference : getSuperclassNameReferences(classDeclaration)) {
private void addSuperclassReferences(@NotNull JsInvocation jsClassDeclaration) {
for (JsNameRef superClassReference : getSuperclassNameReferences()) {
jsClassDeclaration.getArguments().add(superClassReference);
}
}
@NotNull
private List<JsNameRef> getSuperclassNameReferences(@NotNull JetClass classDeclaration) {
private List<JsNameRef> getSuperclassNameReferences() {
List<JsNameRef> superclassReferences = new ArrayList<JsNameRef>();
List<ClassDescriptor> superclassDescriptors =
BindingUtils.getSuperclassDescriptors(translationContext().bindingContext(), classDeclaration);
@@ -106,13 +108,13 @@ public final class ClassTranslator extends AbstractTranslator {
}
@NotNull
private JsObjectLiteral translateClassDeclarations(@NotNull JetClass classDeclaration) {
private JsObjectLiteral translateClassDeclarations() {
List<JsPropertyInitializer> propertyList = new ArrayList<JsPropertyInitializer>();
if (!classDeclaration.isTrait()) {
propertyList.add(InitializerGenerator.generateInitializeMethod(classDeclaration, translationContext()));
propertyList.add(Translation.generateClassInitializerMethod(classDeclaration, translationContext()));
}
propertyList.addAll(declarationBodyVisitor.traverseClass(classDeclaration,
translationContext().newClass(classDeclaration)));
translationContext()));
return new JsObjectLiteral(propertyList);
}
}
@@ -41,7 +41,7 @@ public final class DeclarationBodyVisitor extends TranslatorVisitor<List<JsPrope
@Override
@NotNull
public List<JsPropertyInitializer> visitClass(@NotNull JetClass expression, @NotNull TranslationContext context) {
//TODO: we are interested only in class own declarations
//TODO:
return Collections.emptyList();
}
@@ -103,7 +103,7 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitCallExpression(JetCallExpression expression, TranslationContext context) {
JsExpression callee = translateCallee(expression, context);
List<JsExpression> arguments = translateArgumentList(expression.getValueArguments(), context);
List<JsExpression> arguments = TranslationUtils.translateArgumentList(expression.getValueArguments(), context);
if (isConstructorInvocation(expression, context)) {
JsNew constructorCall = new JsNew(callee);
constructorCall.setArguments(arguments);
@@ -1,56 +0,0 @@
package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.JsFunction;
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetNamedDeclaration;
import org.jetbrains.jet.lang.psi.JetNamespace;
//TODO: thing about redesigning this class
public class InitializerGenerator {
@NotNull
private final TranslationContext context;
@NotNull
private final JetNamedDeclaration declaration;
static public JsPropertyInitializer generateInitializeMethod(@NotNull JetNamedDeclaration declaration,
@NotNull TranslationContext context) {
return (new InitializerGenerator(context, declaration)).generateInitializeMethod();
}
private InitializerGenerator(@NotNull TranslationContext context, @NotNull JetNamedDeclaration declaration) {
this.context = context;
this.declaration = declaration;
assert (declaration instanceof JetClass) || (declaration instanceof JetNamespace) :
"Can create initializers for classes or namespaces only";
}
@NotNull
public JsPropertyInitializer generateInitializeMethod() {
JsPropertyInitializer initializer = new JsPropertyInitializer();
initializer.setLabelExpr(context.program().getStringLiteral(Namer.INITIALIZE_METHOD_NAME));
initializer.setValueExpr(generateInitializeFunction());
return initializer;
}
//TODO: track context change points, make them consistent, make sure that inside class declaration block
// classes reference their ancestor by aliases
@NotNull
private JsFunction generateInitializeFunction() {
AbstractInitializerVisitor visitor;
if (declaration instanceof JetNamespace) {
JetNamespace namespaceDeclaration = (JetNamespace) declaration;
visitor = new NamespaceInitializerVisitor(namespaceDeclaration,
context.newNamespace(namespaceDeclaration));
} else {
assert declaration instanceof JetClass;
JetClass classDeclaration = (JetClass) declaration;
visitor = new ClassInitializerVisitor(classDeclaration,
context.newClass(classDeclaration));
}
return visitor.generate();
}
}
@@ -21,13 +21,12 @@ public final class NamespaceTranslator extends AbstractTranslator {
private final ClassDeclarationTranslator classDeclarationTranslator;
@NotNull
public static JsStatement translate(@NotNull TranslationContext context,
@NotNull JetNamespace namespace) {
return (new NamespaceTranslator(context, namespace)).translateNamespace();
public static JsStatement translateNamespace(@NotNull JetNamespace namespace, @NotNull TranslationContext context) {
return (new NamespaceTranslator(namespace, context)).translateNamespace();
}
private NamespaceTranslator(@NotNull TranslationContext context, @NotNull JetNamespace namespace) {
super(context);
private NamespaceTranslator(@NotNull JetNamespace namespace, @NotNull TranslationContext context) {
super(context.newNamespace(namespace));
this.namespace = namespace;
this.namespaceName = context.getNameForElement(namespace);
this.classDeclarationTranslator = new ClassDeclarationTranslator(context, namespace);
@@ -78,9 +77,8 @@ public final class NamespaceTranslator extends AbstractTranslator {
@NotNull
private JsObjectLiteral translateNamespaceMemberDeclarations() {
List<JsPropertyInitializer> propertyList = new ArrayList<JsPropertyInitializer>();
propertyList.add(InitializerGenerator.generateInitializeMethod(namespace, translationContext()));
propertyList.addAll(new DeclarationBodyVisitor().traverseNamespace(namespace,
translationContext().newNamespace(namespace)));
propertyList.add(Translation.generateNamespaceInitializerMethod(namespace, translationContext()));
propertyList.addAll(new DeclarationBodyVisitor().traverseNamespace(namespace, translationContext()));
return new JsObjectLiteral(propertyList);
}
}
@@ -3,12 +3,11 @@ package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.psi.JetWhenExpression;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.declarations.Declarations;
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator;
/**
* @author Talanov Pavel
@@ -36,12 +35,13 @@ public final class Translation {
@NotNull
static public JsStatement translateNamespace(@NotNull JetNamespace namespace,
@NotNull TranslationContext context) {
return NamespaceTranslator.translate(context, namespace);
return NamespaceTranslator.translateNamespace(namespace, context);
}
@NotNull
static public ClassTranslator classTranslator(@NotNull TranslationContext context) {
return ClassTranslator.newInstance(context);
static public JsInvocation translateClassDeclaration(@NotNull JetClass classDeclaration,
@NotNull TranslationContext context) {
return ClassTranslator.translateClass(classDeclaration, context);
}
@NotNull
@@ -74,6 +74,18 @@ public final class Translation {
return WhenTranslator.translateWhenExpression(expression, context);
}
@NotNull
static public JsPropertyInitializer generateClassInitializerMethod(@NotNull JetClass classDeclaration,
@NotNull TranslationContext context) {
return (new ClassInitializerTranslator(classDeclaration, context)).generateInitializeMethod();
}
@NotNull
static public JsPropertyInitializer generateNamespaceInitializerMethod(@NotNull JetNamespace namespace,
@NotNull TranslationContext context) {
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
}
@NotNull
static public JsNameRef generateCorrectReference(@NotNull TranslationContext context,
@NotNull JetSimpleNameExpression expression,
@@ -84,7 +84,7 @@ public final class TranslationContext {
}
@NotNull
TranslationContext newClass(@NotNull JetClass declaration) {
public TranslationContext newClass(@NotNull JetClass declaration) {
return newClass(BindingUtils.getClassDescriptor(bindingContext, declaration));
}
@@ -4,7 +4,12 @@ import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.psi.ValueArgument;
import java.util.ArrayList;
import java.util.List;
/**
* @author Talanov Pavel
@@ -38,4 +43,26 @@ public final class TranslationUtils {
@NotNull String name) {
return context.enclosingScope().findExistingName(name);
}
@NotNull
static public List<JsExpression> translateArgumentList(@NotNull List<? extends ValueArgument> jetArguments,
@NotNull TranslationContext context) {
List<JsExpression> jsArguments = new ArrayList<JsExpression>();
for (ValueArgument argument : jetArguments) {
jsArguments.add(translateArgument(context, argument));
}
return jsArguments;
}
@NotNull
static public JsExpression translateArgument(@NotNull TranslationContext context, @NotNull ValueArgument argument) {
JetExpression jetExpression = argument.getArgumentExpression();
if (jetExpression == null) {
throw new AssertionError("Argument with no expression encountered!");
}
return Translation.translateAsExpression(jetExpression, context);
}
}
@@ -6,10 +6,10 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.psi.*;
import java.util.ArrayList;
import java.util.List;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetProperty;
import org.jetbrains.jet.lang.psi.JetVisitor;
/**
* @author Talanov Pavel
@@ -59,23 +59,4 @@ public class TranslatorVisitor<T> extends JetVisitor<T, TranslationContext> {
}
return jsInitExpression;
}
@NotNull
protected List<JsExpression> translateArgumentList(@NotNull List<? extends ValueArgument> jetArguments,
@NotNull TranslationContext context) {
List<JsExpression> jsArguments = new ArrayList<JsExpression>();
for (ValueArgument argument : jetArguments) {
jsArguments.add(translateArgument(context, argument));
}
return jsArguments;
}
@NotNull
private JsExpression translateArgument(@NotNull TranslationContext context, @NotNull ValueArgument argument) {
JetExpression jetExpression = argument.getArgumentExpression();
if (jetExpression == null) {
throw new AssertionError("Argument with no expression encountered!");
}
return Translation.translateAsExpression(jetExpression, context);
}
}
@@ -0,0 +1,47 @@
package org.jetbrains.k2js.translate.initializer;
import com.google.dart.compiler.backend.js.ast.JsFunction;
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer;
import com.google.dart.compiler.backend.js.ast.JsScope;
import com.google.dart.compiler.backend.js.ast.JsStatement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetDeclaration;
import org.jetbrains.k2js.translate.AbstractTranslator;
import org.jetbrains.k2js.translate.Namer;
import org.jetbrains.k2js.translate.TranslationContext;
import java.util.List;
/**
* @author Talanov Pavel
*/
public abstract class AbstractInitializerTranslator extends AbstractTranslator {
@NotNull
protected final InitializerVisitor visitor;
@NotNull
protected final JsScope initializerMethodScope;
protected AbstractInitializerTranslator(@NotNull JsScope initializerMethodScope, @NotNull TranslationContext context) {
super(context.newEnclosingScope(initializerMethodScope));
this.visitor = new InitializerVisitor();
this.initializerMethodScope = initializerMethodScope;
}
abstract protected JsFunction generateInitializerFunction();
@NotNull
public JsPropertyInitializer generateInitializeMethod() {
JsPropertyInitializer initializer = new JsPropertyInitializer();
initializer.setLabelExpr(translationContext().program().getStringLiteral(Namer.INITIALIZE_METHOD_NAME));
initializer.setValueExpr(generateInitializerFunction());
return initializer;
}
@NotNull
protected List<JsStatement> translatePropertyAndAnonymousInitializers(@NotNull JetDeclaration declaration) {
return visitor.traverse(declaration, translationContext());
}
}
@@ -0,0 +1,95 @@
package org.jetbrains.k2js.translate.initializer;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.psi.JetDelegationSpecifier;
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.k2js.translate.BindingUtils;
import org.jetbrains.k2js.translate.Namer;
import org.jetbrains.k2js.translate.TranslationContext;
import org.jetbrains.k2js.translate.TranslationUtils;
import java.util.ArrayList;
import java.util.List;
/**
* @author Talanov Pavel
*/
public final class ClassInitializerTranslator extends AbstractInitializerTranslator {
@NotNull
private final JetClass classDeclaration;
public ClassInitializerTranslator(@NotNull JetClass classDeclaration, @NotNull TranslationContext context) {
super(new JsScope(context.getScopeForElement(classDeclaration),
"initializer " + classDeclaration.getName()), context);
this.classDeclaration = classDeclaration;
}
@Override
@NotNull
protected JsFunction generateInitializerFunction() {
JsFunction result = JsFunction.getAnonymousFunctionWithScope(initializerMethodScope);
result.setParameters(translatePrimaryConstructorParameters());
result.setBody(generateInitializerMethodBody());
return result;
}
@NotNull
private JsBlock generateInitializerMethodBody() {
List<JsStatement> initializerStatements = generateCallToSuperMethod();
// initializerStatements.addAll(initializersForParameterProperties());
initializerStatements.addAll(translatePropertyAndAnonymousInitializers(classDeclaration));
return AstUtil.newBlock(initializerStatements);
}
@NotNull
private List<JsStatement> initializersForParameterProperties() {
return null;
}
@NotNull
private List<JsStatement> generateCallToSuperMethod() {
List<JsStatement> result = new ArrayList<JsStatement>();
if (BindingUtils.hasAncestorClass(translationContext().bindingContext(), classDeclaration)) {
JsName superMethodName = initializerMethodScope.declareName(Namer.SUPER_METHOD_NAME);
List<JsExpression> arguments = translateArguments();
result.add(AstUtil.convertToStatement
(AstUtil.newInvocation(AstUtil.thisQualifiedReference(superMethodName), arguments)));
}
return result;
}
@NotNull
private List<JsExpression> translateArguments() {
JetDelegatorToSuperCall superCall = getSuperCall();
return TranslationUtils.translateArgumentList(superCall.getValueArguments(), translationContext());
}
@NotNull
private JetDelegatorToSuperCall getSuperCall() {
JetDelegatorToSuperCall result = null;
for (JetDelegationSpecifier specifier : classDeclaration.getDelegationSpecifiers()) {
if (specifier instanceof JetDelegatorToSuperCall) {
result = (JetDelegatorToSuperCall) specifier;
}
}
assert result != null : "Class must call ancestor's constructor.";
return result;
}
@NotNull
List<JsParameter> translatePrimaryConstructorParameters() {
List<JsParameter> result = new ArrayList<JsParameter>();
List<JetParameter> parameters = classDeclaration.getPrimaryConstructorParameters();
for (JetParameter parameter : parameters) {
JsName parameterName = initializerMethodScope.declareName(parameter.getName());
result.add(new JsParameter(parameterName));
}
return result;
}
}
@@ -0,0 +1,91 @@
package org.jetbrains.k2js.translate.initializer;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.JsStatement;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.k2js.translate.Translation;
import org.jetbrains.k2js.translate.TranslationContext;
import org.jetbrains.k2js.translate.TranslatorVisitor;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author Talanov Pavel
*/
public final class InitializerVisitor extends TranslatorVisitor<List<JsStatement>> {
protected InitializerVisitor() {
}
@Override
@NotNull
public List<JsStatement> visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) {
JetExpression initializer = expression.getInitializer();
if (initializer == null) {
return new ArrayList<JsStatement>();
}
return Arrays.asList(translateInitializer(expression, context, initializer));
}
@NotNull
private JsStatement translateInitializer(@NotNull JetProperty property, @NotNull TranslationContext context,
@NotNull JetExpression initializer) {
JsExpression initExpression = Translation.translateAsExpression(initializer, context);
return assignmentToBackingField(property, initExpression, context);
}
@NotNull
JsStatement assignmentToBackingField(@NotNull JetProperty property, @NotNull JsExpression initExpression,
@NotNull TranslationContext context) {
return AstUtil.newAssignmentStatement(backingFieldReference(property, context), initExpression);
}
@Override
@NotNull
public List<JsStatement> visitAnonymousInitializer(@NotNull JetClassInitializer initializer,
@NotNull TranslationContext context) {
return Arrays.asList(Translation.translateAsStatement(initializer.getBody(), context));
}
@Override
@NotNull
// Not interested in other types of declarations, they do not contain initializers.
public List<JsStatement> visitDeclaration(@NotNull JetDeclaration expression, @NotNull TranslationContext context) {
return new ArrayList<JsStatement>();
}
@NotNull
public List<JsStatement> traverseClass(@NotNull JetClass expression, @NotNull TranslationContext context) {
List<JsStatement> initializerStatements = new ArrayList<JsStatement>();
for (JetDeclaration declaration : expression.getDeclarations()) {
initializerStatements.addAll(declaration.accept(this, context));
}
return initializerStatements;
}
@NotNull
public List<JsStatement> traverseNamespace(@NotNull JetNamespace expression, @NotNull TranslationContext context) {
List<JsStatement> initializerStatements = new ArrayList<JsStatement>();
for (JetDeclaration declaration : expression.getDeclarations()) {
initializerStatements.addAll(declaration.accept(this, context));
}
return initializerStatements;
}
@NotNull
public List<JsStatement> traverse(@NotNull JetDeclaration declaration, @NotNull TranslationContext context) {
if (declaration instanceof JetNamespace) {
return traverseNamespace((JetNamespace) declaration, context);
}
if (declaration instanceof JetClass) {
return traverseClass((JetClass) declaration, context);
}
throw new AssertionError("Cannot traverse anything else.");
}
}
@@ -0,0 +1,33 @@
package org.jetbrains.k2js.translate.initializer;
import com.google.dart.compiler.backend.js.ast.JsFunction;
import com.google.dart.compiler.backend.js.ast.JsScope;
import com.google.dart.compiler.util.AstUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.JetNamespace;
import org.jetbrains.k2js.translate.TranslationContext;
/**
* @author Talanov Pavel
*/
public final class NamespaceInitializerTranslator extends AbstractInitializerTranslator {
@NotNull
private final JetNamespace namespace;
public NamespaceInitializerTranslator(@NotNull JetNamespace namespace, @NotNull TranslationContext context) {
super(new JsScope(context.getScopeForElement(namespace),
"initializer " + namespace.getName()), context);
this.namespace = namespace;
}
@Override
@NotNull
protected JsFunction generateInitializerFunction() {
JsFunction result = JsFunction.getAnonymousFunctionWithScope(initializerMethodScope);
result.setBody(AstUtil.newBlock(translatePropertyAndAnonymousInitializers(namespace)));
return result;
}
}
@@ -30,6 +30,11 @@ public class BasicClassTest extends TranslationTest {
testFooBoxIsTrue("constructorWithParameter.kt");
}
@Test
public void constructorWithPropertiesAsParameters() throws Exception {
testFooBoxIsTrue("constructorWithPropertiesAsParameters.kt");
}
@Test
public void incrementProperty() throws Exception {
testFunctionOutput("incrementProperty.kt", "foo", "box", "OK");
@@ -0,0 +1,10 @@
namespace foo
class A(var b : Int, var a : String) {
}
fun box() : Boolean {
val c = A(1, "1")
return (c.b == 1 && c.a == "1")
}