From 524001e97e5c2d6611b48765073dd6fd4ca519ed Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 9 Jun 2017 19:13:12 +0300 Subject: [PATCH] Add support for relative JS source map paths in JPS Original commit: 1d6f01ee6c7e26425579e9c48dab2a6b32165404 --- .../kotlin/jps/build/KotlinJpsBuildTest.kt | 14 ++++++++++++-- .../compilerRunner/JpsKotlinCompilerRunner.kt | 10 +++++++++- .../kotlin/jps/build/KotlinBuilder.kt | 5 ++++- .../jps/build/KotlinSourceFileCollector.java | 2 +- .../kotlinProject.iml | 12 ++++++++++++ .../kotlinProject.ipr | 18 ++++++++++++++++++ .../src/pkg/test1.kt | 7 +++++++ 7 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.iml create mode 100644 jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/src/pkg/test1.kt diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 6dc04e9b1b5..928c61d8924 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -298,6 +298,15 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { checkWhen(touch("src/test1.kt"), null, k2jsOutput(PROJECT_NAME)) } + fun testKotlinJavaScriptProjectWithSourceMap() { + initProject(JS_STDLIB) + buildAllModules().assertSuccessful() + + val sourceMapContent = File(getOutputDir(PROJECT_NAME), "$PROJECT_NAME.js.map").readText() + val expectedPath = "prefix-dir/pkg/test1.kt" + assertTrue("Source map file should contain relative path ($expectedPath)", sourceMapContent.contains("\"$expectedPath\"")) + } + fun testKotlinJavaScriptProjectWithTwoModules() { initProject(JS_STDLIB) buildAllModules().assertSuccessful() @@ -690,8 +699,7 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { } private fun contentOfOutputDir(moduleName: String): Set { - val outputDir = "out/production/$moduleName" - val baseDir = File(workDir, outputDir) + val baseDir = getOutputDir(moduleName) val files = FileUtil.findFilesByMask(Pattern.compile(".*"), baseDir) val result = HashSet() for (file in files) { @@ -702,6 +710,8 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { return result } + private fun getOutputDir(moduleName: String): File = File(workDir, "out/production/$moduleName") + fun testReexportedDependency() { initProject() AbstractKotlinJpsBuildTestCase.addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, ContainerUtil.filter(myProject.modules, object : Condition { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt index ae6a95339fc..32fe18f2bff 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/compilerRunner/JpsKotlinCompilerRunner.kt @@ -20,7 +20,10 @@ import com.intellij.util.xmlb.XmlSerializerUtil import org.jetbrains.jps.api.GlobalOptions import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY -import org.jetbrains.kotlin.cli.common.arguments.* +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.mergeBeans import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.additionalArgumentsAsList import org.jetbrains.kotlin.daemon.client.CompileServiceSession @@ -81,6 +84,7 @@ class JpsKotlinCompilerRunner : KotlinCompilerRunner() { compilerSettings: CompilerSettings, environment: JpsCompilerEnvironment, sourceFiles: Collection, + sourceRoots: Collection, libraries: List, friendModules: List, outputFile: File @@ -92,6 +96,10 @@ class JpsKotlinCompilerRunner : KotlinCompilerRunner() { log.debug("K2JS: merged arguments: " + ArgumentUtils.convertArgumentsToStringList(arguments)) setupK2JsArguments(outputFile, sourceFiles, libraries, friendModules, arguments) + if (arguments.sourceMap) { + arguments.sourceMapSourceRoots = sourceRoots.joinToString(File.pathSeparator) { it.path } + } + log.debug("K2JS: arguments after setup" + ArgumentUtils.convertArgumentsToStringList(arguments)) withCompilerSettings(compilerSettings) { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index c1cf1016223..ea124e32e72 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -662,13 +662,16 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(representativeModule) val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(representativeModule) + val sourceRoots = KotlinSourceFileCollector.getRelevantSourceRoots(representativeTarget).map { it.file } + val friendPaths = KotlinBuilderModuleScriptGenerator.getProductionModulesWhichInternalsAreVisible(representativeTarget).mapNotNull { val file = getOutputMetaFile(it, false) if (file.exists()) file.absolutePath.toString() else null } val compilerRunner = JpsKotlinCompilerRunner() - compilerRunner.runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, environment, sourceFiles, libraries, friendPaths, outputFile) + compilerRunner.runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, environment, sourceFiles, sourceRoots, + libraries, friendPaths, outputFile) return environment.outputItemsCollector } diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.java b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.java index 5fc6f77ddc5..c8323d2f226 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.java +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.java @@ -124,7 +124,7 @@ public class KotlinSourceFileCollector { return result; } - private static Iterable getRelevantSourceRoots(ModuleBuildTarget target) { + public static Iterable getRelevantSourceRoots(ModuleBuildTarget target) { JavaSourceRootType sourceRootType = target.isTests() ? JavaSourceRootType.TEST_SOURCE : JavaSourceRootType.SOURCE; //noinspection unchecked diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.iml new file mode 100644 index 00000000000..a0cbe548242 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.ipr new file mode 100644 index 00000000000..16a88d84040 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/kotlinProject.ipr @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/src/pkg/test1.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/src/pkg/test1.kt new file mode 100644 index 00000000000..112bd39189a --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithSourceMap/src/pkg/test1.kt @@ -0,0 +1,7 @@ +package pkg + +var log = "" + +fun foo(x: String) { + log += "$x;" +} \ No newline at end of file