diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/K2JSTranslator.java index c9278369c96..06c2de8deb2 100644 --- a/translator/src/org/jetbrains/k2js/K2JSTranslator.java +++ b/translator/src/org/jetbrains/k2js/K2JSTranslator.java @@ -40,7 +40,7 @@ public final class K2JSTranslator { public K2JSTranslator() { } - public void translate(String inputFile, String outputFile) throws Exception { + public void translateFile(String inputFile, String outputFile) throws Exception { try { diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index 903b86b9ec1..393efa9faef 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -73,19 +73,21 @@ public final class StandardClasses { ClassDescriptor iteratorClass = (ClassDescriptor) standardLibrary.getLibraryScope().getClassifier("Iterator"); assert iteratorClass != null; - standardClasses.declareStandardTopLevelObject(iteratorClass, "ArrayIterator"); + standardClasses.declareTopLevel(iteratorClass, "ArrayIterator"); declareMethods(standardClasses, getFQName(iteratorClass), "next", "hasNext"); } private static void declareArray(@NotNull StandardClasses standardClasses, @NotNull JetStandardLibrary standardLibrary) { ClassDescriptor arrayClass = standardLibrary.getArray(); - standardClasses.declareStandardTopLevelObject(arrayClass, "Array"); + standardClasses.declareTopLevel(arrayClass, "Array"); FunctionDescriptor nullConstructorFunction = getFunctionByName(standardLibrary.getLibraryScope(), "Array"); - standardClasses.declareStandardTopLevelObject(nullConstructorFunction, "array"); + standardClasses.declareTopLevel(nullConstructorFunction, "array"); PropertyDescriptor sizeProperty = getPropertyByName(arrayClass.getDefaultType().getMemberScope(), "size"); - standardClasses.declareStandardInnerDeclaration(sizeProperty, "size"); + standardClasses.declareInner(sizeProperty, "size"); + PropertyDescriptor indices = getPropertyByName(arrayClass.getDefaultType().getMemberScope(), "indices"); + standardClasses.declareInner(indices, "indices"); } @@ -120,8 +122,8 @@ public final class StandardClasses { this.kotlinScope = kotlinScope; } - private void declareStandardTopLevelObject(@NotNull DeclarationDescriptor descriptor, - @NotNull String kotlinLibName) { + private void declareTopLevel(@NotNull DeclarationDescriptor descriptor, + @NotNull String kotlinLibName) { declareStandardTopLevelObject(DescriptorUtils.getFQName(descriptor), kotlinLibName); } @@ -130,8 +132,8 @@ public final class StandardClasses { scopeMap.put(fullQualifiedName, new JsScope(kotlinScope, "standard object " + kotlinLibName)); } - private void declareStandardInnerDeclaration(@NotNull DeclarationDescriptor descriptor, - @NotNull String kotlinLibName) { + private void declareInner(@NotNull DeclarationDescriptor descriptor, + @NotNull String kotlinLibName) { String containingFQName = DescriptorUtils.getFQName(getContainingDeclaration(descriptor)); declareStandardInnerDeclaration(containingFQName, descriptor.getName(), kotlinLibName); } diff --git a/translator/test/org/jetbrains/k2js/test/SystemTest.java b/translator/test/org/jetbrains/k2js/test/SystemTest.java index 6e910d110b4..ae227c9b1bf 100644 --- a/translator/test/org/jetbrains/k2js/test/SystemTest.java +++ b/translator/test/org/jetbrains/k2js/test/SystemTest.java @@ -58,6 +58,23 @@ public final class SystemTest extends JavaClassesTest { "Out: array has only 3 elements. x = 4\n" + "Yes: array contains aaa\n" + "No: array doesn't contains ddd\n", "4"); + + checkOutput("ranges.kt", " 1 2 3 4 5\n" + + "Out: array has only 3 elements. x = 10\n" + + "Yes: array contains aaa\n" + + "No: array doesn't contains ddd\n", "10"); + } + + @Test + public void forLoop() throws Exception { + checkOutput("forLoop.kt", "a\n" + + "b\n" + + "c\n" + + "\n" + + "a\n" + + "b\n" + + "c\n", "a", "b", "c"); + checkOutput("forLoop.kt", "123\n\n123\n", "123"); } } diff --git a/translator/test/org/jetbrains/k2js/test/TranslationTest.java b/translator/test/org/jetbrains/k2js/test/TranslationTest.java index 93807dd59f0..c6fb4f5d4aa 100644 --- a/translator/test/org/jetbrains/k2js/test/TranslationTest.java +++ b/translator/test/org/jetbrains/k2js/test/TranslationTest.java @@ -57,7 +57,7 @@ public abstract class TranslationTest { } protected void translateFile(String filename) throws Exception { - (new K2JSTranslator()).translate(getInputFilePath(filename), getOutputFilePath(filename)); + (new K2JSTranslator()).translateFile(getInputFilePath(filename), getOutputFilePath(filename)); } protected List generateFilenameList(String inputFile) { diff --git a/translator/testFiles/java/system/cases/forLoop.kt b/translator/testFiles/java/system/cases/forLoop.kt new file mode 100644 index 00000000000..5c8cf6ce528 --- /dev/null +++ b/translator/testFiles/java/system/cases/forLoop.kt @@ -0,0 +1,9 @@ +fun main(args : Array) { + for (arg in args) + System.out?.println(arg) + + // or + System.out?.println() + for (i in args.indices) + System.out?.println(args[i]) +} diff --git a/translator/testFiles/kotlin_lib.js b/translator/testFiles/kotlin_lib.js index be3a11ca5d4..95c5532e941 100644 --- a/translator/testFiles/kotlin_lib.js +++ b/translator/testFiles/kotlin_lib.js @@ -493,6 +493,9 @@ Kotlin.Array = Class.create({ }, iterator:function () { return new Kotlin.ArrayIterator(this); + }, + indices:function() { + return new Kotlin.NumberRange(0, this.size(), false); } });