Added default getter/setter support and initializer support.

This commit is contained in:
Pavel Talanov
2011-11-10 21:29:50 +04:00
parent fe54dc78e8
commit 8e147b26a7
19 changed files with 740 additions and 336 deletions
+320 -266
View File
@@ -6,11 +6,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/test_files/test_cases/functionUsedBeforeDeclaration.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/PropertyAccessTranslator.java" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/constructorWithParameter.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/setter.kt" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.kt" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/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/FunctionTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsBlock.java" afterPath="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsBlock.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsInvocation.java" afterPath="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsInvocation.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationExtractor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationExtractor.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.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/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/Namer.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Namer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" afterPath="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.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/test/org/jetbrains/k2js/test/ClassTest.java" afterPath="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/translator/test_files/test_cases/accessToInstanceProperty.kt" afterPath="$PROJECT_DIR$/translator/test_files/test_cases/accessToInstanceProperty.kt" />
</list>
<ignored path="k2js.iws" />
<ignored path=".idea/workspace.xml" />
@@ -35,7 +49,20 @@
</component>
<component name="DebuggerManager">
<line_breakpoints>
<breakpoint url="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" line="283" class="org.jetbrains.k2js.translate.ExpressionVisitor" package="org.jetbrains.k2js.translate">
<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">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java" line="28" class="org.jetbrains.k2js.test.ClassTest" package="org.jetbrains.k2js.test">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
@@ -88,78 +115,9 @@
<favorites_list name="k2js" />
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.38839287">
<splitter split-orientation="horizontal" split-proportion="0.27544528">
<split-first>
<leaf>
<file leaf-file-name="DeclarationExtractor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationExtractor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="44" selection-start="720" selection-end="720" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</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="152" column="49" selection-start="5820" selection-end="5820" 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="31" column="86" selection-start="1029" selection-end="1029" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JsFunction.java" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsFunction.java">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="23" selection-start="450" selection-end="450" vertical-scroll-proportion="0.32425067">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="TranslationTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="15" column="13" selection-start="351" selection-end="351" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExtractionVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="63" column="34" selection-start="2525" selection-end="2525" vertical-scroll-proportion="-14.28">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Void.java" pinned="false" current="false" current-in-tab="false">
<entry file="jar://C:/Program Files/Java/jdk1.7.0_01/src.zip!/java/lang/Void.java">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="6" selection-start="464" selection-end="464" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="DeclarationDescriptorVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java">
<provider selected="true" editor-type-id="text-editor">
@@ -189,14 +147,46 @@
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="true" current-in-tab="true">
<file leaf-file-name="twoClassesWithProperties.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="39" selection-start="146" selection-end="146" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="twoClassesWithProperties.js" pinned="false" current="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.js">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="0" selection-start="363" selection-end="363" vertical-scroll-proportion="0.82560706">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JsNew.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsNew.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="22" selection-start="394" selection-end="394" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Cloner.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/Cloner.java">
<provider selected="true" editor-type-id="text-editor">
<state line="153" column="4" selection-start="5360" selection-end="5360" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ExpressionVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="114" column="37" selection-start="4820" selection-end="4820" vertical-scroll-proportion="0.53743315">
<state line="172" column="40" selection-start="7413" selection-end="7413" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -204,10 +194,32 @@
</provider>
</entry>
</file>
<file leaf-file-name="ClassBodyVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java">
<file leaf-file-name="constructorWithParameter.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/constructorWithParameter.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="32" column="62" selection-start="1212" selection-end="1212" vertical-scroll-proportion="0.0">
<state line="6" column="14" selection-start="80" selection-end="80" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="accessToInstanceProperty.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/accessToInstanceProperty.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="21" selection-start="51" selection-end="51" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file leaf-file-name="InitializerVisitor.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="79" selection-start="2300" selection-end="2300" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -215,10 +227,66 @@
</provider>
</entry>
</file>
<file leaf-file-name="accessToInstanceProperty.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/accessToInstanceProperty.js">
<provider selected="true" editor-type-id="text-editor">
<state line="1" column="0" selection-start="10" selection-end="10" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="setter.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/setter.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="13" selection-start="66" selection-end="66" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassTest.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="16" selection-start="2199" selection-end="2199" vertical-scroll-proportion="0.65750915">
<folding />
</state>
</provider>
</entry>
</file>
<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">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="19" selection-start="808" selection-end="808" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="OperationTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="29" column="56" selection-start="1070" selection-end="1070" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="setter.js" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/setter.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>
</file>
<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">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="23" selection-start="689" selection-end="694" vertical-scroll-proportion="-6.6538463">
<state line="18" column="0" selection-start="621" selection-end="621" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
@@ -226,70 +294,19 @@
</provider>
</entry>
</file>
<file leaf-file-name="FunctionTranslator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java">
<file leaf-file-name="TranslationTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/TranslationTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="26" column="30" selection-start="831" selection-end="831" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="functionUsedBeforeDeclaration.kt" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/functionUsedBeforeDeclaration.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="19" selection-start="35" selection-end="35" vertical-scroll-proportion="0.0">
<state line="39" column="28" selection-start="1478" selection-end="1478" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="localProperty.jet" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/localProperty.jet">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="127" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="JetDotQualifiedExpression.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="0" selection-start="515" selection-end="515" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GenerationState.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="38" selection-start="1431" selection-end="1431" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</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="50" column="65" selection-start="2440" selection-end="2440" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="FunctionTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="74" column="19" selection-start="1786" selection-end="1786" vertical-scroll-proportion="0.0">
<state line="10" column="19" selection-start="250" selection-end="250" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
@@ -311,22 +328,22 @@
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/translator/test_files/test_cases/classInstantiation.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/classWithProperties.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java" />
<option value="$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NamespaceDescriptor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationExtractor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/BindingUtils.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsFunction.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/TranslationContext.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/NamespaceTranslator.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/twoClassesProperties.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java" />
<option value="$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsBlock.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/FunctionTranslator.java" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/functionUsedBeforeDeclaration.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Namer.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/setter.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/accessToInstanceProperty.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.kt" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/constuctorWithParameter.kt" />
<option value="$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/ClassTest.java" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/constructorWithParameter.kt" />
<option value="$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.js" />
<option value="$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/InitializerVisitor.java" />
</list>
</option>
</component>
@@ -463,6 +480,50 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="translator" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="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="generate" />
<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="declarations" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="k2js" />
@@ -554,7 +615,7 @@
<recent name="C:\Dev\Projects\k2js\src\org\jetbrains\k2js\translate" />
</key>
</component>
<component name="RunManager" selected="JUnit.FunctionTest.functionUsedBeforeDeclaration">
<component name="RunManager" selected="JUnit.All in translator">
<configuration default="false" name="ClassTest" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
@@ -577,17 +638,17 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="Temp suite" type="JUnit" factoryName="JUnit" temporary="true">
<configuration default="false" name="FunctionTest" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="TEST_OBJECT" value="pattern" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$/translator" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.FunctionTest" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
@@ -595,21 +656,17 @@
</option>
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="50097" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<ConfigurationWrapper RunnerId="Debug" />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="ClassTest.methodDeclarationAndCall" type="JUnit" factoryName="JUnit" temporary="true">
<configuration default="false" name="ClassTest.twoClassesWithProperties" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.ClassTest" />
<option name="METHOD_NAME" value="methodDeclarationAndCall" />
<option name="METHOD_NAME" value="twoClassesWithProperties" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
@@ -622,7 +679,7 @@
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="50132" />
<option name="DEBUG_PORT" value="53339" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
@@ -651,13 +708,13 @@
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="false" name="FunctionTest.functionUsedBeforeDeclaration" type="JUnit" factoryName="JUnit" temporary="true">
<configuration default="false" name="ClassTest.setter" type="JUnit" factoryName="JUnit" temporary="true">
<module name="translator" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" value="" />
<option name="PACKAGE_NAME" value="org.jetbrains.k2js.test" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.FunctionTest" />
<option name="METHOD_NAME" value="functionUsedBeforeDeclaration" />
<option name="MAIN_CLASS_NAME" value="org.jetbrains.k2js.test.ClassTest" />
<option name="METHOD_NAME" value="setter" />
<option name="TEST_OBJECT" value="method" />
<option name="VM_PARAMETERS" value="-ea" />
<option name="PARAMETERS" value="" />
@@ -670,13 +727,11 @@
<envs />
<patterns />
<RunnerSettings RunnerId="Debug">
<option name="DEBUG_PORT" value="52447" />
<option name="DEBUG_PORT" value="53959" />
<option name="TRANSPORT" value="0" />
<option name="LOCAL" value="true" />
</RunnerSettings>
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Debug" />
<ConfigurationWrapper RunnerId="Run" />
<method />
</configuration>
<configuration default="true" type="Remote" factoryName="Remote">
@@ -755,10 +810,10 @@
</configuration>
<list size="5">
<item index="0" class="java.lang.String" itemvalue="JUnit.ClassTest" />
<item index="1" class="java.lang.String" itemvalue="JUnit.Temp suite" />
<item index="2" class="java.lang.String" itemvalue="JUnit.ClassTest.methodDeclarationAndCall" />
<item index="1" class="java.lang.String" itemvalue="JUnit.FunctionTest" />
<item index="2" class="java.lang.String" itemvalue="JUnit.ClassTest.twoClassesWithProperties" />
<item index="3" class="java.lang.String" itemvalue="JUnit.All in translator" />
<item index="4" class="java.lang.String" itemvalue="JUnit.FunctionTest.functionUsedBeforeDeclaration" />
<item index="4" class="java.lang.String" itemvalue="JUnit.ClassTest.setter" />
</list>
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
@@ -800,24 +855,24 @@
<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.3275862" sideWeight="0.5" 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="true" weight="0.19923371" 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.32907662" sideWeight="0.5" order="7" 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.32854405" sideWeight="0.5" order="7" 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.2624521" 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.32907662" 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.32854405" sideWeight="0.5" 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.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Metrics" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3275862" sideWeight="0.5" order="7" 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="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.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" 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.21283422" sideWeight="0.8007663" 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="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.43007663" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1593583" sideWeight="0.5699234" 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="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.43007663" 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="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="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" 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="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" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3994253" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="JsTestDriver Server" 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="JsTestDriver Server" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32907662" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
@@ -848,7 +903,7 @@
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" value="Added DeclarationExtractor logic." />
<option name="LAST_COMMIT_MESSAGE" value="Added a test for extractor." />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
@@ -871,6 +926,7 @@
<MESSAGE value="Added constructor calls. Working on method logic." />
<MESSAGE value="Added simple method call support." />
<MESSAGE value="Added DeclarationExtractor logic." />
<MESSAGE value="Added a test for extractor." />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
@@ -880,132 +936,130 @@
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/GenerationState.java">
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/setter.js">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="38" selection-start="1431" selection-end="1431" 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/PropertyAccessTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="19" selection-start="808" selection-end="808" 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/TranslationContext.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/OperationTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="152" column="49" selection-start="5820" selection-end="5820" vertical-scroll-proportion="0.0">
<state line="29" column="56" selection-start="1070" selection-end="1070" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassTranslator.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/DeclarationExtractor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="50" column="65" selection-start="2440" selection-end="2440" vertical-scroll-proportion="0.0">
<state line="40" column="39" selection-start="1371" selection-end="1371" 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/NamespaceTranslator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="31" column="86" selection-start="1029" selection-end="1029" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/declarations/ExtractionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="63" column="34" selection-start="2525" selection-end="2525" vertical-scroll-proportion="-14.28">
<state line="54" column="23" selection-start="2277" selection-end="2277" vertical-scroll-proportion="-12.72">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsFunction.java">
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/Namer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="23" selection-start="450" selection-end="450" vertical-scroll-proportion="0.32425067">
<folding>
<element signature="imports" expanded="true" />
</folding>
<state line="12" column="48" selection-start="297" selection-end="297" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/ast/JsNew.java">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="22" selection-start="394" selection-end="394" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ClassBodyVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="32" column="62" selection-start="1212" selection-end="1212" vertical-scroll-proportion="0.0">
<state line="117" column="0" selection-start="5468" selection-end="5468" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetQualifiedExpression.java">
<entry file="file://$PROJECT_DIR$/js/src/com/google/dart/compiler/backend/js/Cloner.java">
<provider selected="true" editor-type-id="text-editor">
<state line="10" column="103" selection-start="294" selection-end="294" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java">
<provider selected="true" editor-type-id="text-editor">
<state line="20" column="0" selection-start="515" selection-end="515" 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="26" column="30" selection-start="831" selection-end="831" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="34" column="0" selection-start="941" selection-end="941" vertical-scroll-proportion="-6.6538463">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/../../Kotlin/jet/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedFunction.java">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="0" selection-start="555" selection-end="555" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/localProperty.jet">
<provider selected="true" editor-type-id="text-editor">
<state line="0" column="0" selection-start="0" selection-end="127" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/functionUsedBeforeDeclaration.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="19" selection-start="35" selection-end="35" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test/org/jetbrains/k2js/test/FunctionTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="74" column="19" selection-start="1786" selection-end="1786" vertical-scroll-proportion="0.0">
<state line="153" column="4" selection-start="5360" selection-end="5360" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/src/org/jetbrains/k2js/translate/ExpressionVisitor.java">
<provider selected="true" editor-type-id="text-editor">
<state line="114" column="37" selection-start="4820" selection-end="4820" vertical-scroll-proportion="0.53743315">
<state line="172" column="40" selection-start="7413" selection-end="7413" vertical-scroll-proportion="0.0">
<folding>
<element signature="imports" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="jar://C:/Program Files/Java/jdk1.7.0_01/src.zip!/java/lang/Void.java">
<provider selected="true" editor-type-id="text-editor">
<state line="36" column="6" selection-start="464" selection-end="464" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/constructorWithParameter.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="6" column="14" selection-start="80" selection-end="80" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.kt">
<provider selected="true" editor-type-id="text-editor">
<state line="11" column="39" selection-start="146" selection-end="146" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/translator/test_files/test_cases/twoClassesWithProperties.js">
<provider selected="true" editor-type-id="text-editor">
<state line="22" column="0" selection-start="363" selection-end="363" vertical-scroll-proportion="0.82560706">
<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="50" column="79" selection-start="2300" selection-end="2300" 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/ClassTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="70" column="16" selection-start="2199" selection-end="2199" vertical-scroll-proportion="0.65750915">
<folding />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
@@ -12,38 +12,44 @@ import java.util.List;
*/
public class JsBlock extends JsStatement {
private final List<JsStatement> stmts = new ArrayList<JsStatement>();
private final List<JsStatement> stmts = new ArrayList<JsStatement>();
public JsBlock() {
}
public JsBlock(JsStatement stmt) {
stmts.add(stmt);
}
public List<JsStatement> getStatements() {
return stmts;
}
public void addStatement(JsStatement statement) {
assert statement != null;
stmts.add(statement);
}
public boolean isGlobalBlock() {
return false;
}
@Override
public void traverse(JsVisitor v, JsContext ctx) {
if (v.visit(this, ctx)) {
v.acceptWithInsertRemove(stmts);
public JsBlock() {
}
public JsBlock(JsStatement stmt) {
stmts.add(stmt);
}
public List<JsStatement> getStatements() {
return stmts;
}
public void addStatement(JsStatement statement) {
assert statement != null;
stmts.add(statement);
}
public boolean isGlobalBlock() {
return false;
}
@Override
public void traverse(JsVisitor v, JsContext ctx) {
if (v.visit(this, ctx)) {
v.acceptWithInsertRemove(stmts);
}
v.endVisit(this, ctx);
}
@Override
public NodeKind getKind() {
return NodeKind.BLOCK;
}
public void setStatements(List<JsStatement> statements) {
assert this.stmts.isEmpty() : "Already contains statements.";
this.stmts.addAll(statements);
}
v.endVisit(this, ctx);
}
@Override
public NodeKind getKind() {
return NodeKind.BLOCK;
}
}
@@ -59,4 +59,10 @@ public final class JsInvocation extends JsExpression implements HasArguments {
public NodeKind getKind() {
return NodeKind.INVOKE;
}
// Pavel Talanov
public void setArguments(List<JsExpression> arguments) {
assert this.args.isEmpty() : "Arguments already set.";
this.args.addAll(arguments);
}
}
@@ -1,5 +1,6 @@
package org.jetbrains.k2js.declarations;
import com.google.dart.compiler.backend.js.ast.JsName;
import com.google.dart.compiler.backend.js.ast.JsScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
@@ -13,6 +14,8 @@ import java.util.Map;
public final class DeclarationExtractor {
private final Map<DeclarationDescriptor, JsScope> descriptorToScopeMap
= new HashMap<DeclarationDescriptor, JsScope>();
private final Map<DeclarationDescriptor, JsName> descriptorToNameMap
= new HashMap<DeclarationDescriptor, JsName>();
public DeclarationExtractor() {
@@ -30,7 +33,18 @@ public final class DeclarationExtractor {
return scope;
}
/*package*/ void put(@NotNull DeclarationDescriptor descriptor, @NotNull JsScope scope) {
@NotNull
public JsName getName(@NotNull DeclarationDescriptor descriptor) {
JsName name = descriptorToNameMap.get(descriptor);
assert name != null : "Unknown declaration";
return name;
}
/*package*/ void putScope(@NotNull DeclarationDescriptor descriptor, @NotNull JsScope scope) {
descriptorToScopeMap.put(descriptor, scope);
}
/*package*/ void putName(@NotNull DeclarationDescriptor descriptor, @NotNull JsName name) {
descriptorToNameMap.put(descriptor, name);
}
}
@@ -1,8 +1,6 @@
package org.jetbrains.k2js.declarations;
import com.google.dart.compiler.backend.js.ast.JsName;
import com.google.dart.compiler.backend.js.ast.JsScope;
import com.intellij.codeInspection.ex.Descriptor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.k2js.translate.Namer;
@@ -20,11 +18,11 @@ public final class ExtractionVisitor extends DeclarationDescriptorVisitor<Void,
@Override
public Void visitClassDescriptor(ClassDescriptor descriptor, JsScope enclosingScope) {
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @NotNull JsScope enclosingScope) {
String className = descriptor.getName();
enclosingScope.declareName(className);
JsScope classScope = new JsScope(enclosingScope, "Scope for class " + className);
extractor.put(descriptor, classScope);
extractor.putName(descriptor, enclosingScope.declareName(className));
JsScope classScope = new JsScope(enclosingScope, "class " + className);
extractor.putScope(descriptor, classScope);
for (DeclarationDescriptor memberDescriptor :
descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
memberDescriptor.accept(this, classScope);
@@ -33,28 +31,50 @@ public final class ExtractionVisitor extends DeclarationDescriptorVisitor<Void,
}
@Override
public Void visitFunctionDescriptor(FunctionDescriptor descriptor, JsScope enclosingScope) {
public Void visitFunctionDescriptor(@NotNull FunctionDescriptor descriptor, @NotNull JsScope enclosingScope) {
String functionName = descriptor.getName();
enclosingScope.declareName(functionName);
JsScope functionScope = new JsScope(enclosingScope, "Scope for function " + functionName);
extractor.put(descriptor, functionScope);
extractor.putName(descriptor, enclosingScope.declareName(functionName));
JsScope functionScope = new JsScope(enclosingScope, "function " + functionName);
extractor.putScope(descriptor, functionScope);
return null;
}
@Override
public Void visitPropertyDescriptor(PropertyDescriptor descriptor, JsScope enclosingScope) {
String propertyName = descriptor.getName();
enclosingScope.declareName(Namer.getNameForSetter(propertyName));
enclosingScope.declareName(Namer.getNameForGetter(propertyName));
public Void visitPropertyDescriptor(@NotNull PropertyDescriptor descriptor, @NotNull JsScope enclosingScope) {
PropertySetterDescriptor setter = descriptor.getSetter();
if (setter != null) {
setter.accept(this, enclosingScope);
}
PropertyGetterDescriptor getter = descriptor.getGetter();
if (getter != null) {
getter.accept(this, enclosingScope);
}
// We do not put this name into extractor because it can't be referenced from outside
// thus it doesn't have a descriptor.
enclosingScope.declareName(Namer.getBackingFieldNameForProperty(descriptor.getName()));
return null;
}
@Override
public Void visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, JsScope enclosingScope) {
String getterName = Namer.getNameForGetter(descriptor.getCorrespondingProperty().getName());
extractor.putName(descriptor, enclosingScope.declareName(getterName));
return null;
}
@Override
public Void visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, JsScope enclosingScope) {
String setterName = Namer.getNameForSetter(descriptor.getCorrespondingProperty().getName());
extractor.putName(descriptor, enclosingScope.declareName(setterName));
return null;
}
@Override
public Void visitNamespaceDescriptor(NamespaceDescriptor descriptor, JsScope enclosingScope) {
String namespaceName = descriptor.getName();
enclosingScope.declareName(namespaceName);
JsScope namespaceScope = new JsScope(enclosingScope, "Scope for namespace " + namespaceName);
extractor.put(descriptor, namespaceScope);
extractor.putName(descriptor, enclosingScope.declareName(namespaceName));
JsScope namespaceScope = new JsScope(enclosingScope, "namespace " + namespaceName);
extractor.putScope(descriptor, namespaceScope);
for (DeclarationDescriptor memberDescriptor :
descriptor.getMemberScope().getAllDescriptors()) {
memberDescriptor.accept(this, namespaceScope);
@@ -75,11 +75,13 @@ public final class ClassBodyVisitor extends TranslatorVisitor<List<JsPropertyIni
private JsFunction generateDefaultGetterFunction(@NotNull JetProperty expression,
@NotNull TranslationContext context) {
JsNameRef backingFieldRef = declareOrGetBackingFieldName(getPropertyName(expression), context).makeRef();
backingFieldRef.setQualifier(new JsThisRef());
JsReturn returnExpression = new JsReturn(backingFieldRef);
return AstUtil.newFunction
(context.enclosingScope(), null, new ArrayList<JsParameter>(), AstUtil.convertToBlock(returnExpression));
}
//TODO rewrite
@NotNull
private JsName declareOrGetBackingFieldName(@NotNull String propertyName, @NotNull TranslationContext context) {
String backingFieldName = Namer.getBackingFieldNameForProperty(propertyName);
@@ -113,6 +115,7 @@ public final class ClassBodyVisitor extends TranslatorVisitor<List<JsPropertyIni
private JsBinaryOperation assignmentToBackingFieldFromDefaultParameter
(@NotNull JetProperty expression, @NotNull TranslationContext context, @NotNull JsParameter defaultParameter) {
JsNameRef backingFieldRef = declareOrGetBackingFieldName(getPropertyName(expression), context).makeRef();
backingFieldRef.setQualifier(new JsThisRef());
JsBinaryOperation assignExpression = new JsBinaryOperation(JsBinaryOperator.ASG);
assignExpression.setArg1(backingFieldRef);
assignExpression.setArg2(defaultParameter.getName().makeRef());
@@ -2,12 +2,16 @@ package org.jetbrains.k2js.translate;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.util.AstUtil;
import org.apache.velocity.runtime.directive.Block;
import org.eclipse.jdt.core.dom.Initializer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetClass;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.types.JetType;
import sun.org.mozilla.javascript.internal.Function;
import java.util.ArrayList;
import java.util.List;
@@ -59,8 +63,16 @@ public final class ClassTranslator extends AbstractTranslator {
return initializer;
}
private JsFunction generateInitializeMethodBody(JetClass classDeclaration) {
return AstUtil.newFunction(scope(), null, null, new JsBlock());
// Note: we explicitly create JsFunction here because initialize function itself has no descriptor and
// is never referenced explicitly.
@NotNull
private JsFunction generateInitializeMethodBody(@NotNull JetClass classDeclaration) {
InitializerVisitor initializerVisitor = new InitializerVisitor();
List<JsStatement> initializerStatements = classDeclaration.accept(initializerVisitor,
translationContext().newClass(classDeclaration));
JsBlock block = new JsBlock();
block.setStatements(initializerStatements);
return AstUtil.newFunction(translationContext().enclosingScope(), null, null, block);
}
@@ -9,7 +9,7 @@ import org.jetbrains.jet.lang.psi.JetExpression;
*/
public final class ExpressionTranslator extends AbstractTranslator {
final private ExpressionVisitor visitor = new ExpressionVisitor();
final private ExpressionVisitor visitor = new ExpressionVisitor(translationContext());
public ExpressionTranslator(@NotNull TranslationContext context) {
super(context);
@@ -5,7 +5,6 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import com.google.dart.compiler.backend.js.ast.*;
import com.google.dart.compiler.backend.js.ast.JsReturn;
import com.google.dart.compiler.util.AstUtil;
import com.sun.xml.internal.bind.v2.runtime.reflect.opt.Const;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
@@ -17,6 +16,7 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
import org.jetbrains.jet.lexer.JetToken;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -24,6 +24,8 @@ import java.util.List;
*/
public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
public ExpressionVisitor(TranslationContext context) {
}
//TODO method too long
@Override
@@ -87,13 +89,39 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitBinaryExpression(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) {
JsInvocation setterCall = translateAsSetterCall(expression, context);
if (setterCall != null) {
return setterCall;
}
return translateAsBinaryOperation(expression, context);
}
@Nullable
public JsInvocation translateAsSetterCall(@NotNull JetBinaryExpression expression,
@NotNull TranslationContext context) {
JetToken jetOperationToken = (JetToken)expression.getOperationToken();
if (!OperationTranslator.isAssignment(jetOperationToken)) {
return null;
}
PropertyAccessTranslator translator = new PropertyAccessTranslator(context);
JetExpression leftExpression = expression.getLeft();
JsInvocation setterCall = translator.resolveAsPropertySet(leftExpression);
if (setterCall == null) {
return null;
}
JetExpression rightExpression = expression.getRight();
assert rightExpression != null : "Selector should not be null";
JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context));
setterCall.setArguments(Arrays.asList(right));
return setterCall;
}
@NotNull
private JsNode translateAsBinaryOperation(@NotNull JetBinaryExpression expression, @NotNull TranslationContext context) {
JsExpression left = AstUtil.convertToExpression(expression.getLeft().accept(this, context));
JetExpression rightExpression = expression.getRight();
if (rightExpression == null) {
throw new AssertionError("BinaryExpression with no right parameter");
}
assert rightExpression != null : "Selector should not be null";
JsExpression right = AstUtil.convertToExpression(rightExpression.accept(this, context));
//TODO cast dangerous?
JetToken jetOperationToken = (JetToken)expression.getOperationToken();
return new JsBinaryOperation(OperationTranslator.getBinaryOperator(jetOperationToken), left, right);
}
@@ -281,6 +309,25 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
@NotNull
public JsNode visitDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) {
JsInvocation getterCall = translateAsGetterCall(expression, context);
if (getterCall != null) {
return getterCall;
}
return translateAsQualifiedExpression(expression, context);
}
@Nullable
private JsInvocation translateAsGetterCall(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) {
JsInvocation result;
PropertyAccessTranslator translator = new PropertyAccessTranslator(context);
result = translator.resolveAsPropertyGet(expression);
return result;
}
@NotNull
private JsNode translateAsQualifiedExpression(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) {
JsExpression receiver = AstUtil.convertToExpression(expression.getReceiverExpression().accept(this, context));
JetExpression jetSelector = expression.getSelectorExpression();
assert jetSelector != null : "Selector should not be null in dot qualified expression.";
@@ -288,18 +335,27 @@ public final class ExpressionVisitor extends TranslatorVisitor<JsNode> {
assert (selector instanceof JsNameRef || selector instanceof JsInvocation)
: "Selector should be a name reference or a method invocation in dot qualified expression.";
if (selector instanceof JsInvocation) {
JsInvocation result = (JsInvocation)selector;
JsExpression qualifier = result.getQualifier();
JsNameRef nameRef = (JsNameRef)qualifier;
nameRef.setQualifier(receiver);
return result;
return translateAsQualifiedInvocation(receiver, (JsInvocation) selector);
} else {
JsNameRef result = (JsNameRef)selector;
result.setQualifier(receiver);
return result;
return translateAsQualifiedNameReference(receiver, (JsNameRef) selector);
}
}
@NotNull
private JsNode translateAsQualifiedNameReference(@NotNull JsExpression receiver, @NotNull JsNameRef selector) {
JsNameRef result = (JsNameRef)selector;
result.setQualifier(receiver);
return result;
}
@NotNull
private JsNode translateAsQualifiedInvocation(@NotNull JsExpression receiver, @NotNull JsInvocation selector) {
JsInvocation result = (JsInvocation)selector;
JsExpression qualifier = result.getQualifier();
JsNameRef nameRef = (JsNameRef)qualifier;
nameRef.setQualifier(receiver);
return result;
}
}
@@ -0,0 +1,69 @@
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.descriptors.DeclarationDescriptorVisitor;
import org.jetbrains.jet.lang.psi.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author Talanov Pavel
*
* This visitor collects all initializers from a given class in a list of statements.
* Note: we do use this to preserve the order in which initializers are executed.
*/
public class InitializerVisitor extends TranslatorVisitor<List<JsStatement>> {
@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;
}
@Override
@NotNull
public List<JsStatement> visitProperty(@NotNull JetProperty expression, @NotNull TranslationContext context) {
JetExpression initializer = expression.getInitializer();
if (initializer == null) {
return new ArrayList<JsStatement>();
}
ExpressionTranslator translator = new ExpressionTranslator(context);
JsExpression initExpression = AstUtil.convertToExpression(translator.translate(initializer));
return Arrays.asList(assignmentToBackingField(expression, initExpression, context));
}
@NotNull
JsStatement assignmentToBackingField(@NotNull JetProperty property, @NotNull JsExpression initExpression,
@NotNull TranslationContext context) {
JsName backingFieldName = context.classScope()
.findExistingName(Namer.getBackingFieldNameForProperty(property.getName()));
assert backingFieldName != null : "Class scope should contain backing field names";
JsNameRef backingFieldRef = backingFieldName.makeRef();
backingFieldRef.setQualifier(new JsThisRef());
return AstUtil.convertToStatement(AstUtil.newAssignment(backingFieldRef, initExpression));
}
//TODO : implement
@Override
@NotNull
public List<JsStatement> visitAnonymousInitializer(@NotNull JetClassInitializer initializer,
@NotNull TranslationContext context) {
return new ArrayList<JsStatement>();
}
@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>();
}
}
@@ -20,9 +20,9 @@ public final class Namer {
public static final String INITIALIZE_METHOD_NAME = "initialize";
private static final String CLASS_OBJECT_NAME = "Class";
//private static final String CLASS_CREATE_METHOD_NAME = "create";
private static final String SETTER_PREFIX = "_set_";
private static final String GETTER_PREFIX = "_get_";
private static final String BACKING_FIELD_PREFIX = "_$_";
private static final String SETTER_PREFIX = "set_";
private static final String GETTER_PREFIX = "get_";
private static final String BACKING_FIELD_PREFIX = "_";
// public static final String DEFAULT_SETTER_PARAM_NAME = "val";
public static String getClassObjectName() {
@@ -27,6 +27,7 @@ public final class OperationTranslator {
map.put(JetTokens.LT, JsBinaryOperator.LT);
map.put(JetTokens.LTEQ, JsBinaryOperator.LTE);
map.put(JetTokens.EQEQ, JsBinaryOperator.EQ);
map.put(JetTokens.ANDAND, JsBinaryOperator.AND);
}
public static JsBinaryOperator getBinaryOperator(JetToken token) {
@@ -38,5 +39,8 @@ public final class OperationTranslator {
throw new AssertionError("Invalid map: should contain token: " + token.toString());
}
public static boolean isAssignment(JetToken token) {
return (token == JetTokens.EQ);
}
}
@@ -0,0 +1,105 @@
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.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
/**
* @author Talanov Pavel
*/
//TODO ask for code review. Class has messy code.
public final class PropertyAccessTranslator extends AbstractTranslator {
public PropertyAccessTranslator(@NotNull TranslationContext context) {
super(context);
}
@Nullable
public JsInvocation resolveAsPropertyGet(@NotNull JetDotQualifiedExpression expression) {
if (!(expression instanceof JetDotQualifiedExpression)) {
return null;
}
JetDotQualifiedExpression dotQualifiedExpression = (JetDotQualifiedExpression)expression;
JetExpression selectorExpression = dotQualifiedExpression.getSelectorExpression();
assert selectorExpression != null : "Selector should not be null.";
JsName getterName = getPropertyGetterName(selectorExpression);
if (getterName == null) {
return null;
}
return translateReceiverAndReturnAccessorInvocation(dotQualifiedExpression, getterName);
}
@NotNull
private JsInvocation translateReceiverAndReturnAccessorInvocation
(@NotNull JetDotQualifiedExpression dotQualifiedExpression, @NotNull JsName accessorName) {
ExpressionTranslator translator = new ExpressionTranslator(translationContext());
JsNode node = translator.translate(dotQualifiedExpression.getReceiverExpression());
JsNameRef result = accessorName.makeRef();
result.setQualifier(AstUtil.convertToExpression(node));
return AstUtil.newInvocation(result);
}
@Nullable
public JsInvocation resolveAsPropertySet(@NotNull JetExpression expression) {
if (!(expression instanceof JetDotQualifiedExpression)) {
return null;
}
JetDotQualifiedExpression dotQualifiedExpression = (JetDotQualifiedExpression)expression;
JetExpression selectorExpression = dotQualifiedExpression.getSelectorExpression();
assert selectorExpression != null : "Selector should not be null.";
JsName getterName = getPropertySetterName(selectorExpression);
if (getterName == null) {
return null;
}
return translateReceiverAndReturnAccessorInvocation(dotQualifiedExpression, getterName);
}
@Nullable
public JsName getPropertyGetterName(@NotNull JetExpression expression) {
PropertyDescriptor property = getPropertyDescriptor(expression);
if (property == null) {
return null;
}
PropertyGetterDescriptor getter = property.getGetter();
if (getter == null) {
return null;
}
return translationContext().declarations().getName(getter);
}
@Nullable
public JsName getPropertySetterName(@NotNull JetExpression expression) {
PropertyDescriptor property = getPropertyDescriptor(expression);
if (property == null) {
return null;
}
PropertySetterDescriptor setter = property.getSetter();
if (setter == null) {
return null;
}
return translationContext().declarations().getName(setter);
}
@Nullable
private PropertyDescriptor getPropertyDescriptor(@NotNull JetExpression expression) {
ResolvedCall<?> resolvedCall =
translationContext().bindingContext().get(BindingContext.RESOLVED_CALL, expression);
if (resolvedCall != null) {
DeclarationDescriptor descriptor = resolvedCall.getCandidateDescriptor();
if (descriptor instanceof PropertyDescriptor) {
return (PropertyDescriptor)descriptor;
}
}
return null;
}
}
@@ -152,4 +152,9 @@ public final class TranslationContext {
assert descriptor != null : "Element should have a descriptor";
return getScopeForDescriptor(descriptor);
}
@NotNull
public DeclarationExtractor declarations() {
return extractor;
}
}
@@ -57,4 +57,19 @@ public final class ClassTest extends TranslationTest {
testFooBoxIsTrue("accessToInstanceProperty.kt");
}
@Test
public void twoClassesWithProperties() throws Exception {
testFooBoxIsTrue("twoClassesWithProperties.kt");
}
@Test
public void setter() throws Exception {
performTest("setter.kt", "foo", "f", 99.0);
}
@Test
public void constructorWithParameter() throws Exception {
testFooBoxIsTrue("constructorWithParameter.kt");
}
}
@@ -1,10 +1,11 @@
namespace foo
class Test() {
val a : Int = 1
var a : Int = 100
}
fun box() : Boolean {
var test = Test()
return (test.a == 1)
test.a = 1
return (1 == test.a)
}
@@ -0,0 +1,9 @@
namespace foo
class Test(var a : Int) {
}
fun box() : Boolean {
var test = Test(1)
return (test.a == 1)
}
@@ -0,0 +1,12 @@
namespace foo
class Test() {
var a : Int = 1
}
fun f() : Int {
var a = Test()
var b = Test()
b.a = 100
return (b.a - a.a)
}
@@ -0,0 +1,13 @@
namespace foo
class A() {
val a : Int = 1
}
class B() {
val b : Int = 2
}
fun box() : Boolean {
return ((A().a == 1) && (B().b == 2);
}