You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by co...@apache.org on 2001/01/04 11:08:59 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs Javac.java
conor 01/01/04 02:08:59
Modified: src/main/org/apache/tools/ant/taskdefs Javac.java
Log:
Provide a failonerror attribute for javac. This defaults to true. If you set it to
false, an error is logged but the build will continue.
Based on the idea by Ken Wood.
Revision Changes Path
1.61 +50 -26 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Javac.java
Index: Javac.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Javac.java,v
retrieving revision 1.60
retrieving revision 1.61
diff -u -r1.60 -r1.61
--- Javac.java 2001/01/03 14:18:30 1.60
+++ Javac.java 2001/01/04 10:08:59 1.61
@@ -116,6 +116,7 @@
private Path extdirs;
private static String lSep = System.getProperty("line.separator");
+ protected boolean failOnError = true;
protected File[] compileList = new File[0];
/**
@@ -230,6 +231,20 @@
}
/**
+ * Throw a BuildException if compilation fails
+ */
+ public void setFailonerror(boolean fail) {
+ failOnError = fail;
+ }
+
+ /**
+ * Proceed if compilation fails
+ */
+ public void setProceed(boolean proceed) {
+ failOnError = !proceed;
+ }
+
+ /**
* Set the deprecation flag.
*/
public void setDeprecation(boolean deprecation) {
@@ -330,18 +345,29 @@
+ (compileList.length == 1 ? "" : "s")
+ (destDir != null ? " to " + destDir : ""));
+ boolean compileSucceeded = false;
+
if (compiler.equalsIgnoreCase("classic")) {
- doClassicCompile();
+ compileSucceeded = doClassicCompile();
} else if (compiler.equalsIgnoreCase("modern")) {
- doModernCompile();
+ compileSucceeded = doModernCompile();
} else if (compiler.equalsIgnoreCase("jikes")) {
- doJikesCompile();
+ compileSucceeded = doJikesCompile();
} else if (compiler.equalsIgnoreCase("jvc")) {
- doJvcCompile();
+ compileSucceeded = doJvcCompile();
} else {
String msg = "Don't know how to use compiler " + compiler;
throw new BuildException(msg, location);
}
+
+ if (!compileSucceeded) {
+ if (failOnError) {
+ throw new BuildException(FAIL_MSG, location);
+ }
+ else {
+ log(FAIL_MSG, Project.MSG_ERR);
+ }
+ }
}
}
@@ -456,9 +482,10 @@
/**
* Peforms a compile using the classic compiler that shipped with
* JDK 1.1 and 1.2.
+ *
+ * @return true if the compile succeeded
*/
-
- private void doClassicCompile() throws BuildException {
+ private boolean doClassicCompile() throws BuildException {
log("Using classic compiler", Project.MSG_VERBOSE);
Commandline cmd = setupJavacCommand();
@@ -483,9 +510,7 @@
// Call the compile() method
Method compile = c.getMethod("compile", new Class [] { String[].class });
Boolean ok = (Boolean)compile.invoke(compiler, new Object[] {cmd.getArguments()});
- if (!ok.booleanValue()) {
- throw new BuildException(FAIL_MSG, location);
- }
+ return ok.booleanValue();
}
catch (ClassNotFoundException ex) {
throw new BuildException("Cannot use classic compiler, as it is not available"+
@@ -503,15 +528,15 @@
/**
* Performs a compile using the newer compiler that ships with JDK 1.3
+ *
+ * @return true if the compile succeeded
*/
-
- private void doModernCompile() throws BuildException {
+ private boolean doModernCompile() throws BuildException {
try {
Class.forName("com.sun.tools.javac.Main");
} catch (ClassNotFoundException cnfe) {
log("Modern compiler is not available - using classic compiler", Project.MSG_WARN);
- doClassicCompile();
- return;
+ return doClassicCompile();
}
log("Using modern compiler", Project.MSG_VERBOSE);
@@ -532,9 +557,7 @@
new Class [] {(new String [] {}).getClass ()});
int result = ((Integer) compile.invoke
(compiler, new Object[] {cmd.getArguments()})) .intValue ();
- if (result != MODERN_COMPILER_SUCCESS) {
- throw new BuildException(FAIL_MSG, location);
- }
+ return (result == MODERN_COMPILER_SUCCESS);
} catch (Exception ex) {
if (ex instanceof BuildException) {
throw (BuildException) ex;
@@ -653,9 +676,10 @@
* It has been successfully tested with jikes >1.10
*
* @author skanthak@muehlheim.de
+ *
+ * @return true if the compile succeeded
*/
-
- private void doJikesCompile() throws BuildException {
+ private boolean doJikesCompile() throws BuildException {
log("Using jikes compiler", Project.MSG_VERBOSE);
Path classpath = new Path(project);
@@ -762,9 +786,7 @@
int firstFileName = cmd.size();
logAndAddFilesToCompile(cmd);
- if (executeJikesCompile(cmd.getCommandline(), firstFileName) != 0) {
- throw new BuildException(FAIL_MSG, location);
- }
+ return executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
}
/**
@@ -772,7 +794,7 @@
* @param args - arguments to pass to process on command line
* @param firstFileName - index of the first source file in args
*/
- protected int executeJikesCompile(String[] args, int firstFileName) {
+ protected int executeExternalCompile(String[] args, int firstFileName) {
String[] commandArray = null;
File tmpFile = null;
@@ -856,7 +878,11 @@
}
}
- private void doJvcCompile() throws BuildException {
+ /*
+ *
+ * @return true if the compile succeeded
+ */
+ private boolean doJvcCompile() throws BuildException {
log("Using jvc compiler", Project.MSG_VERBOSE);
Path classpath = new Path(project);
@@ -906,9 +932,7 @@
int firstFileName = cmd.size();
logAndAddFilesToCompile(cmd);
- if (executeJikesCompile(cmd.getCommandline(), firstFileName) != 0) {
- throw new BuildException(FAIL_MSG, location);
- }
+ return executeExternalCompile(cmd.getCommandline(), firstFileName) == 0;
}
}