bodewig 2003/04/01 05:47:06
Modified: src/main/org/apache/tools/ant/taskdefs/optional ANTLR.java Log: Fix ANTLR's test8 testcase. Revision Changes Path 1.21 +26 -3 ant/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java Index: ANTLR.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ANTLR.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- ANTLR.java 31 Mar 2003 13:46:18 -0000 1.20 +++ ANTLR.java 1 Apr 2003 13:47:06 -0000 1.21 @@ -55,6 +55,7 @@ package org.apache.tools.ant.taskdefs.optional; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileReader; import java.io.IOException; @@ -63,12 +64,14 @@ import org.apache.tools.ant.Project; import org.apache.tools.ant.Task; import org.apache.tools.ant.taskdefs.Execute; -import org.apache.tools.ant.taskdefs.LogStreamHandler; +import org.apache.tools.ant.taskdefs.LogOutputStream; +import org.apache.tools.ant.taskdefs.PumpStreamHandler; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.util.JavaEnvUtils; import org.apache.tools.ant.util.LoaderUtils; +import org.apache.tools.ant.util.TeeOutputStream; /** * Invokes the ANTLR Translator generator on a grammar file. @@ -111,6 +114,9 @@ /** working directory */ private File workingdir = null; + /** captures ANTLR's output */ + private ByteArrayOutputStream bos = new ByteArrayOutputStream(); + public ANTLR() { commandline.setVm(JavaEnvUtils.getJreExecutable("java")); commandline.setClassname("antlr.Tool"); @@ -277,6 +283,12 @@ int err = run(commandline.getCommandline()); if (err == 1) { throw new BuildException("ANTLR returned: " + err, getLocation()); + } else { + String output = bos.toString(); + if (output.indexOf("error:") > -1) { + throw new BuildException("ANTLR signaled an error: " + + output, getLocation()); + } } } else { log("Skipped grammar file. Generated file is newer.", Project.MSG_VERBOSE); @@ -352,8 +364,14 @@ /** execute in a forked VM */ private int run(String[] command) throws BuildException { - Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, - Project.MSG_WARN), null); + PumpStreamHandler psh = + new PumpStreamHandler(new LogOutputStream(this, Project.MSG_INFO), + new TeeOutputStream( + new LogOutputStream(this, + Project.MSG_WARN), + bos) + ); + Execute exe = new Execute(psh, null); exe.setAntRun(getProject()); if (workingdir != null) { exe.setWorkingDirectory(workingdir); @@ -363,6 +381,11 @@ return exe.execute(); } catch (IOException e) { throw new BuildException(e, getLocation()); + } finally { + try { + bos.close(); + } catch (IOException e) { + } } } }