Ant task: support 'failOnError' attribute in kotlinc and withKotlin
This commit is contained in:
@@ -56,6 +56,7 @@ public class KotlinCompilerAdapter extends Javac13 {
|
||||
Javac javac = getJavac();
|
||||
|
||||
Kotlin2JvmTask kotlinc = new Kotlin2JvmTask();
|
||||
kotlinc.setFailOnError(javac.getFailonerror());
|
||||
kotlinc.setOutput(javac.getDestdir());
|
||||
|
||||
Path classpath = javac.getClasspath();
|
||||
@@ -70,6 +71,10 @@ public class KotlinCompilerAdapter extends Javac13 {
|
||||
kotlinc.setExternalAnnotations(externalAnnotations);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
javac.log("Running javac...");
|
||||
|
||||
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
package org.jetbrains.kotlin.ant
|
||||
|
||||
import org.apache.tools.ant.AntClassLoader
|
||||
import org.apache.tools.ant.BuildException
|
||||
import org.apache.tools.ant.Task
|
||||
import org.apache.tools.ant.types.Commandline
|
||||
import org.apache.tools.ant.types.Path
|
||||
import org.apache.tools.ant.types.Reference
|
||||
import java.io.File
|
||||
import org.apache.tools.ant.BuildException
|
||||
import org.apache.tools.ant.types.Commandline
|
||||
import java.io.PrintStream
|
||||
import org.apache.tools.ant.AntClassLoader
|
||||
import java.lang.ref.SoftReference
|
||||
import org.jetbrains.kotlin.preloading.ClassPreloadingUtils
|
||||
import java.io.File
|
||||
import java.io.PrintStream
|
||||
import java.lang.ref.SoftReference
|
||||
import java.net.JarURLConnection
|
||||
|
||||
object CompilerClassLoaderHolder {
|
||||
@@ -66,11 +66,14 @@ public abstract class KotlinCompilerBaseTask : Task() {
|
||||
public var nowarn: Boolean = false
|
||||
public var verbose: Boolean = false
|
||||
public var printVersion: Boolean = false
|
||||
public var failOnError: Boolean = false
|
||||
|
||||
public var noStdlib: Boolean = false
|
||||
|
||||
public val additionalArguments: MutableList<Commandline.Argument> = arrayListOf()
|
||||
|
||||
internal var exitCode: Int? = null
|
||||
|
||||
public fun createSrc(): Path {
|
||||
val srcPath = src
|
||||
if (srcPath == null) {
|
||||
@@ -118,10 +121,10 @@ public abstract class KotlinCompilerBaseTask : Task() {
|
||||
|
||||
log("Compiling ${src!!.list().toList()} => [${output!!.canonicalPath}]");
|
||||
|
||||
val exitCode = exec(compiler, System.err, args.copyToArray())
|
||||
val result = exec(compiler, System.err, args.toTypedArray())
|
||||
exitCode = (result as Enum<*>).ordinal()
|
||||
|
||||
// TODO: support failOnError attribute of javac
|
||||
if ((exitCode as Enum<*>).ordinal() != 0) {
|
||||
if (failOnError && exitCode != 0) {
|
||||
throw BuildException("Compile failed; see the compiler error output for details.")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package hello;
|
||||
|
||||
public class IncorrectJavaCode {
|
||||
@@ -0,0 +1,21 @@
|
||||
OUT:
|
||||
Buildfile: [TestData]/build.xml
|
||||
|
||||
build:
|
||||
[javac] Compiling 2 source files to [Temp]
|
||||
[javac] Compiling [[TestData]] => [[Temp]]
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Parameter name expected
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting comma or ')'
|
||||
[javac] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting ')'
|
||||
[kotlinc] Compiling [[TestData]] => [[Temp]]
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Parameter name expected
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting comma or ')'
|
||||
[kotlinc] ERROR: [TestData]/incorrectKotlinCode.kt: (4, 1) Expecting ')'
|
||||
|
||||
BUILD SUCCESSFUL
|
||||
Total time: [time]
|
||||
|
||||
ERR:
|
||||
[javac] Compile failed; see the compiler error output for details.
|
||||
|
||||
Return code: 0
|
||||
@@ -0,0 +1,11 @@
|
||||
<project name="Ant Task Test" default="build">
|
||||
<taskdef resource="org/jetbrains/kotlin/ant/antlib.xml" classpath="${kotlin.lib}/kotlin-ant.jar"/>
|
||||
|
||||
<target name="build">
|
||||
<javac srcdir="${test.data}" destdir="${temp}" includeantruntime="false" failonerror="false">
|
||||
<withKotlin/>
|
||||
</javac>
|
||||
|
||||
<kotlinc src="${test.data}" output="${temp}" failonerror="false"/>
|
||||
</target>
|
||||
</project>
|
||||
@@ -0,0 +1,12 @@
|
||||
|
||||
ERR:
|
||||
Exception in thread "main" java.lang.NoClassDefFoundError: hello/HelloPackage
|
||||
Caused by: java.lang.ClassNotFoundException: hello.HelloPackage
|
||||
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
|
||||
at java.security.AccessController.doPrivileged(Native Method)
|
||||
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
|
||||
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
|
||||
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
|
||||
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
|
||||
|
||||
Return code: 1
|
||||
@@ -0,0 +1,3 @@
|
||||
package hello
|
||||
|
||||
fun main(
|
||||
@@ -71,6 +71,11 @@ public class AntTaskJvmTest extends AntTaskBaseTest {
|
||||
doJvmAntTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doNotFailOnError() throws Exception {
|
||||
doJvmAntTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jvmClasspath() throws Exception {
|
||||
doJvmAntTest();
|
||||
|
||||
Reference in New Issue
Block a user