From 6ee95cf13a4755c3e8f32af58f45c81940cd014a Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Fri, 25 Nov 2011 15:23:57 +0400 Subject: [PATCH] Added properties as constructor parameters support(Not initialized yet). --- .idea/workspace.xml | 190 ++++++++++-------- .../declaration/ClassTranslator.java | 22 +- .../constructorWithPropertiesAsParameters.kt | 4 +- 3 files changed, 127 insertions(+), 89 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index c6fbc6658eb..c0b596e7774 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -8,31 +8,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -186,15 +164,6 @@ - - - - - - - - - @@ -204,19 +173,10 @@ - - - - - - - - - - + @@ -225,19 +185,39 @@ - + - + + + + + + + + + + + + + + + + + + + + + - + @@ -300,7 +280,6 @@ @@ -451,6 +431,46 @@ - + @@ -924,17 +944,17 @@ - + - + - + @@ -978,7 +998,7 @@ @@ -1025,13 +1045,6 @@ - - - - - - - @@ -1039,13 +1052,6 @@ - - - - - - - @@ -1071,15 +1077,19 @@ - - + + + + - - + + + + @@ -1118,16 +1128,9 @@ - - - - - - - - + @@ -1135,9 +1138,32 @@ + + + + + + + + + + + + + + + + - + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index 1e7f8e38de0..91fe16ca692 100644 --- a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -9,7 +9,9 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassKind; +import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.JetClass; +import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.k2js.translate.*; import java.util.ArrayList; @@ -114,13 +116,21 @@ public final class ClassTranslator extends AbstractTranslator { if (!classDeclaration.isTrait()) { propertyList.add(Translation.generateClassInitializerMethod(classDeclaration, context())); } - // propertyList.addAll(translatePropertiesAsConstructorParameters()); + propertyList.addAll(translatePropertiesAsConstructorParameters()); propertyList.addAll(declarationBodyVisitor.traverseClass(classDeclaration, context())); return new JsObjectLiteral(propertyList); } -// -// @NotNull -// private List translatePropertiesAsConstructorParameters() { -// List -// } + + @NotNull + private List translatePropertiesAsConstructorParameters() { + List result = new ArrayList(); + for (JetParameter parameter : classDeclaration.getPrimaryConstructorParameters()) { + PropertyDescriptor descriptor = + BindingUtils.getPropertyDescriptorForConstructorParameter(context().bindingContext(), parameter); + if (descriptor != null) { + result.addAll(PropertyTranslator.translateAccessors(descriptor, context())); + } + } + return result; + } } diff --git a/translator/testFiles/class/cases/constructorWithPropertiesAsParameters.kt b/translator/testFiles/class/cases/constructorWithPropertiesAsParameters.kt index 0a749b07e8c..f6c9c831b6b 100644 --- a/translator/testFiles/class/cases/constructorWithPropertiesAsParameters.kt +++ b/translator/testFiles/class/cases/constructorWithPropertiesAsParameters.kt @@ -6,5 +6,7 @@ class A(var b : Int, var a : String) { fun box() : Boolean { val c = A(1, "1") - return (c.b == 1 && c.a == "1") + c.b = 2 + c.a = "2" + return (c.b == 2 && c.a == "2") } \ No newline at end of file