diff --git a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerAdapter.java b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerAdapter.java index c53558ce0f8..ef075360592 100644 --- a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerAdapter.java +++ b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerAdapter.java @@ -87,16 +87,26 @@ public class KotlinCompilerAdapter extends Javac13 { kotlinc.getAdditionalArguments().addAll(additionalArguments); - kotlinc.execute(); - if (!Integer.valueOf(0).equals(kotlinc.getExitCode())) { - // Don't run javac if failOnError = false and there were errors on Kotlin sources - return false; + // Javac13#execute passes everything in compileList to javac, which doesn't recognize .kt files + File[] compileListForJavac = filterOutKotlinSources(compileList); + + boolean hasKotlinFilesInSources = compileListForJavac.length < compileList.length; + + if (hasKotlinFilesInSources) { + kotlinc.execute(); + if (!Integer.valueOf(0).equals(kotlinc.getExitCode())) { + // Don't run javac if failOnError = false and there were errors on Kotlin sources + return false; + } + } + else { + // This is needed for addRuntimeToJavacClasspath, where kotlinc arguments will be used. + kotlinc.fillArguments(); } javac.log("Running javac..."); - // Javac13#execute passes everything in compileList to javac, which doesn't recognize .kt files - compileList = filterOutKotlinSources(compileList); + compileList = compileListForJavac; addRuntimeToJavacClasspath(kotlinc); diff --git a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt index 1a0e37b7796..5c86f2481aa 100644 --- a/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt +++ b/ant/src/org/jetbrains/kotlin/ant/KotlinCompilerBaseTask.kt @@ -65,7 +65,7 @@ public abstract class KotlinCompilerBaseTask : Task() { abstract fun fillSpecificArguments() - private fun fillArguments() { + public fun fillArguments() { val sourcePaths = src ?: throw BuildException("\"src\" should be specified") args.addAll(sourcePaths.list().map { File(it).canonicalPath }) diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java index be9afe38777..ba59efd9aac 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java @@ -16,7 +16,9 @@ package org.jetbrains.kotlin.maven; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.Processor; import com.sampullara.cli.Args; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -109,22 +111,9 @@ public abstract class KotlinCompileMojoBase e LOG.info("Kotlin Compiler version " + KotlinVersion.VERSION); - // Check sources - List sources = getSources(); - if (sources != null && sources.size() > 0) { - boolean sourcesExists = false; - - for (String source : sources) { - if (new File(source).exists()) { - sourcesExists = true; - break; - } - } - - if (!sourcesExists) { - LOG.warn("No sources found skipping Kotlin compile"); - return; - } + if (!hasKotlinFilesInSources()) { + LOG.warn("No sources found skipping Kotlin compile"); + return; } A arguments = createCompilerArguments(); @@ -164,6 +153,26 @@ public abstract class KotlinCompileMojoBase e } } + private boolean hasKotlinFilesInSources() throws MojoExecutionException { + List sources = getSources(); + if (sources == null || sources.isEmpty()) return false; + + for (String source : sources) { + File root = new File(source); + if (root.exists()) { + boolean sourcesExists = !FileUtil.processFilesRecursively(root, new Processor() { + @Override + public boolean process(File file) { + return !file.getName().endsWith(".kt"); + } + }); + if (sourcesExists) return true; + } + } + + return false; + } + private void printCompilerArgumentsIfDebugEnabled(@NotNull A arguments, @NotNull CLICompiler compiler) { if (getLog().isDebugEnabled()) { getLog().debug("Invoking compiler " + compiler + " with arguments:");