From f13e05de7df28d9f1066a93c14a337efbf6a6ffb Mon Sep 17 00:00:00 2001 From: "Vitaliy.Tikhonov" Date: Fri, 30 Aug 2019 13:48:41 +0300 Subject: [PATCH] [JS SCRIPTING] moved the javascript engines to a separate module --- js/js.engines/build.gradle.kts | 30 +++++++++++++++++++ .../kotlin/js/engine}/ScriptEngine.kt | 2 +- .../kotlin/js/engine}/ScriptEngineNashorn.kt | 2 +- .../kotlin/js/engine}/ScriptEngineV8.kt | 13 +++----- js/js.tests/build.gradle.kts | 30 +++++++++++-------- .../jetbrains/kotlin/js/test/BasicBoxTest.kt | 8 +++-- .../jetbrains/kotlin/js/test/JsTestChecker.kt | 11 +++---- settings.gradle | 8 +++++ 8 files changed, 73 insertions(+), 31 deletions(-) create mode 100644 js/js.engines/build.gradle.kts rename js/{js.tests/test/org/jetbrains/kotlin/js/test/interop => js.engines/src/org/jetbrains/kotlin/js/engine}/ScriptEngine.kt (91%) rename js/{js.tests/test/org/jetbrains/kotlin/js/test/interop => js.engines/src/org/jetbrains/kotlin/js/engine}/ScriptEngineNashorn.kt (97%) rename js/{js.tests/test/org/jetbrains/kotlin/js/test/interop => js.engines/src/org/jetbrains/kotlin/js/engine}/ScriptEngineV8.kt (86%) diff --git a/js/js.engines/build.gradle.kts b/js/js.engines/build.gradle.kts new file mode 100644 index 00000000000..f174de2c662 --- /dev/null +++ b/js/js.engines/build.gradle.kts @@ -0,0 +1,30 @@ +import org.gradle.internal.os.OperatingSystem + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + compile(project(":compiler:util")) + compile(project(":js:js.ast")) + compile(project(":js:js.translator")) + compileOnly(intellijCoreDep()) { includeJars("intellij-core") } + + val currentOs = OperatingSystem.current() + + when { + currentOs.isWindows -> { + val suffix = if (currentOs.toString().endsWith("64")) "_64" else "" + compileOnly("com.eclipsesource.j2v8:j2v8_win32_x86$suffix:4.6.0") + } + currentOs.isMacOsX -> compileOnly("com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0") + currentOs.run { isLinux || isUnix } -> compileOnly("com.eclipsesource.j2v8:j2v8_linux_x86_64:4.8.0") + else -> logger.error("unsupported platform $currentOs - can not compile com.eclipsesource.j2v8 dependency") + } +} + +sourceSets { + "main" { projectDefault() } + "test" {} +} diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngine.kt b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngine.kt similarity index 91% rename from js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngine.kt rename to js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngine.kt index b0b19d006bd..1b0fb773a4c 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngine.kt +++ b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngine.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.js.test.interop +package org.jetbrains.kotlin.js.engine interface ScriptEngine { fun eval(script: String): T diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineNashorn.kt b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineNashorn.kt similarity index 97% rename from js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineNashorn.kt rename to js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineNashorn.kt index 78024f3f95a..c3c089a85a0 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineNashorn.kt +++ b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineNashorn.kt @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.js.test.interop +package org.jetbrains.kotlin.js.engine import jdk.nashorn.api.scripting.NashornScriptEngineFactory import jdk.nashorn.internal.runtime.ScriptRuntime diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineV8.kt b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineV8.kt similarity index 86% rename from js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineV8.kt rename to js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineV8.kt index be37b0fe008..398a2ded22f 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/interop/ScriptEngineV8.kt +++ b/js/js.engines/src/org/jetbrains/kotlin/js/engine/ScriptEngineV8.kt @@ -3,20 +3,15 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.js.test.interop +package org.jetbrains.kotlin.js.engine import com.eclipsesource.v8.V8 import com.eclipsesource.v8.V8Array import com.eclipsesource.v8.V8Object import com.eclipsesource.v8.utils.V8ObjectUtils -import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File -class ScriptEngineV8 : ScriptEngine { - companion object { - // It's important that this is not created per test, but rather per process. - val LIBRARY_PATH_BASE = KotlinTestUtils.tmpDirForReusableFolder("j2v8_library_path").path - } +class ScriptEngineV8(LIBRARY_PATH_BASE: String) : ScriptEngine { override fun releaseObject(t: T) { (t as? V8Object)?.release() @@ -82,7 +77,7 @@ class ScriptEngineV8 : ScriptEngine { } } -class ScriptEngineV8Lazy : ScriptEngine { +class ScriptEngineV8Lazy(LIBRARY_PATH_BASE: String) : ScriptEngine { override fun eval(script: String) = engine.eval(script) override fun saveState() = engine.saveState() @@ -99,5 +94,5 @@ class ScriptEngineV8Lazy : ScriptEngine { override fun restoreState() = engine.restoreState() - private val engine by lazy { ScriptEngineV8() } + private val engine by lazy { ScriptEngineV8(LIBRARY_PATH_BASE) } } \ No newline at end of file diff --git a/js/js.tests/build.gradle.kts b/js/js.tests/build.gradle.kts index d6abf536c6d..967bf1040c8 100644 --- a/js/js.tests/build.gradle.kts +++ b/js/js.tests/build.gradle.kts @@ -35,10 +35,28 @@ dependencies { testCompile(project(":js:js.translator")) testCompile(project(":js:js.serializer")) testCompile(project(":js:js.dce")) + testCompile(project(":js:js.engines")) testCompile(commonDep("junit:junit")) testCompile(projectTests(":kotlin-build-common")) testCompile(projectTests(":generators:test-generator")) + val currentOs = OperatingSystem.current() + + val j2v8idString = when { + currentOs.isWindows -> { + val suffix = if (currentOs.toString().endsWith("64")) "_64" else "" + "com.eclipsesource.j2v8:j2v8_win32_x86$suffix:4.6.0" + } + currentOs.isMacOsX -> "com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0" + currentOs.run { isLinux || isUnix } -> "com.eclipsesource.j2v8:j2v8_linux_x86_64:4.8.0" + else -> { + logger.error("unsupported platform $currentOs - can not compile com.eclipsesource.j2v8 dependency") + "j2v8:$currentOs" + } + } + + testCompile(j2v8idString) + testRuntime(kotlinStdlib()) testJsRuntime(kotlinStdlib("js")) testJsRuntime(project(":kotlin-test:kotlin-test-js")) // to be sure that kotlin-test-js built before tests runned @@ -46,18 +64,6 @@ dependencies { testRuntime(project(":kotlin-preloader")) // it's required for ant tests testRuntime(project(":compiler:backend-common")) testRuntime(commonDep("org.fusesource.jansi", "jansi")) - - val currentOs = OperatingSystem.current() - - when { - currentOs.isWindows -> { - val suffix = if (currentOs.toString().endsWith("64")) "_64" else "" - testCompile("com.eclipsesource.j2v8:j2v8_win32_x86$suffix:4.6.0") - } - currentOs.isMacOsX -> testCompile("com.eclipsesource.j2v8:j2v8_macosx_x86_64:4.6.0") - currentOs.run { isLinux || isUnix } -> testCompile("com.eclipsesource.j2v8:j2v8_linux_x86_64:4.8.0") - else -> logger.error("unsupported platform $currentOs - can not compile com.eclipsesource.j2v8 dependency") - } antLauncherJar(commonDep("org.apache.ant", "ant")) antLauncherJar(toolsJar()) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt index 6cbe8eb3949..ce78a09f337 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/BasicBoxTest.kt @@ -35,6 +35,8 @@ import org.jetbrains.kotlin.js.config.SourceMapSourceEmbedding import org.jetbrains.kotlin.js.dce.DeadCodeElimination import org.jetbrains.kotlin.js.dce.InputFile import org.jetbrains.kotlin.js.dce.InputResource +import org.jetbrains.kotlin.js.engine.ScriptEngineNashorn +import org.jetbrains.kotlin.js.engine.ScriptEngineV8Lazy import org.jetbrains.kotlin.js.facade.* import org.jetbrains.kotlin.js.parser.parse import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapError @@ -43,8 +45,6 @@ import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapParser import org.jetbrains.kotlin.js.parser.sourcemaps.SourceMapSuccess import org.jetbrains.kotlin.js.sourceMap.SourceFilePathResolver import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder -import org.jetbrains.kotlin.js.test.interop.ScriptEngineNashorn -import org.jetbrains.kotlin.js.test.interop.ScriptEngineV8Lazy import org.jetbrains.kotlin.js.test.utils.* import org.jetbrains.kotlin.js.util.TextOutputImpl import org.jetbrains.kotlin.metadata.DebugProtoBuf @@ -869,6 +869,8 @@ abstract class BasicBoxTest( private val OLD_MODULE_SUFFIX = "-old" const val KOTLIN_TEST_INTERNAL = "\$kotlin_test_internal\$" - private val engineForMinifier = if (runTestInNashorn) ScriptEngineNashorn() else ScriptEngineV8Lazy() + private val engineForMinifier = + if (runTestInNashorn) ScriptEngineNashorn() + else ScriptEngineV8Lazy(KotlinTestUtils.tmpDirForReusableFolder("j2v8_library_path").path) } } diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsTestChecker.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsTestChecker.kt index 53836dd3bf6..d5a8e06f490 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsTestChecker.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsTestChecker.kt @@ -5,9 +5,10 @@ package org.jetbrains.kotlin.js.test -import org.jetbrains.kotlin.js.test.interop.ScriptEngine -import org.jetbrains.kotlin.js.test.interop.ScriptEngineNashorn -import org.jetbrains.kotlin.js.test.interop.ScriptEngineV8 +import org.jetbrains.kotlin.js.engine.ScriptEngine +import org.jetbrains.kotlin.js.engine.ScriptEngineNashorn +import org.jetbrains.kotlin.js.engine.ScriptEngineV8 +import org.jetbrains.kotlin.test.KotlinTestUtils import org.junit.Assert fun createScriptEngine(): ScriptEngine { @@ -180,7 +181,7 @@ object V8JsTestChecker : AbstractV8JsTestChecker() { } private fun createV8Engine(): ScriptEngineV8 { - val v8 = ScriptEngineV8() + val v8 = ScriptEngineV8(KotlinTestUtils.tmpDirForReusableFolder("j2v8_library_path").path) listOf( BasicBoxTest.DIST_DIR_JS_PATH + "kotlin.js", @@ -202,7 +203,7 @@ object V8JsTestChecker : AbstractV8JsTestChecker() { } object V8IrJsTestChecker : AbstractV8JsTestChecker() { - override val engine get() = ScriptEngineV8() + override val engine get() = ScriptEngineV8(KotlinTestUtils.tmpDirForReusableFolder("j2v8_library_path").path) override fun run(files: List, f: ScriptEngine.() -> Any?): Any? { diff --git a/settings.gradle b/settings.gradle index 64b8c89f202..b540561e92f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -78,6 +78,7 @@ include ":kotlin-build-common", ":js:js.ast", ":js:js.serializer", ":js:js.parser", + ":js:js.engines", ":js:js.frontend", ":js:js.translator", ":js:js.dce", @@ -196,6 +197,8 @@ include ":kotlin-build-common", ":kotlin-annotations-jvm", ":kotlin-annotations-android", ":kotlin-scripting-common", + ':kotlin-scripting-js', + ':kotlin-scripting-js-test', ":kotlin-scripting-jvm", ":kotlin-scripting-jvm-host", ":kotlin-scripting-jvm-host-test", @@ -384,6 +387,8 @@ project(':examples:kotlin-jsr223-daemon-local-eval-example').projectDir = "$root project(':kotlin-annotations-jvm').projectDir = "$rootDir/libraries/tools/kotlin-annotations-jvm" as File project(':kotlin-annotations-android').projectDir = "$rootDir/libraries/tools/kotlin-annotations-android" as File project(':kotlin-scripting-common').projectDir = "$rootDir/libraries/scripting/common" as File +project(':kotlin-scripting-js').projectDir = "$rootDir/libraries/scripting/js" as File +project(':kotlin-scripting-js-test').projectDir = "$rootDir/libraries/scripting/js-test" as File project(':kotlin-scripting-jvm').projectDir = "$rootDir/libraries/scripting/jvm" as File project(':kotlin-scripting-jvm-host').projectDir = "$rootDir/libraries/scripting/jvm-host" as File project(':kotlin-scripting-jvm-host-test').projectDir = "$rootDir/libraries/scripting/jvm-host-test" as File @@ -410,6 +415,9 @@ project(':libraries:kotlin-prepush-hook').projectDir = "$rootDir/libraries/tools project(':plugins:jvm-abi-gen').projectDir = "$rootDir/plugins/jvm-abi-gen" as File project(':plugins:jvm-abi-gen-embeddable').projectDir = "$rootDir/plugins/jvm-abi-gen/embeddable" as File +project(':js:js.tests').projectDir = "$rootDir/js/js.tests" as File +project(':js:js.engines').projectDir = "$rootDir/js/js.engines" as File + // plugin markers: project(':kotlin-gradle-plugin:plugin-marker').projectDir = file("$rootDir/libraries/tools/kotlin-gradle-plugin/plugin-marker") project(':kotlin-allopen:plugin-marker').projectDir = file("$rootDir/libraries/tools/kotlin-allopen/plugin-marker")