From c6d7ffb3ebcecb7f480b9100356626b36e69ef97 Mon Sep 17 00:00:00 2001 From: Anton Bannykh Date: Fri, 12 Jan 2018 14:51:28 +0300 Subject: [PATCH] JS DCE: drop unknown file report severity to WARNING *.kjsm and other files might be received when FileCollection is used in Gradle as a dependency. Example: `testCompile project(":$coroutines_core").sourceSets.test.output` (a popular-ish solution to introduce dependencies between tests) --- .../jetbrains/kotlin/cli/js/dce/K2JSDce.kt | 21 +++++++------------ .../testData/cli/js-dce/invalidFilename.args | 4 ++++ .../testData/cli/js-dce/invalidFilename.out | 2 ++ .../testData/cli/js-dce/invalidFilename.test | 1 + .../kotlin/cli/CliTestGenerated.java | 6 ++++++ .../kotlin/gradle/Kotlin2JsGradlePluginIT.kt | 21 +++++++++++++++++++ 6 files changed, 41 insertions(+), 14 deletions(-) create mode 100644 compiler/testData/cli/js-dce/invalidFilename.args create mode 100644 compiler/testData/cli/js-dce/invalidFilename.out create mode 100644 compiler/testData/cli/js-dce/invalidFilename.test diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/js/dce/K2JSDce.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/js/dce/K2JSDce.kt index cad5d078f86..3bac24adfb4 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/js/dce/K2JSDce.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/js/dce/K2JSDce.kt @@ -33,18 +33,11 @@ class K2JSDce : CLITool() { override fun execImpl(messageCollector: MessageCollector, services: Services, arguments: K2JSDceArguments): ExitCode { val baseDir = File(arguments.outputDirectory ?: "min") - var hasErrors = false val files = arguments.freeArgs.flatMap { arg -> - val files = collectInputFiles(baseDir, arg, messageCollector) - if (files != null) { - files - } else { - hasErrors = true - emptyList() - } + collectInputFiles(baseDir, arg, messageCollector) } - if (hasErrors) return ExitCode.COMPILATION_ERROR + if (messageCollector.hasErrors()) return ExitCode.COMPILATION_ERROR if (files.isEmpty() && !arguments.version) { messageCollector.report(CompilerMessageSeverity.ERROR, "no source files") @@ -163,7 +156,7 @@ class K2JSDce : CLITool() { return true } - private fun collectInputFiles(baseDir: File, fileName: String, messageCollector: MessageCollector): List? { + private fun collectInputFiles(baseDir: File, fileName: String, messageCollector: MessageCollector): List { val file = File(fileName) return when { file.isDirectory -> { @@ -179,16 +172,16 @@ class K2JSDce : CLITool() { } else -> { messageCollector.report( - CompilerMessageSeverity.ERROR, - "invalid file name '$fileName'; must end either with '.js', '.zip' or '.jar'" + CompilerMessageSeverity.WARNING, + "invalid file name '${file.absolutePath}'; must end either with '.js', '.zip' or '.jar'" ) - null + emptyList() } } } else -> { messageCollector.report(CompilerMessageSeverity.ERROR, "source file or directory not found: $fileName") - null + emptyList() } } } diff --git a/compiler/testData/cli/js-dce/invalidFilename.args b/compiler/testData/cli/js-dce/invalidFilename.args new file mode 100644 index 00000000000..23044f75bdb --- /dev/null +++ b/compiler/testData/cli/js-dce/invalidFilename.args @@ -0,0 +1,4 @@ +$TESTDATA_DIR$/invalidFilename.args +$TESTDATA_DIR$/simple.js +-output-dir +$TEMP_DIR$/min \ No newline at end of file diff --git a/compiler/testData/cli/js-dce/invalidFilename.out b/compiler/testData/cli/js-dce/invalidFilename.out new file mode 100644 index 00000000000..d4d1e05bd46 --- /dev/null +++ b/compiler/testData/cli/js-dce/invalidFilename.out @@ -0,0 +1,2 @@ +warning: invalid file name '$TESTDATA_DIR$/invalidFilename.args'; must end either with '.js', '.zip' or '.jar' +OK \ No newline at end of file diff --git a/compiler/testData/cli/js-dce/invalidFilename.test b/compiler/testData/cli/js-dce/invalidFilename.test new file mode 100644 index 00000000000..9c68c76678e --- /dev/null +++ b/compiler/testData/cli/js-dce/invalidFilename.test @@ -0,0 +1 @@ +// EXISTS: min/simple.js \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java index 7605ffa4971..96677edea41 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -783,6 +783,12 @@ public class CliTestGenerated extends AbstractCliTest { doJsDceTest(fileName); } + @TestMetadata("invalidFilename.args") + public void testInvalidFilename() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/js-dce/invalidFilename.args"); + doJsDceTest(fileName); + } + @TestMetadata("jsExtraHelp.args") public void testJsExtraHelp() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/cli/js-dce/jsExtraHelp.args"); diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt index 93f35cbfefd..2a1f656f2f0 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kotlin2JsGradlePluginIT.kt @@ -279,6 +279,27 @@ class Kotlin2JsGradlePluginIT : BaseGradleIT() { } } + @Test + fun testDceFileCollectionDependency() { + val project = Project("kotlin2JsDceProject", "2.10", minLogLevel = LogLevel.INFO) + + project.setupWorkingDir() + File(project.projectDir, "mainProject/build.gradle").modify { + it.replace("compile project(\":libraryProject\")", "compile project(\":libraryProject\").sourceSets.main.output") + } + + project.build("runRhino") { + assertSuccessful() + val pathPrefix = "mainProject/build/kotlin-js-min/main" + assertFileExists("$pathPrefix/exampleapp.js.map") + assertFileExists("$pathPrefix/examplelib.js.map") + assertFileContains("$pathPrefix/exampleapp.js.map", "\"../../../src/main/kotlin/exampleapp/main.kt\"") + + assertFileExists("$pathPrefix/kotlin.js") + assertTrue(fileInWorkingDir("$pathPrefix/kotlin.js").length() < 500 * 1000, "Looks like kotlin.js file was not minified by DCE") + } + } + /** Issue: KT-18495 */ @Test fun testNoSeparateClassesDirWarning() {