diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt index f8281b95b7b..8d267d4f554 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -80,7 +80,10 @@ class K2JVMCompiler : CLICompiler() { configuration.configureExplicitContentRoots(arguments) configuration.configureStandardLibs(paths, arguments) - if (arguments.buildFile == null && arguments.freeArgs.isEmpty() && !arguments.version) { + // in case of IC we need to run compiler even + // when there are no files to compile (to update caches & metadata when a file is removed) + val isICEnabled = configuration[JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS] != null + if (arguments.buildFile == null && arguments.freeArgs.isEmpty() && !(arguments.version || isICEnabled)) { if (arguments.script) { messageCollector.report(ERROR, "Specify script source path to evaluate") return COMPILATION_ERROR @@ -141,13 +144,6 @@ class K2JVMCompiler : CLICompiler() { val module = ModuleBuilder(moduleName, destination?.path ?: ".", "java-production") module.configureFromArgs(arguments) - if (module.getSourceFiles().isEmpty()) { - if (arguments.version) return OK - - messageCollector.report(ERROR, "No source files") - return COMPILATION_ERROR - } - ModuleChunk(listOf(module)) } @@ -157,6 +153,14 @@ class K2JVMCompiler : CLICompiler() { environment.registerJavacIfNeeded(arguments).let { if (!it) return COMPILATION_ERROR } + + if (environment.getSourceFiles().isEmpty() && !isICEnabled && buildFile == null) { + if (arguments.version) return OK + + messageCollector.report(ERROR, "No source files") + return COMPILATION_ERROR + } + KotlinToJVMBytecodeCompiler.compileModules(environment, buildFile, moduleChunk.modules) return OK } catch (e: CompilationException) { diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java index 674416489e1..e2ca097342b 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java @@ -101,6 +101,11 @@ public class IncrementalJsCompilerRunnerTestGenerated extends AbstractIncrementa runTest("jps-plugin/testData/incremental/pureKotlin/classRecreated/"); } + @TestMetadata("classRemoved") + public void testClassRemoved() throws Exception { + runTest("jps-plugin/testData/incremental/pureKotlin/classRemoved/"); + } + @TestMetadata("classSignatureChanged") public void testClassSignatureChanged() throws Exception { runTest("jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java index ba194bca264..c136f3a1412 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java @@ -101,6 +101,11 @@ public class IncrementalJvmCompilerRunnerTestGenerated extends AbstractIncrement runTest("jps-plugin/testData/incremental/pureKotlin/classRecreated/"); } + @TestMetadata("classRemoved") + public void testClassRemoved() throws Exception { + runTest("jps-plugin/testData/incremental/pureKotlin/classRemoved/"); + } + @TestMetadata("classSignatureChanged") public void testClassSignatureChanged() throws Exception { runTest("jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/"); diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index 52e58a691ab..e8996f4ecd2 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -752,6 +752,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { runTest("jps-plugin/testData/incremental/pureKotlin/classRecreated/"); } + @TestMetadata("classRemoved") + public void testClassRemoved() throws Exception { + runTest("jps-plugin/testData/incremental/pureKotlin/classRemoved/"); + } + @TestMetadata("classSignatureChanged") public void testClassSignatureChanged() throws Exception { runTest("jps-plugin/testData/incremental/pureKotlin/classSignatureChanged/"); diff --git a/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt b/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt new file mode 100644 index 00000000000..1b0178fd9be --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt @@ -0,0 +1,3 @@ +package test + +class A diff --git a/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt.delete.1 b/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt.delete.1 new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/classRemoved/A.kt.delete.1 @@ -0,0 +1 @@ + diff --git a/jps-plugin/testData/incremental/pureKotlin/classRemoved/build.log b/jps-plugin/testData/incremental/pureKotlin/classRemoved/build.log new file mode 100644 index 00000000000..94979d23f97 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/classRemoved/build.log @@ -0,0 +1,10 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/test/A.class +End of files +Compiling files: +End of files +Exit code: OK +------------------------------------------ diff --git a/jps-plugin/testData/incremental/pureKotlin/classRemoved/other.kt b/jps-plugin/testData/incremental/pureKotlin/classRemoved/other.kt new file mode 100644 index 00000000000..dc156549ce5 --- /dev/null +++ b/jps-plugin/testData/incremental/pureKotlin/classRemoved/other.kt @@ -0,0 +1,4 @@ +package test + +fun other() { +}