kotlin-maven-plugin, ant:withKotlin: skip compilation for empty sources

#KT-7618 Fixed
This commit is contained in:
Michael Nedzelsky
2015-05-28 10:14:01 +03:00
parent 0ddfedba49
commit 3ac1bdcdc8
3 changed files with 42 additions and 23 deletions
@@ -87,16 +87,26 @@ public class KotlinCompilerAdapter extends Javac13 {
kotlinc.getAdditionalArguments().addAll(additionalArguments); kotlinc.getAdditionalArguments().addAll(additionalArguments);
kotlinc.execute(); // Javac13#execute passes everything in compileList to javac, which doesn't recognize .kt files
if (!Integer.valueOf(0).equals(kotlinc.getExitCode())) { File[] compileListForJavac = filterOutKotlinSources(compileList);
// Don't run javac if failOnError = false and there were errors on Kotlin sources
return false; 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..."); javac.log("Running javac...");
// Javac13#execute passes everything in compileList to javac, which doesn't recognize .kt files compileList = compileListForJavac;
compileList = filterOutKotlinSources(compileList);
addRuntimeToJavacClasspath(kotlinc); addRuntimeToJavacClasspath(kotlinc);
@@ -65,7 +65,7 @@ public abstract class KotlinCompilerBaseTask : Task() {
abstract fun fillSpecificArguments() abstract fun fillSpecificArguments()
private fun fillArguments() { public fun fillArguments() {
val sourcePaths = src ?: throw BuildException("\"src\" should be specified") val sourcePaths = src ?: throw BuildException("\"src\" should be specified")
args.addAll(sourcePaths.list().map { File(it).canonicalPath }) args.addAll(sourcePaths.list().map { File(it).canonicalPath })
@@ -16,7 +16,9 @@
package org.jetbrains.kotlin.maven; package org.jetbrains.kotlin.maven;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.Processor;
import com.sampullara.cli.Args; import com.sampullara.cli.Args;
import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoExecutionException;
@@ -109,22 +111,9 @@ public abstract class KotlinCompileMojoBase<A extends CommonCompilerArguments> e
LOG.info("Kotlin Compiler version " + KotlinVersion.VERSION); LOG.info("Kotlin Compiler version " + KotlinVersion.VERSION);
// Check sources if (!hasKotlinFilesInSources()) {
List<String> sources = getSources(); LOG.warn("No sources found skipping Kotlin compile");
if (sources != null && sources.size() > 0) { return;
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;
}
} }
A arguments = createCompilerArguments(); A arguments = createCompilerArguments();
@@ -164,6 +153,26 @@ public abstract class KotlinCompileMojoBase<A extends CommonCompilerArguments> e
} }
} }
private boolean hasKotlinFilesInSources() throws MojoExecutionException {
List<String> 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<File>() {
@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<A> compiler) { private void printCompilerArgumentsIfDebugEnabled(@NotNull A arguments, @NotNull CLICompiler<A> compiler) {
if (getLog().isDebugEnabled()) { if (getLog().isDebugEnabled()) {
getLog().debug("Invoking compiler " + compiler + " with arguments:"); getLog().debug("Invoking compiler " + compiler + " with arguments:");