diff --git a/build.xml b/build.xml index 51c414094ed..b0d3e9ae0f9 100644 --- a/build.xml +++ b/build.xml @@ -224,26 +224,7 @@ - - - - - - - - - - - - - - - - - - - - + diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java index 31ce0829fb6..a33314da669 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompiler.java @@ -150,7 +150,10 @@ public class K2JSCompiler extends CLICompiler { @NotNull private static Config getConfig(@NotNull K2JSCompilerArguments arguments, @NotNull Project project) { - EcmaVersion ecmaVersion = EcmaVersion.fromString(arguments.target); + if (arguments.target != null) { + assert arguments.target == "v5" : "Unsupported ECMA version: " + arguments.target; + } + EcmaVersion ecmaVersion = EcmaVersion.defaultVersion(); String moduleId = FileUtil.getNameWithoutExtension(new File(arguments.outputFile)); if (arguments.libraryFiles != null) { return new LibrarySourcesConfig(project, moduleId, Arrays.asList(arguments.libraryFiles), ecmaVersion, arguments.sourcemap); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java index d6b7bc9ce8a..0e728168598 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java @@ -40,7 +40,7 @@ public class K2JSCompilerArguments extends CompilerArguments { @Argument(value = "sourcemap", description = "Generate SourceMap") public boolean sourcemap; - @Argument(value = "target", description = "Generate js files for specific ECMA version (3 or 5, default ECMA 3)") + @Argument(value = "target", description = "Generate js files for specific ECMA version (now support only ECMA 5)") public String target; @Argument(value = "tags", description = "Demarcate each compilation message (error, warning, etc) with an open and close tag") diff --git a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java index e86c11cac4b..38f59a3d8c6 100644 --- a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java +++ b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java @@ -30,7 +30,7 @@ public class PathUtil { public static final String JPS_KOTLIN_HOME_PROPERTY = "jps.kotlin.home"; public static final String JS_LIB_JAR_NAME = "kotlin-jslib.jar"; - public static final String JS_LIB_JS_NAME = "kotlinEcma3.js"; + public static final String JS_LIB_JS_NAME = "kotlin.js"; public static final String JDK_ANNOTATIONS_JAR = "kotlin-jdk-annotations.jar"; public static final String ANDROID_SDK_ANNOTATIONS_JAR = "kotlin-android-sdk-annotations.jar"; public static final String KOTLIN_JAVA_RUNTIME_JAR = "kotlin-runtime.jar"; diff --git a/js/js.tests/test/org/jetbrains/k2js/test/BasicTest.java b/js/js.tests/test/org/jetbrains/k2js/test/BasicTest.java index 23d5fcab19f..adcd50a3a44 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/BasicTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/BasicTest.java @@ -40,7 +40,7 @@ import static org.jetbrains.k2js.test.utils.JsTestUtils.convertFileNameToDotJsFi public abstract class BasicTest extends KotlinTestWithEnvironment { // predictable order of ecma version in tests - protected static final Iterable DEFAULT_ECMA_VERSIONS = Lists.newArrayList(EcmaVersion.v5, EcmaVersion.v3); + protected static final Iterable DEFAULT_ECMA_VERSIONS = Lists.newArrayList(EcmaVersion.v5); private static final boolean DELETE_OUT = false; private static final String TEST_FILES = "js/js.translator/testFiles/"; @@ -216,9 +216,4 @@ public abstract class BasicTest extends KotlinTestWithEnvironment { protected String expected(@NotNull String testName) { return getExpectedPath() + testName + ".out"; } - - @NotNull - protected static List failOnEcma5() { - return Collections.singletonList(EcmaVersion.v3); - } } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java index fc2a7704e88..77eb87ac8e2 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/rhino/RhinoUtils.java @@ -36,7 +36,6 @@ import static org.jetbrains.jet.utils.ExceptionUtils.rethrow; import static org.jetbrains.k2js.test.BasicTest.pathToTestFilesRoot; public final class RhinoUtils { - private static final String KOTLIN_JS_LIB_ECMA_3 = pathToTestFilesRoot() + "kotlin_lib_ecma3.js"; private static final String KOTLIN_JS_LIB_ECMA_5 = pathToTestFilesRoot() + "kotlin_lib_ecma5.js"; private static final Set IGNORED_JSHINT_WARNINGS = Sets.newHashSet(); @@ -212,7 +211,8 @@ public final class RhinoUtils { @NotNull public static String getKotlinLibFile(@NotNull EcmaVersion ecmaVersion) { - return ecmaVersion == EcmaVersion.v5 ? KOTLIN_JS_LIB_ECMA_5 : KOTLIN_JS_LIB_ECMA_3; + assert ecmaVersion == EcmaVersion.v5 : "Ecma 3 is deprecate"; + return KOTLIN_JS_LIB_ECMA_5; } static void flushSystemOut(@NotNull Context context, @NotNull Scriptable scope) { diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/JsUnitTestBase.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/JsUnitTestBase.java index 10f3bbb1121..44170cedf44 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/JsUnitTestBase.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/JsUnitTestBase.java @@ -73,7 +73,7 @@ public abstract class JsUnitTestBase extends MultipleFilesTranslationTest { } public void runTestFile(@NotNull String pathToTestFile) throws Exception { - Iterable versions = failOnEcma5(); + Iterable versions = DEFAULT_ECMA_VERSIONS; String testName = pathToTestFile.substring(pathToTestFile.lastIndexOf("/")); generateJavaScriptFiles(Lists.newArrayList(pathToTestFile), testName, MainCallParameters.noCall(), versions, TestConfigWithUnitTests.FACTORY); diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/KotlinLibTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/KotlinLibTest.java index 7b8f725cd96..6cef6879d3b 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/KotlinLibTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/KotlinLibTest.java @@ -64,7 +64,7 @@ public final class KotlinLibTest extends SingleFileTranslationTest { private void runJavascriptTest(@NotNull String filename) throws Exception { - runRhinoTest(withAdditionalFiles(cases(filename), EcmaVersion.v3), + runRhinoTest(withAdditionalFiles(cases(filename), EcmaVersion.defaultVersion()), new RhinoFunctionResultChecker("test", true)); } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/RegressionMergeEcmaTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/RegressionMergeEcmaTest.java index 1421889755c..8b09e1ab4eb 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/RegressionMergeEcmaTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/RegressionMergeEcmaTest.java @@ -60,6 +60,14 @@ public class RegressionMergeEcmaTest extends SingleFileTranslationTest { checkFooBoxIsOk(); } + public void testOverloadFun() throws Exception { + checkFooBoxIsOk(); + } + + public void testOverloadExtension() throws Exception { + checkFooBoxIsOk(); + } + public void testClassInitializer() throws Exception { checkFooBoxIsOk(); } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StandardClassesTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StandardClassesTest.java index a5a4bdd8ef3..8aed08084d8 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StandardClassesTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StandardClassesTest.java @@ -55,10 +55,8 @@ public final class StandardClassesTest extends SingleFileTranslationTest { // fooBoxTest(); // } - - //TODO: fails on ecma 5 because of ArrayIterator declaration: ecma 5 expects hasNext to be property while it is a function public void testArraysIterator() throws Exception { - fooBoxTest(failOnEcma5()); + fooBoxTest(); } public void testArrayFactoryMethods() throws Exception { diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayQUnitTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayQUnitTest.java index 54c3039053c..33bb730c5bb 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayQUnitTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayQUnitTest.java @@ -16,20 +16,6 @@ package org.jetbrains.k2js.test.semantics; -import closurecompiler.internal.com.google.common.collect.Maps; -import com.google.common.collect.Lists; -import org.jetbrains.k2js.config.EcmaVersion; -import org.jetbrains.k2js.test.rhino.CompositeRhinoResultsChecker; -import org.jetbrains.k2js.test.rhino.RhinoFunctionResultChecker; -import org.jetbrains.k2js.test.rhino.RhinoQUnitResultChecker; -import org.jetbrains.k2js.test.rhino.RhinoResultChecker; - -import java.io.File; -import java.util.EnumSet; -import java.util.Map; - -import static org.jetbrains.k2js.test.rhino.RhinoUtils.runRhinoTest; - /** */ public class StdLibJsArrayQUnitTest extends StdLibQUnitTestSupport { @@ -41,8 +27,7 @@ public class StdLibJsArrayQUnitTest extends StdLibQUnitTestSupport { // when ran in batch public void DISABLED_testArrayQUnitTest() throws Exception { - //performStdLibTest(EcmaVersion.all(), - performStdLibTest(EnumSet.of(EcmaVersion.v3), + performStdLibTest(DEFAULT_ECMA_VERSIONS, "libraries/stdlib/test", "js/JsArrayTest.kt"); } diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayScriptTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayScriptTest.java index c94568d8f9f..d9a25ba16d4 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayScriptTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/StdLibJsArrayScriptTest.java @@ -23,8 +23,6 @@ import org.jetbrains.k2js.test.rhino.CompositeRhinoResultsChecker; import org.jetbrains.k2js.test.rhino.RhinoFunctionResultChecker; import org.jetbrains.k2js.test.rhino.RhinoResultChecker; -import java.io.File; -import java.util.EnumSet; import java.util.Map; import static org.jetbrains.k2js.test.rhino.RhinoUtils.runRhinoTest; @@ -33,8 +31,7 @@ import static org.jetbrains.k2js.test.rhino.RhinoUtils.runRhinoTest; */ public class StdLibJsArrayScriptTest extends StdLibTestBase { public void testArrayScriptTest() throws Exception { - //performStdLibTest(EcmaVersion.all(), - performStdLibTest(EnumSet.of(EcmaVersion.v3), + performStdLibTest(DEFAULT_ECMA_VERSIONS, "libraries/stdlib/test", "js/JsArrayScript.kt"); } diff --git a/js/js.translator/qunit/index.html b/js/js.translator/qunit/index.html index 588494c9b47..e8693e61de5 100644 --- a/js/js.translator/qunit/index.html +++ b/js/js.translator/qunit/index.html @@ -6,9 +6,9 @@ - + - + diff --git a/js/js.translator/src/org/jetbrains/k2js/config/EcmaVersion.java b/js/js.translator/src/org/jetbrains/k2js/config/EcmaVersion.java index b3237692e34..00cc597f5e8 100644 --- a/js/js.translator/src/org/jetbrains/k2js/config/EcmaVersion.java +++ b/js/js.translator/src/org/jetbrains/k2js/config/EcmaVersion.java @@ -16,20 +16,13 @@ package org.jetbrains.k2js.config; -import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public enum EcmaVersion { v3, v5; - @NotNull - public static EcmaVersion fromString(@Nullable String target) { - return StringUtil.compareVersionNumbers(target, "v5") >= 0 ? v5 : v3; - } - @NotNull public static EcmaVersion defaultVersion() { - return v3; + return v5; } } diff --git a/js/js.translator/testFiles/kotlin_lib_ecma3.js b/js/js.translator/testFiles/kotlin_lib_ecma3.js deleted file mode 100644 index 7a6bba549be..00000000000 --- a/js/js.translator/testFiles/kotlin_lib_ecma3.js +++ /dev/null @@ -1,209 +0,0 @@ -/* Prototype JavaScript framework, version 1.6.1 - * (c) 2005-2009 Sam Stephenson - * - * Prototype is freely distributable under the terms of an MIT-style license. - * For details, see the Prototype web site: http://www.prototypejs.org/ - * - *--------------------------------------------------------------------------*/ -var Kotlin = {}; - -(function () { - "use strict"; - var emptyFunction = function () { - }; - - if (!Array.isArray) { - Array.isArray = function (vArg) { - return Object.prototype.toString.call(vArg) === "[object Array]"; - }; - } - - if (!Function.prototype.bind) { - Function.prototype.bind = function (oThis) { - if (typeof this !== "function") { - // closest thing possible to the ECMAScript 5 internal IsCallable function - throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable"); - } - - var aArgs = Array.prototype.slice.call(arguments, 1), - fToBind = this, - fNOP = function () { - }, - fBound = function () { - return fToBind.apply(this instanceof fNOP && oThis - ? this - : oThis, - aArgs.concat(Array.prototype.slice.call(arguments))); - }; - - fNOP.prototype = this.prototype; - fBound.prototype = new fNOP(); - - return fBound; - }; - } - - Kotlin.keys = Object.keys || function (o) { - var result = []; - var i = 0; - for (var p in o) { - if (o.hasOwnProperty(p)) { - result[i++] = p; - } - } - return result; - }; - - function copyProperties(to, from) { - for (var p in from) { - if (from.hasOwnProperty(p)) { - to[p] = from[p]; - } - } - } - - Kotlin.isType = function (object, klass) { - if (object === null || object === undefined) { - return false; - } - - var current = object.get_class(); - while (current !== klass) { - if (current === null) { - return false; - } - current = current.superclass; - } - return true; - }; - - Kotlin.createTrait = function () { - var n = arguments.length - 1; - var result = arguments[n] || {}; - for (var i = 0; i < n; i++) { - copyProperties(result, arguments[i]); - } - return result; - }; - - Kotlin.definePackage = function (members) { - return members === null ? {} : members; - }; - - Kotlin.createClass = (function () { - function subclass() { - } - - function create(parent, properties, staticProperties) { - var traits = null; - if (parent instanceof Array) { - traits = parent; - parent = parent[0]; - } - - function klass() { - this.initializing = klass; - if (this.initialize) { - this.initialize.apply(this, arguments); - } - } - - klass.addMethods = addMethods; - klass.superclass = parent || null; - klass.subclasses = []; - klass.object$ = object$; - - if (parent) { - if (typeof (parent) == "function") { - subclass.prototype = parent.prototype; - klass.prototype = new subclass(); - parent.subclasses.push(klass); - } - else { - // trait - klass.addMethods(parent); - } - } - - klass.addMethods({get_class: function () { - return klass; - }}); - - if (parent !== null) { - klass.addMethods({super_init: function () { - this.initializing = this.initializing.superclass; - this.initializing.prototype.initialize.apply(this, arguments); - }}); - } - - if (traits !== null) { - for (var i = 1, n = traits.length; i < n; i++) { - klass.addMethods(traits[i]); - } - } - if (properties !== null && properties !== undefined) { - klass.addMethods(properties); - } - - if (!klass.prototype.initialize) { - klass.prototype.initialize = emptyFunction; - } - - klass.prototype.constructor = klass; - if (staticProperties !== null && staticProperties !== undefined) { - copyProperties(klass, staticProperties); - } - return klass; - } - - function addMethods(source) { - copyProperties(this.prototype, source); - return this; - } - - function object$() { - if (typeof this.$object$ === "undefined") { - this.$object$ = this.object_initializer$(); - } - - return this.$object$; - } - - return create; - })(); - - Kotlin.$createClass = function (parent, properties) { - if (parent !== null && typeof (parent) != "function") { - properties = parent; - parent = null; - } - return Kotlin.createClass(parent, properties, null); - }; - - Kotlin.createObjectWithPrototype = function (prototype) { - function C() {} - C.prototype = prototype; - return new C(); - }; - - Kotlin.$new = function (f) { - var o = Kotlin.createObjectWithPrototype(f.prototype); - return function () { - f.apply(o, arguments); - return o; - }; - }; - - Kotlin.createObject = function () { - var singletonClass = Kotlin.createClass.apply(null, arguments); - return new singletonClass(); - }; - - Kotlin.defineModule = function (id, module) { - if (id in Kotlin.modules) { - throw Kotlin.$new(Kotlin.IllegalArgumentException)(); - } - - Kotlin.modules[id] = module; - }; -})(); diff --git a/js/js.translator/testFiles/mergeEcma/cases/overloadExtension.kt b/js/js.translator/testFiles/mergeEcma/cases/overloadExtension.kt new file mode 100644 index 00000000000..2f376417509 --- /dev/null +++ b/js/js.translator/testFiles/mergeEcma/cases/overloadExtension.kt @@ -0,0 +1,13 @@ +package foo + +fun Int.foo() {} +fun String.foo() {} + +val Int.bar = 1 +val String.bar = 2 + +fun box(): String { + val a = 43 + if (a.bar != 1) return "a.bar != 1, it: ${a.bar}" + return "OK" +} \ No newline at end of file diff --git a/js/js.translator/testFiles/mergeEcma/cases/overloadFun.kt b/js/js.translator/testFiles/mergeEcma/cases/overloadFun.kt new file mode 100644 index 00000000000..5a785d23091 --- /dev/null +++ b/js/js.translator/testFiles/mergeEcma/cases/overloadFun.kt @@ -0,0 +1,12 @@ +package foo + +class A { + fun test(a: Int) {} + fun test() {} +} + + +fun box(): String { + + return "OK" +} \ No newline at end of file diff --git a/libraries/examples/browser-example/sample.html b/libraries/examples/browser-example/sample.html index 68183cfb75f..c2c9e3cbf5c 100644 --- a/libraries/examples/browser-example/sample.html +++ b/libraries/examples/browser-example/sample.html @@ -9,7 +9,7 @@ - +