diff --git a/js/js.tests/test/org/jetbrains/k2js/test/TranslationTest.java b/js/js.tests/test/org/jetbrains/k2js/test/TranslationTest.java index dcb12157e3d..19e30de2854 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/TranslationTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/TranslationTest.java @@ -51,11 +51,11 @@ public abstract class TranslationTest extends BaseTest { public void translateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception { - traslateFiles(Collections.singletonList(inputFile), outputFile); + translateFiles(Collections.singletonList(inputFile), outputFile); } - public void traslateFiles(@NotNull List inputFiles, - @NotNull String outputFile) throws Exception { + public void translateFiles(@NotNull List inputFiles, + @NotNull String outputFile) throws Exception { K2JSTranslator translator = new K2JSTranslator(new TestConfig(getProject())); List psiFiles = createPsiFileList(inputFiles, getProject()); JsProgram program = translator.generateProgram(psiFiles); @@ -158,8 +158,8 @@ public abstract class TranslationTest extends BaseTest { fullFilePaths.add(getInputFilePath(dirName) + "/" + fileName); } assert dir.isDirectory(); - traslateFiles(fullFilePaths, - getOutputFilePath(dirName + ".kt")); + translateFiles(fullFilePaths, + getOutputFilePath(dirName + ".kt")); } protected List generateFilenameList(String inputFile) { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/RangeForTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/RangeForTranslator.java index 36290b119a6..8d82e1393d0 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/RangeForTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/foreach/RangeForTranslator.java @@ -38,7 +38,6 @@ import static org.jetbrains.k2js.translate.utils.PsiUtils.getLoopRange; */ public final class RangeForTranslator extends ForTranslator { - //TODO: inspection @NotNull public static JsStatement doTranslate(@NotNull JetForExpression expression, @NotNull TranslationContext context) { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java index 44ba8651e96..13b6c089d34 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java @@ -19,6 +19,7 @@ package org.jetbrains.k2js.translate.initializer; import com.google.dart.compiler.backend.js.ast.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; import org.jetbrains.jet.lang.psi.JetClassOrObject; @@ -27,15 +28,15 @@ import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall; import org.jetbrains.jet.lang.psi.JetParameter; import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.TranslationContext; -import org.jetbrains.k2js.translate.utils.PsiUtils; -import org.jetbrains.k2js.translate.utils.TranslationUtils; import java.util.ArrayList; import java.util.List; import static org.jetbrains.k2js.translate.utils.BindingUtils.*; import static org.jetbrains.k2js.translate.utils.JsAstUtils.*; +import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters; import static org.jetbrains.k2js.translate.utils.TranslationUtils.assignmentToBackingField; +import static org.jetbrains.k2js.translate.utils.TranslationUtils.translateArgumentList; /** * @author Pavel Talanov @@ -57,9 +58,10 @@ public final class ClassInitializerTranslator extends AbstractInitializerTransla @Override @NotNull protected JsFunction generateInitializerFunction() { - //TODO: look for duplication of this code - JsFunction result = new JsFunction(initializerMethodScope.jsScope()); - //NOTE: that while we translateAsLocalNameReference constructor parameters we also add property initializer statements + //TODO: it's inconsistent that we scope for class and function for constructor, currently have problems implementing better way + ConstructorDescriptor primaryConstructor = getConstructor(); + JsFunction result = context().getFunctionObject(primaryConstructor); + //NOTE: while we translate constructor parameters we also add property initializer statements // for properties declared as constructor parameters setParameters(result, translatePrimaryConstructorParameters()); mayBeAddCallToSuperMethod(); @@ -67,6 +69,13 @@ public final class ClassInitializerTranslator extends AbstractInitializerTransla return result; } + private ConstructorDescriptor getConstructor() { + ConstructorDescriptor primaryConstructor = + getClassDescriptor(context().bindingContext(), classDeclaration).getUnsubstitutedPrimaryConstructor(); + assert primaryConstructor != null : "Traits do not have initialize methods."; + return primaryConstructor; + } + @NotNull private JsBlock generateInitializerMethodBody() { initializerStatements.addAll(translateClassInitializers(classDeclaration)); @@ -91,8 +100,7 @@ public final class ClassInitializerTranslator extends AbstractInitializerTransla @NotNull private List translateArguments(@NotNull JetDelegatorToSuperCall superCall) { - //TODO: use the same mechanism as in call translator - return TranslationUtils.translateArgumentList(context(), superCall.getValueArguments()); + return translateArgumentList(context(), superCall.getValueArguments()); } @Nullable @@ -103,13 +111,12 @@ public final class ClassInitializerTranslator extends AbstractInitializerTransla result = (JetDelegatorToSuperCall) specifier; } } - //assert result != null : "Class must call ancestor's constructor."; return result; } @NotNull List translatePrimaryConstructorParameters() { - List parameterList = PsiUtils.getPrimaryConstructorParameters(classDeclaration); + List parameterList = getPrimaryConstructorParameters(classDeclaration); List result = new ArrayList(); for (JetParameter jetParameter : parameterList) { result.add(translateParameter(jetParameter)); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java index b0732d319f2..2bb0b7fdf3b 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/NamespaceInitializerTranslator.java @@ -40,6 +40,7 @@ public final class NamespaceInitializerTranslator extends AbstractInitializerTra @Override @NotNull protected JsFunction generateInitializerFunction() { + //NOTE: namespace has no constructor JsFunction result = new JsFunction(initializerMethodScope.jsScope()); result.setBody(newBlock(translateNamespaceInitializers(namespace))); return result; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/array/BuiltInPropertyIntrinsic.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/array/BuiltInPropertyIntrinsic.java index 10445c1921c..e0e601c4000 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/array/BuiltInPropertyIntrinsic.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/array/BuiltInPropertyIntrinsic.java @@ -30,7 +30,6 @@ public final class BuiltInPropertyIntrinsic implements Intrinsic { @NotNull TranslationContext context) { assert receiver != null; assert arguments.isEmpty() : "Length expression must have zero arguments."; - //TODO: provide better way JsNameRef lengthProperty = AstUtil.newQualifiedNameRef(propertyName); setQualifier(lengthProperty, receiver); return lengthProperty; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java index 4bb5777266d..32b5b23f564 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/primitive/PrimitiveRangeToIntrinsic.java @@ -52,8 +52,7 @@ public final class PrimitiveRangeToIntrinsic implements Intrinsic { JsBinaryOperation rangeSize = sum(subtract(rangeEnd, rangeStart), context.program().getNumberLiteral(1)); //TODO: provide a way not to hard code this value - JsNew numberRangeConstructorInvocation - = new JsNew(AstUtil.newQualifiedNameRef("Kotlin.NumberRange")); + JsNew numberRangeConstructorInvocation = new JsNew(AstUtil.newQualifiedNameRef("Kotlin.NumberRange")); //TODO: add tests and correct expression for reversed ranges. JsBooleanLiteral isRangeReversed = context.program().getFalseLiteral(); setArguments(numberRangeConstructorInvocation, rangeStart, rangeSize, isRangeReversed); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java index 985d5b6da16..b798908f329 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/BindingUtils.java @@ -77,13 +77,6 @@ public final class BindingUtils { return getDescriptorForExpression(context, declaration, FunctionDescriptor.class); } - //TODO: - @NotNull - public static PropertyAccessorDescriptor getPropertyAccessorDescriptor(@NotNull BindingContext context, - @NotNull JetPropertyAccessor declaration) { - return getDescriptorForExpression(context, declaration, PropertyAccessorDescriptor.class); - } - @NotNull public static PropertyDescriptor getPropertyDescriptor(@NotNull BindingContext context, @NotNull JetProperty declaration) {