git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274776 13f79535-47bb-0310-9956-ffa450edef68master
@@ -155,8 +155,8 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
*/ | |||
private void findNextResource() { | |||
URL url = null; | |||
while ((pathElementsIndex < pathComponents.size()) && | |||
(url == null)) { | |||
while ((pathElementsIndex < pathComponents.size()) | |||
&& (url == null)) { | |||
try { | |||
File pathComponent | |||
= (File) pathComponents.elementAt(pathElementsIndex); | |||
@@ -266,7 +266,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
/** | |||
* Create an Ant Class Loader | |||
* Create an Ant Class Loader | |||
*/ | |||
public AntClassLoader() { | |||
setParent(null); | |||
@@ -353,7 +353,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
} | |||
/** | |||
* Set the project associated with this class loader | |||
* Set the project associated with this class loader | |||
* | |||
* @param project the project instance | |||
*/ | |||
@@ -366,7 +366,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
/** | |||
* Set the classpath to search for classes to load. This should not be | |||
* changed once the classloader starts to server classes | |||
* changed once the classloader starts to server classes | |||
* | |||
* @param classpath the serahc classpath consisting of directories and | |||
* jar/zip files. | |||
@@ -403,7 +403,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
/** | |||
* Control whether class lookup is delegated to the parent loader first | |||
* or after this loader. Use with extreme caution. Setting this to | |||
* or after this loader. Use with extreme caution. Setting this to | |||
* false violates the class loader hierarchy and can lead to Linkage errors | |||
* | |||
* @param parentFirst if true, delegate initial class search to the parent | |||
@@ -483,7 +483,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
throw new BuildException(e); | |||
} | |||
} | |||
/** | |||
* Add a file to the path | |||
* | |||
@@ -492,7 +492,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
* | |||
* @throws IOException if data needed from the file cannot be read. | |||
*/ | |||
protected void addPathFile(File pathComponent) throws IOException { | |||
protected void addPathFile(File pathComponent) throws IOException { | |||
pathComponents.addElement(pathComponent); | |||
} | |||
@@ -986,11 +986,11 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
if (isParentFirst(classname)) { | |||
try { | |||
theClass = findBaseClass(classname); | |||
log("Class " + classname + " loaded from parent loader " | |||
log("Class " + classname + " loaded from parent loader " | |||
+ "(parentFirst)", Project.MSG_DEBUG); | |||
} catch (ClassNotFoundException cnfe) { | |||
theClass = findClass(classname); | |||
log("Class " + classname + " loaded from ant loader " | |||
log("Class " + classname + " loaded from ant loader " | |||
+ "(parentFirst)", Project.MSG_DEBUG); | |||
} | |||
} else { | |||
@@ -1073,7 +1073,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
return defineClass(classname, classData, 0, classData.length); | |||
} | |||
} | |||
/** | |||
* Reads a class definition from a stream. | |||
* | |||
@@ -1122,7 +1122,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
return findClassInComponents(name); | |||
} | |||
/** | |||
/** | |||
* Indicate if the given file is in this loader's path | |||
* | |||
* @param component the file which is to be checked | |||
@@ -1138,7 +1138,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
} | |||
return false; | |||
} | |||
/** | |||
* Finds a class on the given classpath. | |||
@@ -1164,7 +1164,7 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
try { | |||
stream = getResourceStream(pathComponent, classFilename); | |||
if (stream != null) { | |||
log("Loaded from " + pathComponent + " " | |||
log("Loaded from " + pathComponent + " " | |||
+ classFilename, Project.MSG_DEBUG); | |||
return getClassFromStream(stream, name, pathComponent); | |||
} | |||
@@ -1184,7 +1184,9 @@ public class AntClassLoader extends ClassLoader implements BuildListener { | |||
if (stream != null) { | |||
stream.close(); | |||
} | |||
} catch (IOException e) {} | |||
} catch (IOException e) { | |||
//ignore | |||
} | |||
} | |||
} | |||
@@ -65,14 +65,14 @@ import java.util.EventObject; | |||
* @author Matt Foemmel | |||
*/ | |||
public class BuildEvent extends EventObject { | |||
/** Project which emitted the event. */ | |||
private Project project; | |||
/** Target which emitted the event, if specified. */ | |||
private Target target; | |||
/** Task which emitted the event, if specified. */ | |||
private Task task; | |||
/** | |||
/** | |||
* Message associated with the event. This is only used for | |||
* "messageLogged" events. | |||
*/ | |||
@@ -83,7 +83,7 @@ public class BuildEvent extends EventObject { | |||
private int priority = Project.MSG_VERBOSE; | |||
/** | |||
* The exception associated with this event, if any. | |||
* This is only used for "taskFinished", "targetFinished", | |||
* This is only used for "taskFinished", "targetFinished", | |||
* and "buildFinished" events. | |||
*/ | |||
private Throwable exception; | |||
@@ -100,7 +100,7 @@ public class BuildEvent extends EventObject { | |||
this.target = null; | |||
this.task = null; | |||
} | |||
/** | |||
* Construct a BuildEvent for a target level event. | |||
* The project associated with the event is derived | |||
@@ -115,10 +115,10 @@ public class BuildEvent extends EventObject { | |||
this.target = target; | |||
this.task = null; | |||
} | |||
/** | |||
* Construct a BuildEvent for a task level event. | |||
* The project and target associated with the event | |||
* The project and target associated with the event | |||
* are derived from the given task. | |||
* | |||
* @param task the task that emitted the event. | |||
@@ -134,7 +134,7 @@ public class BuildEvent extends EventObject { | |||
/** | |||
* Sets the message and priority associated with this event. | |||
* This is used for "messageLogged" events. | |||
* | |||
* | |||
* @param message the message to be associated with this event. | |||
* Should not be <code>null</code>. | |||
* @param priority the priority to be associated with this event, | |||
@@ -146,12 +146,12 @@ public class BuildEvent extends EventObject { | |||
this.message = message; | |||
this.priority = priority; | |||
} | |||
/** | |||
* Sets the exception associated with this event. This is used | |||
* for "taskFinished", "targetFinished", and "buildFinished" | |||
* Sets the exception associated with this event. This is used | |||
* for "taskFinished", "targetFinished", and "buildFinished" | |||
* events. | |||
* | |||
* | |||
* @param exception The exception to be associated with this event. | |||
* May be <code>null</code>. | |||
* | |||
@@ -165,7 +165,7 @@ public class BuildEvent extends EventObject { | |||
/** | |||
* Returns the project that fired this event. | |||
* | |||
* | |||
* @return the project that fired this event | |||
*/ | |||
public Project getProject() { | |||
@@ -174,18 +174,18 @@ public class BuildEvent extends EventObject { | |||
/** | |||
* Returns the target that fired this event. | |||
* | |||
* | |||
* @return the project that fired this event, or <code>null</code> | |||
* if this event is a project level event. | |||
*/ | |||
public Target getTarget() { | |||
return target; | |||
} | |||
/** | |||
* Returns the task that fired this event. | |||
* | |||
* | |||
* @return the task that fired this event, or <code>null</code> | |||
* if this event is a project or target level event. | |||
*/ | |||
@@ -199,7 +199,7 @@ public class BuildEvent extends EventObject { | |||
* | |||
* @return the message associated with this event, or <code>null</code> | |||
* if no message has been set. | |||
* | |||
* | |||
* @see BuildListener#messageLogged(BuildEvent) | |||
*/ | |||
public String getMessage() { | |||
@@ -210,12 +210,12 @@ public class BuildEvent extends EventObject { | |||
* Returns the priority of the logging message. This field will only | |||
* be set for "messageLogged" events. The meaning of this priority | |||
* is as specified by the constants in the {@link Project Project} class. | |||
* | |||
* | |||
* @return the priority associated with this event. | |||
* | |||
* @see BuildListener#messageLogged(BuildEvent) | |||
*/ | |||
public int getPriority(){ | |||
public int getPriority() { | |||
return priority; | |||
} | |||
@@ -223,8 +223,8 @@ public class BuildEvent extends EventObject { | |||
* Returns the exception that was thrown, if any. This field will only | |||
* be set for "taskFinished", "targetFinished", and "buildFinished" | |||
* events. | |||
* | |||
* @return the exception associated with this exception, or | |||
* | |||
* @return the exception associated with this exception, or | |||
* <code>null</code> if no exception has been set. | |||
* | |||
* @see BuildListener#taskFinished(BuildEvent) | |||
@@ -57,7 +57,7 @@ package org.apache.tools.ant; | |||
import java.util.EventListener; | |||
/** | |||
* Instances of classes that implement this interface can register | |||
* Instances of classes that implement this interface can register | |||
* to be notified when things happened during a build. | |||
* | |||
* @see BuildEvent | |||
@@ -70,7 +70,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals that a build has started. This event | |||
* is fired before any targets have started. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -79,7 +79,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals that the last target has finished. This event | |||
* will still be fired if an error occurred during the build. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
* | |||
@@ -89,7 +89,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals that a target is starting. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
* | |||
@@ -100,7 +100,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals that a target has finished. This event will | |||
* still be fired if an error occurred during the build. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
* | |||
@@ -110,7 +110,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals that a task is starting. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
* | |||
@@ -131,7 +131,7 @@ public interface BuildListener extends EventListener { | |||
/** | |||
* Signals a message logging event. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
* | |||
@@ -57,32 +57,32 @@ package org.apache.tools.ant; | |||
import java.io.PrintStream; | |||
/** | |||
* Interface used by Ant to log the build output. | |||
* Interface used by Ant to log the build output. | |||
* | |||
* A build logger is a build listener which has the 'right' to send output to | |||
* the ant log, which is usually <code>System.out</code> unless redirected by | |||
* A build logger is a build listener which has the 'right' to send output to | |||
* the ant log, which is usually <code>System.out</code> unless redirected by | |||
* the <code>-logfile</code> option. | |||
* | |||
* @author Conor MacNeill | |||
*/ | |||
public interface BuildLogger extends BuildListener { | |||
/** | |||
* Sets the highest level of message this logger should respond to. | |||
* | |||
* Only messages with a message level lower than or equal to the | |||
* Only messages with a message level lower than or equal to the | |||
* given level should be written to the log. | |||
* <P> | |||
* Constants for the message levels are in the | |||
* {@link Project Project} class. The order of the levels, from least | |||
* to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, | |||
* <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, | |||
* Constants for the message levels are in the | |||
* {@link Project Project} class. The order of the levels, from least | |||
* to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, | |||
* <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, | |||
* <code>MSG_DEBUG</code>. | |||
* | |||
* @param level the logging level for the logger. | |||
*/ | |||
void setMessageOutputLevel(int level); | |||
/** | |||
* Sets the output stream to which this logger is to send its output. | |||
* | |||
@@ -90,7 +90,7 @@ public interface BuildLogger extends BuildListener { | |||
* Must not be <code>null</code>. | |||
*/ | |||
void setOutputPrintStream(PrintStream output); | |||
/** | |||
* Sets this logger to produce emacs (and other editor) friendly output. | |||
* | |||
@@ -105,5 +105,5 @@ public interface BuildLogger extends BuildListener { | |||
* @param err The error stream for the logger. | |||
* Must not be <code>null</code>. | |||
*/ | |||
void setErrorPrintStream(PrintStream err); | |||
void setErrorPrintStream(PrintStream err); | |||
} |
@@ -105,8 +105,8 @@ public class ComponentHelper { | |||
*/ | |||
private Hashtable createdTasks = new Hashtable(); | |||
protected ComponentHelper next; | |||
protected Project project; | |||
private ComponentHelper next; | |||
private Project project; | |||
/** | |||
* find a project component for a specific project, creating | |||
@@ -69,7 +69,7 @@ import org.apache.tools.ant.util.StringUtils; | |||
* @author Matt Foemmel | |||
*/ | |||
public class DefaultLogger implements BuildLogger { | |||
/** | |||
/** | |||
* Size of left-hand column for right-justified task name. | |||
* @see #messageLogged(BuildEvent) | |||
*/ | |||
@@ -77,16 +77,19 @@ public class DefaultLogger implements BuildLogger { | |||
/** PrintStream to write non-error messages to */ | |||
protected PrintStream out; | |||
/** PrintStream to write error messages to */ | |||
protected PrintStream err; | |||
/** Lowest level of message to write out */ | |||
protected int msgOutputLevel = Project.MSG_ERR; | |||
/** Time of the start of the build */ | |||
private long startTime = System.currentTimeMillis(); | |||
/** Line separator */ | |||
protected static final String lSep = StringUtils.LINE_SEP; | |||
/** Whether or not to use emacs-style output */ | |||
protected boolean emacsMode = false; | |||
@@ -99,17 +102,17 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Sets the highest level of message this logger should respond to. | |||
* | |||
* Only messages with a message level lower than or equal to the | |||
* Only messages with a message level lower than or equal to the | |||
* given level should be written to the log. | |||
* <P> | |||
* Constants for the message levels are in the | |||
* {@link Project Project} class. The order of the levels, from least | |||
* to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, | |||
* <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, | |||
* Constants for the message levels are in the | |||
* {@link Project Project} class. The order of the levels, from least | |||
* to most verbose, is <code>MSG_ERR</code>, <code>MSG_WARN</code>, | |||
* <code>MSG_INFO</code>, <code>MSG_VERBOSE</code>, | |||
* <code>MSG_DEBUG</code>. | |||
* <P> | |||
* The default message level for DefaultLogger is Project.MSG_ERR. | |||
* | |||
* | |||
* @param level the logging level for the logger. | |||
*/ | |||
public void setMessageOutputLevel(int level) { | |||
@@ -148,7 +151,7 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Responds to a build being started by just remembering the current time. | |||
* | |||
* | |||
* @param event Ignored. | |||
*/ | |||
public void buildStarted(BuildEvent event) { | |||
@@ -159,7 +162,7 @@ public class DefaultLogger implements BuildLogger { | |||
* Prints whether the build succeeded or failed, | |||
* any errors the occured during the build, and | |||
* how long the build took. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -175,8 +178,8 @@ public class DefaultLogger implements BuildLogger { | |||
message.append("BUILD FAILED"); | |||
message.append(StringUtils.LINE_SEP); | |||
if (Project.MSG_VERBOSE <= msgOutputLevel || | |||
!(error instanceof BuildException)) { | |||
if (Project.MSG_VERBOSE <= msgOutputLevel | |||
|| !(error instanceof BuildException)) { | |||
message.append(StringUtils.getStackTrace(error)); | |||
} else { | |||
if (error instanceof BuildException) { | |||
@@ -202,14 +205,14 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Logs a message to say that the target has started if this | |||
* logger allows information-level messages. | |||
* | |||
* | |||
* @param event An event with any relevant extra information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
public void targetStarted(BuildEvent event) { | |||
if (Project.MSG_INFO <= msgOutputLevel | |||
&& !event.getTarget().getName().equals("")) { | |||
String msg = StringUtils.LINE_SEP | |||
String msg = StringUtils.LINE_SEP | |||
+ event.getTarget().getName() + ":"; | |||
printMessage(msg, out, event.getPriority()); | |||
log(msg); | |||
@@ -218,30 +221,33 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* No-op implementation. | |||
* | |||
* | |||
* @param event Ignored. | |||
*/ | |||
public void targetFinished(BuildEvent event) {} | |||
public void targetFinished(BuildEvent event) { | |||
} | |||
/** | |||
* No-op implementation. | |||
* | |||
* | |||
* @param event Ignored. | |||
*/ | |||
public void taskStarted(BuildEvent event) {} | |||
public void taskStarted(BuildEvent event) { | |||
} | |||
/** | |||
* No-op implementation. | |||
* | |||
* | |||
* @param event Ignored. | |||
*/ | |||
public void taskFinished(BuildEvent event) {} | |||
public void taskFinished(BuildEvent event) { | |||
} | |||
/** | |||
* Logs a message, if the priority is suitable. | |||
* In non-emacs mode, task level messages are prefixed by the | |||
* task name which is right-justified. | |||
* | |||
* | |||
* @param event A BuildEvent containing message information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -264,7 +270,7 @@ public class DefaultLogger implements BuildLogger { | |||
label = tmp.toString(); | |||
try { | |||
BufferedReader r = | |||
BufferedReader r = | |||
new BufferedReader( | |||
new StringReader(event.getMessage())); | |||
String line = r.readLine(); | |||
@@ -297,9 +303,9 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Convenience method to format a specified length of time. | |||
* | |||
* | |||
* @param millis Length of time to format, in milliseonds. | |||
* | |||
* | |||
* @return the time as a formatted string. | |||
* | |||
* @see DateUtils#formatElapsedTime(long) | |||
@@ -310,12 +316,12 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Prints a message to a PrintStream. | |||
* | |||
* @param message The message to print. | |||
* | |||
* @param message The message to print. | |||
* Should not be <code>null</code>. | |||
* @param stream A PrintStream to print the message to. | |||
* @param stream A PrintStream to print the message to. | |||
* Must not be <code>null</code>. | |||
* @param priority The priority of the message. | |||
* @param priority The priority of the message. | |||
* (Ignored in this implementation.) | |||
*/ | |||
protected void printMessage(final String message, | |||
@@ -327,8 +333,9 @@ public class DefaultLogger implements BuildLogger { | |||
/** | |||
* Empty implementation which allows subclasses to receive the | |||
* same output that is generated here. | |||
* | |||
* | |||
* @param message Message being logged. Should not be <code>null</code>. | |||
*/ | |||
protected void log(String message) {} | |||
protected void log(String message) { | |||
} | |||
} |
@@ -59,7 +59,7 @@ import java.io.InputStream; | |||
/** | |||
* | |||
* Passes input requests tot he project objetc for demuxing into | |||
* Passes input requests tot he project objetc for demuxing into | |||
* individual tasks and threads. | |||
* | |||
* @since Ant 1.6 | |||
@@ -71,7 +71,7 @@ public class DemuxInputStream extends InputStream { | |||
* The project to from which to get input. | |||
*/ | |||
private Project project; | |||
/** | |||
* Create a DemuxInputStream for the given project | |||
* | |||
@@ -91,7 +91,7 @@ public class DemuxInputStream extends InputStream { | |||
} | |||
return buffer[0]; | |||
} | |||
/** | |||
* @see InputStream.read(byte[], int, int) | |||
@@ -78,18 +78,18 @@ public class DemuxOutputStream extends OutputStream { | |||
* The per-thread output stream. | |||
*/ | |||
private ByteArrayOutputStream buffer; | |||
/** | |||
/** | |||
* Whether or not the next line-terminator should be skipped in terms | |||
* of processing the buffer. Used to avoid \r\n invoking | |||
* processBuffer twice. | |||
*/ | |||
private boolean skip = false; | |||
} | |||
/** Maximum buffer size. */ | |||
private static final int MAX_SIZE = 1024; | |||
/** Mapping from thread to buffer (Thread to BufferInfo). */ | |||
private Hashtable buffers = new Hashtable(); | |||
@@ -102,14 +102,14 @@ public class DemuxOutputStream extends OutputStream { | |||
* Whether or not this stream represents an error stream. | |||
*/ | |||
private boolean isErrorStream; | |||
/** | |||
* Creates a new instance of this class. | |||
* | |||
* @param project The project instance for which output is being | |||
* @param project The project instance for which output is being | |||
* demultiplexed. Must not be <code>null</code>. | |||
* @param isErrorStream <code>true</code> if this is the error string, | |||
* otherwise a normal output stream. This is | |||
* @param isErrorStream <code>true</code> if this is the error string, | |||
* otherwise a normal output stream. This is | |||
* passed to the project so it knows | |||
* which stream it is receiving. | |||
*/ | |||
@@ -120,7 +120,7 @@ public class DemuxOutputStream extends OutputStream { | |||
/** | |||
* Returns the buffer associated with the current thread. | |||
* | |||
* | |||
* @return a BufferInfo for the current thread to write data to | |||
*/ | |||
private BufferInfo getBufferInfo() { | |||
@@ -138,7 +138,7 @@ public class DemuxOutputStream extends OutputStream { | |||
/** | |||
* Resets the buffer for the current thread. | |||
*/ | |||
private void resetBufferInfo() { | |||
private void resetBufferInfo() { | |||
Thread current = Thread.currentThread(); | |||
BufferInfo bufferInfo = (BufferInfo) buffers.get(current); | |||
try { | |||
@@ -149,11 +149,11 @@ public class DemuxOutputStream extends OutputStream { | |||
bufferInfo.buffer = new ByteArrayOutputStream(); | |||
bufferInfo.skip = false; | |||
} | |||
/** | |||
* Removes the buffer for the current thread. | |||
*/ | |||
private void removeBuffer() { | |||
private void removeBuffer() { | |||
Thread current = Thread.currentThread(); | |||
buffers.remove (current); | |||
} | |||
@@ -187,7 +187,7 @@ public class DemuxOutputStream extends OutputStream { | |||
* | |||
* @param buffer the ByteArrayOutputStream used to collect the output | |||
* until a line separator is seen. | |||
* | |||
* | |||
* @see Project#demuxOutput(String,boolean) | |||
*/ | |||
protected void processBuffer(ByteArrayOutputStream buffer) { | |||
@@ -201,7 +201,7 @@ public class DemuxOutputStream extends OutputStream { | |||
* | |||
* @param buffer the ByteArrayOutputStream used to collect the output | |||
* until a line separator is seen. | |||
* | |||
* | |||
* @see Project#demuxOutput(String,boolean) | |||
*/ | |||
protected void processFlush(ByteArrayOutputStream buffer) { | |||
@@ -214,7 +214,7 @@ public class DemuxOutputStream extends OutputStream { | |||
* Equivalent to flushing the stream. | |||
* | |||
* @exception IOException if there is a problem closing the stream. | |||
* | |||
* | |||
* @see #flush | |||
*/ | |||
public void close() throws IOException { | |||
@@ -77,11 +77,11 @@ import java.lang.reflect.InvocationTargetException; | |||
*/ | |||
public final class Diagnostics { | |||
private static final String TEST_CLASS | |||
private static final String TEST_CLASS | |||
= "org.apache.tools.ant.taskdefs.optional.Test"; | |||
/** utility class */ | |||
private Diagnostics(){ | |||
private Diagnostics() { | |||
} | |||
/** | |||
@@ -92,7 +92,7 @@ public final class Diagnostics { | |||
public static boolean isOptionalAvailable() { | |||
try { | |||
Class.forName(TEST_CLASS); | |||
} catch (ClassNotFoundException e){ | |||
} catch (ClassNotFoundException e) { | |||
return false; | |||
} | |||
return true; | |||
@@ -105,19 +105,19 @@ public final class Diagnostics { | |||
*/ | |||
public static void validateVersion() throws BuildException { | |||
try { | |||
Class optional | |||
Class optional | |||
= Class.forName("org.apache.tools.ant.taskdefs.optional.Test"); | |||
String coreVersion = getImplementationVersion(Main.class); | |||
String optionalVersion = getImplementationVersion(optional); | |||
if (coreVersion != null && !coreVersion.equals(optionalVersion)) { | |||
throw new BuildException( | |||
"Invalid implementation version between Ant core and " | |||
+ "Ant optional tasks.\n" + | |||
" core : " + coreVersion + "\n" + | |||
" optional: " + optionalVersion); | |||
throw new BuildException("Invalid implementation version " | |||
+ "between Ant core and Ant optional tasks.\n" | |||
+ " core : " + coreVersion + "\n" | |||
+ " optional: " + optionalVersion); | |||
} | |||
} catch (ClassNotFoundException e){ | |||
} catch (ClassNotFoundException e) { | |||
// ignore | |||
} | |||
} | |||
@@ -144,7 +144,7 @@ public final class Diagnostics { | |||
return null; | |||
} | |||
File[] files = new File[filenames.length]; | |||
for (int i = 0; i < filenames.length; i++){ | |||
for (int i = 0; i < filenames.length; i++) { | |||
files[i] = new File(libDir, filenames[i]); | |||
} | |||
return files; | |||
@@ -154,7 +154,7 @@ public final class Diagnostics { | |||
* main entry point for command line | |||
* @param args command line arguments. | |||
*/ | |||
public static void main(String[] args){ | |||
public static void main(String[] args) { | |||
doReport(System.out); | |||
} | |||
@@ -165,18 +165,18 @@ public final class Diagnostics { | |||
* @return null if there is no package or implementation version. | |||
* '?.?' for JDK 1.0 or 1.1. | |||
*/ | |||
private static String getImplementationVersion(Class clazz){ | |||
private static String getImplementationVersion(Class clazz) { | |||
try { | |||
// Package pkg = clazz.getPackage(); | |||
// Package pkg = clazz.getPackage(); | |||
Method method = Class.class.getMethod("getPackage", new Class[0]); | |||
Object pkg = method.invoke(clazz, null); | |||
if (pkg != null) { | |||
// pkg.getImplementationVersion(); | |||
method = pkg.getClass().getMethod("getImplementationVersion", new Class[0]); | |||
Object version = method.invoke(pkg, null); | |||
Object version = method.invoke(pkg, null); | |||
return (String) version; | |||
} | |||
} catch (Exception e){ | |||
} catch (Exception e) { | |||
// JDK < 1.2 should land here because the methods above don't exist. | |||
return "?.?"; | |||
} | |||
@@ -211,6 +211,7 @@ public final class Diagnostics { | |||
try { | |||
saxParser = saxParserFactory.newSAXParser(); | |||
} catch (Exception e) { | |||
// ignore | |||
} | |||
return saxParser; | |||
} | |||
@@ -245,7 +246,7 @@ public final class Diagnostics { | |||
* Print a report to the given stream. | |||
* @param out the stream to print the report to. | |||
*/ | |||
public static void doReport(PrintStream out){ | |||
public static void doReport(PrintStream out) { | |||
out.println("------- Ant diagnostics report -------"); | |||
out.println(Main.getAntVersion()); | |||
out.println(); | |||
@@ -258,9 +259,9 @@ public final class Diagnostics { | |||
try { | |||
optional = Class.forName( | |||
"org.apache.tools.ant.taskdefs.optional.Test"); | |||
out.println("optional tasks : " | |||
out.println("optional tasks : " | |||
+ getImplementationVersion(optional)); | |||
} catch (ClassNotFoundException e){ | |||
} catch (ClassNotFoundException e) { | |||
out.println("optional tasks : not available"); | |||
} | |||
@@ -302,7 +303,7 @@ public final class Diagnostics { | |||
* Report a listing of system properties existing in the current vm. | |||
* @param out the stream to print the properties to. | |||
*/ | |||
private static void doReportSystemProperties(PrintStream out){ | |||
private static void doReportSystemProperties(PrintStream out) { | |||
for (Enumeration keys = System.getProperties().keys(); | |||
keys.hasMoreElements();) { | |||
String key = (String) keys.nextElement(); | |||
@@ -315,14 +316,14 @@ public final class Diagnostics { | |||
* Report the content of ANT_HOME/lib directory | |||
* @param out the stream to print the content to | |||
*/ | |||
private static void doReportLibraries(PrintStream out){ | |||
private static void doReportLibraries(PrintStream out) { | |||
out.println("ant.home: " + System.getProperty("ant.home")); | |||
File[] libs = listLibraries(); | |||
if (libs == null) { | |||
out.println("Unable to list libraries."); | |||
return; | |||
} | |||
for (int i = 0; i < libs.length; i++){ | |||
for (int i = 0; i < libs.length; i++) { | |||
out.println(libs[i].getName() | |||
+ " (" + libs[i].length() + " bytes)"); | |||
} | |||
@@ -333,12 +334,12 @@ public final class Diagnostics { | |||
* Call org.apache.env.Which if available | |||
* @param out the stream to print the content to. | |||
*/ | |||
private static void doReportWhich(PrintStream out){ | |||
private static void doReportWhich(PrintStream out) { | |||
Throwable error = null; | |||
try { | |||
Class which = Class.forName("org.apache.env.Which"); | |||
Method method | |||
= which.getMethod("main", new Class[]{ String[].class }); | |||
Method method | |||
= which.getMethod("main", new Class[]{String[].class}); | |||
method.invoke(null, new Object[]{new String[]{}}); | |||
} catch (ClassNotFoundException e) { | |||
out.println("Not available."); | |||
@@ -363,7 +364,7 @@ public final class Diagnostics { | |||
* @param out the stream to print the tasks report to | |||
* <tt>null</tt> for a missing stream (ie mapping). | |||
*/ | |||
private static void doReportTasksAvailability(PrintStream out){ | |||
private static void doReportTasksAvailability(PrintStream out) { | |||
InputStream is = Main.class.getResourceAsStream( | |||
"/org/apache/tools/ant/taskdefs/defaults.properties"); | |||
if (is == null) { | |||
@@ -372,13 +373,13 @@ public final class Diagnostics { | |||
Properties props = new Properties(); | |||
try { | |||
props.load(is); | |||
for (Enumeration keys = props.keys(); keys.hasMoreElements();){ | |||
for (Enumeration keys = props.keys(); keys.hasMoreElements();) { | |||
String key = (String) keys.nextElement(); | |||
String classname = props.getProperty(key); | |||
try { | |||
Class.forName(classname); | |||
props.remove(key); | |||
} catch (ClassNotFoundException e){ | |||
} catch (ClassNotFoundException e) { | |||
out.println(key + " : Not Available"); | |||
} catch (NoClassDefFoundError e) { | |||
String pkg = e.getMessage().replace('/', '.'); | |||
@@ -387,10 +388,10 @@ public final class Diagnostics { | |||
out.println(key + " : Initialization error"); | |||
} | |||
} | |||
if (props.size() == 0){ | |||
if (props.size() == 0) { | |||
out.println("All defined tasks are available"); | |||
} | |||
} catch (IOException e){ | |||
} catch (IOException e) { | |||
out.println(e.getMessage()); | |||
} | |||
} | |||
@@ -152,7 +152,7 @@ import org.apache.tools.ant.util.FileUtils; | |||
* @author <a href="mailto:bruce@callenish.com">Bruce Atherton</a> | |||
* @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a> | |||
*/ | |||
public class DirectoryScanner | |||
public class DirectoryScanner | |||
implements FileScanner, SelectorScanner, ResourceFactory { | |||
@@ -174,7 +174,7 @@ public class DirectoryScanner | |||
"**/.#*", | |||
"**/%*%", | |||
"**/._*", | |||
// CVS | |||
"**/CVS", | |||
"**/CVS/**", | |||
@@ -200,7 +200,7 @@ public class DirectoryScanner | |||
* | |||
* @see #addDefaultExcludes() | |||
*/ | |||
private static Vector defaultExcludes = new Vector(); | |||
private static Vector defaultExcludes = new Vector(); | |||
static { | |||
for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { | |||
@@ -405,8 +405,8 @@ public class DirectoryScanner | |||
/** | |||
* Get the list of patterns that should be excluded by default. | |||
* | |||
* @return An array of <code>String</code> based on the current | |||
* contents of the <code>defaultExcludes</code> | |||
* @return An array of <code>String</code> based on the current | |||
* contents of the <code>defaultExcludes</code> | |||
* <code>Vector</code>. | |||
* | |||
* @since Ant 1.6 | |||
@@ -417,17 +417,17 @@ public class DirectoryScanner | |||
} | |||
/** | |||
* Add a pattern to the default excludes unless it is already a | |||
* Add a pattern to the default excludes unless it is already a | |||
* default exclude. | |||
* | |||
* @param s A string to add as an exclude pattern. | |||
* @return <code>true</code> if the string was added | |||
* @return <code>true</code> if the string was added | |||
* <code>false</code> if it already | |||
* existed. | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
public static boolean addDefaultExclude(String s){ | |||
public static boolean addDefaultExclude(String s) { | |||
if (defaultExcludes.indexOf(s) == -1) { | |||
defaultExcludes.add(s); | |||
return true; | |||
@@ -439,7 +439,7 @@ public class DirectoryScanner | |||
* Remove a string if it is a default exclude. | |||
* | |||
* @param s The string to attempt to remove. | |||
* @return <code>true</code> if <code>s</code> was a default | |||
* @return <code>true</code> if <code>s</code> was a default | |||
* exclude (and thus was removed), | |||
* <code>false</code> if <code>s</code> was not | |||
* in the default excludes list to begin with | |||
@@ -859,7 +859,7 @@ public class DirectoryScanner | |||
protected boolean isSelected(String name, File file) { | |||
if (selectors != null) { | |||
for (int i = 0; i < selectors.length; i++) { | |||
if ((selectors[i].isSelected(basedir, name, file)) == false) { | |||
if (!selectors[i].isSelected(basedir, name, file)) { | |||
return false; | |||
} | |||
} | |||
@@ -1013,7 +1013,7 @@ public class DirectoryScanner | |||
} | |||
String[] defaultExcludesTemp = getDefaultExcludes(); | |||
for (int i = 0; i < defaultExcludesTemp.length; i++) { | |||
newExcludes[i + excludesLength] = | |||
newExcludes[i + excludesLength] = | |||
defaultExcludesTemp[i].replace('/', File.separatorChar) | |||
.replace('\\', File.separatorChar); | |||
} | |||
@@ -1029,7 +1029,7 @@ public class DirectoryScanner | |||
*/ | |||
public Resource getResource(String name) { | |||
File f = fileUtils.resolveFile(basedir, name); | |||
return new Resource(name, f.exists(), f.lastModified(), | |||
return new Resource(name, f.exists(), f.lastModified(), | |||
f.isDirectory()); | |||
} | |||
@@ -61,14 +61,14 @@ package org.apache.tools.ant; | |||
* @since Ant 1.5 | |||
*/ | |||
public interface DynamicConfigurator { | |||
/** | |||
* Set a named attribute to the given value | |||
* | |||
* | |||
* @param name the name of the attribute | |||
* @param value the new value of the attribute | |||
* @throws BuildException when any error occurs | |||
*/ | |||
*/ | |||
void setDynamicAttribute(String name, String value) | |||
throws BuildException; | |||
@@ -78,6 +78,6 @@ public interface DynamicConfigurator { | |||
* @param name the element nbame | |||
* @throws BuildException when any error occurs | |||
* @return the element created | |||
*/ | |||
*/ | |||
Object createDynamicElement(String name) throws BuildException; | |||
} |
@@ -56,46 +56,48 @@ package org.apache.tools.ant; | |||
import java.io.File; | |||
/** | |||
* An interface used to describe the actions required of any type of | |||
* An interface used to describe the actions required of any type of | |||
* directory scanner. | |||
* | |||
* @author Apache Ant | |||
*/ | |||
public interface FileScanner { | |||
/** | |||
* Adds default exclusions to the current exclusions set. | |||
*/ | |||
void addDefaultExcludes(); | |||
/** | |||
* Returns the base directory to be scanned. | |||
* Returns the base directory to be scanned. | |||
* This is the directory which is scanned recursively. | |||
* | |||
* @return the base directory to be scanned | |||
*/ | |||
File getBasedir(); | |||
/** | |||
* Returns the names of the directories which matched at least one of the | |||
* Returns the names of the directories which matched at least one of the | |||
* include patterns and at least one of the exclude patterns. | |||
* The names are relative to the base directory. | |||
* | |||
* @return the names of the directories which matched at least one of the | |||
* | |||
* @return the names of the directories which matched at least one of the | |||
* include patterns and at least one of the exclude patterns. | |||
*/ | |||
String[] getExcludedDirectories(); | |||
/** | |||
* Returns the names of the files which matched at least one of the | |||
* Returns the names of the files which matched at least one of the | |||
* include patterns and at least one of the exclude patterns. | |||
* The names are relative to the base directory. | |||
* | |||
* @return the names of the files which matched at least one of the | |||
* @return the names of the files which matched at least one of the | |||
* include patterns and at at least one of the exclude patterns. | |||
* | |||
*/ | |||
* | |||
*/ | |||
String[] getExcludedFiles(); | |||
/** | |||
* Returns the names of the directories which matched at least one of the | |||
* Returns the names of the directories which matched at least one of the | |||
* include patterns and none of the exclude patterns. | |||
* The names are relative to the base directory. | |||
* | |||
@@ -103,9 +105,9 @@ public interface FileScanner { | |||
* include patterns and none of the exclude patterns. | |||
*/ | |||
String[] getIncludedDirectories(); | |||
/** | |||
* Returns the names of the files which matched at least one of the | |||
* Returns the names of the files which matched at least one of the | |||
* include patterns and none of the exclude patterns. | |||
* The names are relative to the base directory. | |||
* | |||
@@ -113,72 +115,72 @@ public interface FileScanner { | |||
* include patterns and none of the exclude patterns. | |||
*/ | |||
String[] getIncludedFiles(); | |||
/** | |||
* Returns the names of the directories which matched none of the include | |||
* patterns. The names are relative to the base directory. | |||
* | |||
* @return the names of the directories which matched none of the include | |||
* patterns. | |||
*/ | |||
*/ | |||
String[] getNotIncludedDirectories(); | |||
/** | |||
* Returns the names of the files which matched none of the include | |||
* Returns the names of the files which matched none of the include | |||
* patterns. The names are relative to the base directory. | |||
* | |||
* @return the names of the files which matched none of the include | |||
* @return the names of the files which matched none of the include | |||
* patterns. | |||
*/ | |||
String[] getNotIncludedFiles(); | |||
/** | |||
* Scans the base directory for files which match at least one include | |||
* pattern and don't match any exclude patterns. | |||
* | |||
* @exception IllegalStateException if the base directory was set | |||
* @exception IllegalStateException if the base directory was set | |||
* incorrectly (i.e. if it is <code>null</code>, doesn't exist, | |||
* or isn't a directory). | |||
*/ | |||
void scan() throws IllegalStateException; | |||
/** | |||
* Sets the base directory to be scanned. This is the directory which is | |||
* scanned recursively. All '/' and '\' characters should be replaced by | |||
* <code>File.separatorChar</code>, so the separator used need not match | |||
* <code>File.separatorChar</code>. | |||
* | |||
* @param basedir The base directory to scan. | |||
* @param basedir The base directory to scan. | |||
* Must not be <code>null</code>. | |||
*/ | |||
void setBasedir(String basedir); | |||
/** | |||
* Sets the base directory to be scanned. This is the directory which is | |||
* Sets the base directory to be scanned. This is the directory which is | |||
* scanned recursively. | |||
* | |||
* @param basedir The base directory for scanning. | |||
* @param basedir The base directory for scanning. | |||
* Should not be <code>null</code>. | |||
*/ | |||
void setBasedir(File basedir); | |||
/** | |||
* Sets the list of exclude patterns to use. | |||
* | |||
* @param excludes A list of exclude patterns. | |||
* May be <code>null</code>, indicating that no files | |||
* should be excluded. If a non-<code>null</code> list is | |||
* @param excludes A list of exclude patterns. | |||
* May be <code>null</code>, indicating that no files | |||
* should be excluded. If a non-<code>null</code> list is | |||
* given, all elements must be non-<code>null</code>. | |||
*/ | |||
*/ | |||
void setExcludes(String[] excludes); | |||
/** | |||
* Sets the list of include patterns to use. | |||
* | |||
* @param includes A list of include patterns. | |||
* May be <code>null</code>, indicating that all files | |||
* May be <code>null</code>, indicating that all files | |||
* should be included. If a non-<code>null</code> | |||
* list is given, all elements must be | |||
* list is given, all elements must be | |||
* non-<code>null</code>. | |||
*/ | |||
void setIncludes(String[] includes); | |||
@@ -186,7 +188,7 @@ public interface FileScanner { | |||
/** | |||
* Sets whether or not the file system should be regarded as case sensitive. | |||
* | |||
* @param isCaseSensitive whether or not the file system should be | |||
* @param isCaseSensitive whether or not the file system should be | |||
* regarded as a case sensitive one | |||
*/ | |||
void setCaseSensitive(boolean isCaseSensitive); | |||
@@ -1073,7 +1073,7 @@ public class IntrospectionHelper implements BuildListener { | |||
} | |||
addTypeMethods.add(method); | |||
} | |||
/** | |||
* Search the list of methods to find the first method | |||
@@ -1082,7 +1082,7 @@ public class IntrospectionHelper implements BuildListener { | |||
private Method findMatchingMethod(Class paramClass, List methods) { | |||
Class matchedClass = null; | |||
Method matchedMethod = null; | |||
for (int i = 0; i < methods.size(); ++i) { | |||
Method method = (Method) methods.get(i); | |||
Class methodClass = method.getParameterTypes()[0]; | |||
@@ -66,7 +66,7 @@ import org.xml.sax.Locator; | |||
* @author Matt Foemmel | |||
*/ | |||
public class Location implements Serializable { | |||
/** Name of the file. */ | |||
private String fileName; | |||
/** Line number within the file. */ | |||
@@ -87,7 +87,7 @@ public class Location implements Serializable { | |||
/** | |||
* Creates a location consisting of a file name but no line number or | |||
* column number. | |||
* | |||
* | |||
* @param fileName The name of the file. May be <code>null</code>, | |||
* in which case the location is equivalent to | |||
* {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. | |||
@@ -99,7 +99,7 @@ public class Location implements Serializable { | |||
/** | |||
* Creates a location from the SAX locator using the system ID as | |||
* the filename. | |||
* | |||
* | |||
* @param loc Must not be <code>null</code>. | |||
* | |||
* @since Ant 1.6 | |||
@@ -111,11 +111,11 @@ public class Location implements Serializable { | |||
/** | |||
* Creates a location consisting of a file name, line number and | |||
* column number. | |||
* | |||
* | |||
* @param fileName The name of the file. May be <code>null</code>, | |||
* in which case the location is equivalent to | |||
* {@link #UNKNOWN_LOCATION UNKNOWN_LOCATION}. | |||
* | |||
* | |||
* @param lineNumber Line number within the file. Use 0 for unknown | |||
* positions within a file. | |||
* @param columnNumber Column number within the line. | |||
@@ -125,16 +125,16 @@ public class Location implements Serializable { | |||
this.fileName = FileUtils.newFileUtils().fromURI(fileName); | |||
} else { | |||
this.fileName = fileName; | |||
} | |||
} | |||
this.lineNumber = lineNumber; | |||
this.columnNumber = columnNumber; | |||
} | |||
/** | |||
* Returns the file name, line number, a colon and a trailing space. | |||
* An error message can be appended easily. For unknown locations, an | |||
* Returns the file name, line number, a colon and a trailing space. | |||
* An error message can be appended easily. For unknown locations, an | |||
* empty string is returned. | |||
* | |||
* | |||
* @return a String of the form <code>"fileName: lineNumber: "</code> | |||
* if both file name and line number are known, | |||
* <code>"fileName: "</code> if only the file name is known, | |||
@@ -112,7 +112,7 @@ public class Main implements AntMain { | |||
/** Indicates whether this build is to support interactive input */ | |||
private boolean allowInput = true; | |||
/** | |||
* The Ant logger class. There may be only one logger. It will have | |||
* the right to use the 'out' PrintStream. The class must implements the | |||
@@ -180,7 +180,7 @@ public class Main implements AntMain { | |||
Main m = new Main(); | |||
m.startAnt(args, additionalUserProperties, coreLoader); | |||
} | |||
/** | |||
* Start Ant | |||
* @param args command line args | |||
@@ -189,7 +189,7 @@ public class Main implements AntMain { | |||
* @param coreLoader - not used | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
*/ | |||
public void startAnt(String[] args, Properties additionalUserProperties, | |||
ClassLoader coreLoader) { | |||
@@ -270,7 +270,7 @@ public class Main implements AntMain { | |||
*/ | |||
public Main() { | |||
} | |||
/** | |||
* Sole constructor, which parses and deals with command line | |||
* arguments. | |||
@@ -283,7 +283,7 @@ public class Main implements AntMain { | |||
protected Main(String[] args) throws BuildException { | |||
processArgs(args); | |||
} | |||
/** | |||
* Process command line arguments | |||
* | |||
@@ -610,7 +610,7 @@ public class Main implements AntMain { | |||
//System.setSecurityManager(new NoExitSecurityManager()); | |||
} | |||
try { | |||
if (allowInput) { | |||
if (allowInput) { | |||
project.setDefaultInputStream(System.in); | |||
} | |||
System.setIn(new DemuxInputStream(project)); | |||
@@ -63,11 +63,11 @@ import org.apache.tools.ant.util.StringUtils; | |||
*/ | |||
public class NoBannerLogger extends DefaultLogger { | |||
/** | |||
/** | |||
* Name of the current target, if it should | |||
* be displayed on the next message. This is | |||
* set when a target starts building, and reset | |||
* to <code>null</code> after the first message for | |||
* to <code>null</code> after the first message for | |||
* the target is logged. | |||
*/ | |||
protected String targetName; | |||
@@ -79,7 +79,7 @@ public class NoBannerLogger extends DefaultLogger { | |||
/** | |||
* Notes the name of the target so it can be logged | |||
* if it generates any messages. | |||
* | |||
* | |||
* @param event A BuildEvent containing target information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -87,9 +87,9 @@ public class NoBannerLogger extends DefaultLogger { | |||
targetName = event.getTarget().getName(); | |||
} | |||
/** | |||
/** | |||
* Resets the current target name to <code>null</code>. | |||
* | |||
* | |||
* @param event Ignored in this implementation. | |||
*/ | |||
public void targetFinished(BuildEvent event) { | |||
@@ -101,14 +101,14 @@ public class NoBannerLogger extends DefaultLogger { | |||
* priority, also logging the name of the target if this | |||
* is the first message which needs to be logged for the | |||
* target. | |||
* | |||
* | |||
* @param event A BuildEvent containing message information. | |||
* Must not be <code>null</code>. | |||
*/ | |||
public void messageLogged(BuildEvent event) { | |||
if (event.getPriority() > msgOutputLevel | |||
|| null == event.getMessage() | |||
if (event.getPriority() > msgOutputLevel | |||
|| null == event.getMessage() | |||
|| "".equals(event.getMessage().trim())) { | |||
return; | |||
} | |||
@@ -66,14 +66,14 @@ import org.apache.tools.ant.taskdefs.condition.Os; | |||
* of either '/' or '\'. | |||
* | |||
* @author Conor MacNeill | |||
* @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> | |||
*/ | |||
* @author <a href="mailto:jtulley@novell.com">Jeff Tulley</a> | |||
*/ | |||
public class PathTokenizer { | |||
/** | |||
* A tokenizer to break the string up based on the ':' or ';' separators. | |||
*/ | |||
private StringTokenizer tokenizer; | |||
/** | |||
* A String which stores any path components which have been read ahead | |||
* due to DOS filesystem compensation. | |||
@@ -95,12 +95,12 @@ public class PathTokenizer { | |||
/** | |||
* Constructs a path tokenizer for the specified path. | |||
* | |||
* | |||
* @param path The path to tokenize. Must not be <code>null</code>. | |||
*/ | |||
public PathTokenizer(String path) { | |||
if (onNetWare) { | |||
// For NetWare, use the boolean=true mode, so we can use delimiter | |||
// For NetWare, use the boolean=true mode, so we can use delimiter | |||
// information to make a better decision later. | |||
tokenizer = new StringTokenizer(path, ":;", true); | |||
} else { | |||
@@ -108,31 +108,31 @@ public class PathTokenizer { | |||
// enough information to tokenize correctly. | |||
tokenizer = new StringTokenizer(path, ":;", false); | |||
} | |||
dosStyleFilesystem = File.pathSeparatorChar == ';'; | |||
dosStyleFilesystem = File.pathSeparatorChar == ';'; | |||
} | |||
/** | |||
* Tests if there are more path elements available from this tokenizer's | |||
* path. If this method returns <code>true</code>, then a subsequent call | |||
* path. If this method returns <code>true</code>, then a subsequent call | |||
* to nextToken will successfully return a token. | |||
* | |||
* @return <code>true</code> if and only if there is at least one token | |||
* | |||
* @return <code>true</code> if and only if there is at least one token | |||
* in the string after the current position; <code>false</code> otherwise. | |||
*/ | |||
public boolean hasMoreTokens() { | |||
if (lookahead != null) { | |||
return true; | |||
} | |||
return tokenizer.hasMoreTokens(); | |||
} | |||
/** | |||
* Returns the next path element from this tokenizer. | |||
* | |||
* | |||
* @return the next path element from this tokenizer. | |||
* | |||
* @exception NoSuchElementException if there are no more elements in this | |||
* | |||
* @exception NoSuchElementException if there are no more elements in this | |||
* tokenizer's path. | |||
*/ | |||
public String nextToken() throws NoSuchElementException { | |||
@@ -142,8 +142,8 @@ public class PathTokenizer { | |||
lookahead = null; | |||
} else { | |||
token = tokenizer.nextToken().trim(); | |||
} | |||
} | |||
if (!onNetWare) { | |||
if (token.length() == 1 && Character.isLetter(token.charAt(0)) | |||
&& dosStyleFilesystem | |||
@@ -153,7 +153,7 @@ public class PathTokenizer { | |||
String nextToken = tokenizer.nextToken().trim(); | |||
if (nextToken.startsWith("\\") || nextToken.startsWith("/")) { | |||
// we know we are on a DOS style platform and the next path | |||
// starts with a slash or backslash, so we know this is a | |||
// starts with a slash or backslash, so we know this is a | |||
// drive spec | |||
token += ":" + nextToken; | |||
} else { | |||
@@ -168,15 +168,15 @@ public class PathTokenizer { | |||
// ignore ";" and get the next token | |||
token = tokenizer.nextToken().trim(); | |||
} | |||
if (tokenizer.hasMoreTokens()) { | |||
// this path could be a drive spec, so look at the next token | |||
String nextToken = tokenizer.nextToken().trim(); | |||
// make sure we aren't going to get the path separator next | |||
if (!nextToken.equals(File.pathSeparator)) { | |||
if (nextToken.equals(":")) { | |||
if (!token.startsWith("/") && !token.startsWith("\\")){ | |||
if (!token.startsWith("/") && !token.startsWith("\\")){ | |||
// it indeed is a drive spec, get the next bit | |||
String oneMore = tokenizer.nextToken().trim(); | |||
if (!oneMore.equals(File.pathSeparator)) { | |||
@@ -198,4 +198,4 @@ public class PathTokenizer { | |||
return token; | |||
} | |||
} | |||
@@ -95,7 +95,7 @@ public abstract class ProjectComponent { | |||
public Project getProject() { | |||
return project; | |||
} | |||
/** | |||
* Logs a message with the default (INFO) priority. | |||
* | |||
@@ -109,7 +109,7 @@ public abstract class ProjectComponent { | |||
* Logs a mesage with the given priority. | |||
* | |||
* @param msg The message to be logged. Should not be <code>null</code>. | |||
* @param msgLevel the message priority at which this message is | |||
* @param msgLevel the message priority at which this message is | |||
* to be logged. | |||
*/ | |||
public void log(String msg, int msgLevel) { | |||
@@ -79,18 +79,18 @@ public class RuntimeConfigurable implements Serializable { | |||
/** Name of the element to configure. */ | |||
private String elementTag = null; | |||
/** List of child element wrappers. */ | |||
private List/*<RuntimeConfigurable>*/ children = null; | |||
/** The element to configure. It is only used during | |||
* maybeConfigure. | |||
*/ | |||
private transient Object wrappedObject = null; | |||
/** | |||
/** | |||
* @deprecated | |||
* XML attributes for the element. | |||
* XML attributes for the element. | |||
*/ | |||
private transient AttributeList attributes; | |||
@@ -102,13 +102,13 @@ public class RuntimeConfigurable implements Serializable { | |||
* XXX under JDK 1.4 you can just use a LinkedHashMap for this purpose -jglick | |||
*/ | |||
private List/*<String>*/ attributeNames = null; | |||
/** Map of attribute names to values */ | |||
private Map/*<String,String>*/ attributeMap = null; | |||
/** Text appearing within the element. */ | |||
private StringBuffer characters = null; | |||
/** Indicates if the wrapped object has been configured */ | |||
private boolean proxyConfigured = false; | |||
@@ -239,7 +239,7 @@ public class RuntimeConfigurable implements Serializable { | |||
return new EmptyEnumeration(); | |||
} | |||
} | |||
static final class EmptyEnumeration implements Enumeration { | |||
public EmptyEnumeration() {} | |||
public boolean hasMoreElements() { | |||
@@ -370,7 +370,7 @@ public class RuntimeConfigurable implements Serializable { | |||
for (int i = 0; i < attributeNames.size(); i++) { | |||
String name = (String) attributeNames.get(i); | |||
String value = (String) attributeMap.get(name); | |||
// reflect these into the target | |||
value = p.replaceProperties(value); | |||
try { | |||
@@ -420,7 +420,7 @@ public class RuntimeConfigurable implements Serializable { | |||
} | |||
proxyConfigured = true; | |||
} | |||
/** | |||
* Reconfigure the element, even if it has already been configured. | |||
* | |||
@@ -86,11 +86,11 @@ public class Target implements TaskContainer { | |||
/** Sole constructor. */ | |||
public Target() { | |||
} | |||
/** | |||
* Sets the project this target belongs to. | |||
* | |||
* @param project The project this target belongs to. | |||
/** | |||
* Sets the project this target belongs to. | |||
* | |||
* @param project The project this target belongs to. | |||
* Must not be <code>null</code>. | |||
*/ | |||
public void setProject(Project project) { | |||
@@ -99,8 +99,8 @@ public class Target implements TaskContainer { | |||
/** | |||
* Returns the project this target belongs to. | |||
* | |||
* @return The project this target belongs to, or <code>null</code> if | |||
* | |||
* @return The project this target belongs to, or <code>null</code> if | |||
* the project has not been set yet. | |||
*/ | |||
public Project getProject() { | |||
@@ -110,7 +110,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Sets the list of targets this target is dependent on. | |||
* The targets themselves are not resolved at this time. | |||
* | |||
* | |||
* @param depS A comma-separated list of targets this target | |||
* depends on. Must not be <code>null</code>. | |||
*/ | |||
@@ -124,19 +124,19 @@ public class Target implements TaskContainer { | |||
// Make sure the dependency is not empty string | |||
if (token.equals("") || token.equals(",")) { | |||
throw new BuildException("Syntax Error: Depend " | |||
+ "attribute for target \"" + getName() | |||
+ "attribute for target \"" + getName() | |||
+ "\" has an empty string for dependency."); | |||
} | |||
addDependency(token); | |||
// Make sure that depends attribute does not | |||
// end in a , | |||
if (tok.hasMoreTokens()) { | |||
token = tok.nextToken(); | |||
if (!tok.hasMoreTokens() || !token.equals(",")) { | |||
throw new BuildException("Syntax Error: Depend " | |||
+ "attribute for target \"" + getName() | |||
throw new BuildException("Syntax Error: Depend " | |||
+ "attribute for target \"" + getName() | |||
+ "\" ends with a , character"); | |||
} | |||
} | |||
@@ -146,7 +146,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Sets the name of this target. | |||
* | |||
* | |||
* @param name The name of this target. Should not be <code>null</code>. | |||
*/ | |||
public void setName(String name) { | |||
@@ -155,7 +155,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Returns the name of this target. | |||
* | |||
* | |||
* @return the name of this target, or <code>null</code> if the | |||
* name has not been set yet. | |||
*/ | |||
@@ -165,7 +165,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Adds a task to this target. | |||
* | |||
* | |||
* @param task The task to be added. Must not be <code>null</code>. | |||
*/ | |||
public void addTask(Task task) { | |||
@@ -174,17 +174,17 @@ public class Target implements TaskContainer { | |||
/** | |||
* Adds the wrapper for a data type element to this target. | |||
* | |||
* @param r The wrapper for the data type element to be added. | |||
* | |||
* @param r The wrapper for the data type element to be added. | |||
* Must not be <code>null</code>. | |||
*/ | |||
public void addDataType(RuntimeConfigurable r) { | |||
children.add(r); | |||
} | |||
/** | |||
/** | |||
* Returns the current set of tasks to be executed by this target. | |||
* | |||
* | |||
* @return an array of the tasks currently within this target | |||
*/ | |||
public Task[] getTasks() { | |||
@@ -196,13 +196,13 @@ public class Target implements TaskContainer { | |||
tasks.add(o); | |||
} | |||
} | |||
return (Task[])tasks.toArray(new Task[tasks.size()]); | |||
} | |||
/** | |||
* Adds a dependency to this target. | |||
* | |||
* | |||
* @param dependency The name of a target this target is dependent on. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -215,7 +215,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Returns an enumeration of the dependencies of this target. | |||
* | |||
* | |||
* @return an enumeration of the dependencies of this target | |||
*/ | |||
public Enumeration getDependencies() { | |||
@@ -234,7 +234,7 @@ public class Target implements TaskContainer { | |||
* property <code>foo</code> has value <code>bar</code>, setting | |||
* the "if" condition to <code>${foo}_x</code> will mean that the | |||
* task will only execute if property <code>bar_x</code> is set. | |||
* | |||
* | |||
* @param property The property condition to test on execution. | |||
* May be <code>null</code>, in which case | |||
* no "if" test is performed. | |||
@@ -242,7 +242,7 @@ public class Target implements TaskContainer { | |||
public void setIf(String property) { | |||
this.ifCondition = (property == null) ? "" : property; | |||
} | |||
/** | |||
* Sets the "unless" condition to test on execution. This is the | |||
* name of a property to test for existence - if the property | |||
@@ -251,7 +251,7 @@ public class Target implements TaskContainer { | |||
* property <code>foo</code> has value <code>bar</code>, setting | |||
* the "unless" condition to <code>${foo}_x</code> will mean that the | |||
* task will only execute if property <code>bar_x</code> isn't set. | |||
* | |||
* | |||
* @param property The property condition to test on execution. | |||
* May be <code>null</code>, in which case | |||
* no "unless" test is performed. | |||
@@ -262,9 +262,9 @@ public class Target implements TaskContainer { | |||
/** | |||
* Sets the description of this target. | |||
* | |||
* @param description The description for this target. | |||
* May be <code>null</code>, indicating that no | |||
* | |||
* @param description The description for this target. | |||
* May be <code>null</code>, indicating that no | |||
* description is available. | |||
*/ | |||
public void setDescription(String description) { | |||
@@ -273,7 +273,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Returns the description of this target. | |||
* | |||
* | |||
* @return the description of this target, or <code>null</code> if no | |||
* description is available. | |||
*/ | |||
@@ -283,7 +283,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Returns the name of this target. | |||
* | |||
* | |||
* @return the name of this target, or <code>null</code> if the | |||
* name has not been set yet. | |||
*/ | |||
@@ -297,12 +297,12 @@ public class Target implements TaskContainer { | |||
* method, as it does no checking of its own. If either the "if" | |||
* or "unless" test prevents this target from being executed, a verbose | |||
* message is logged giving the reason. It is recommended that clients | |||
* of this class call performTasks rather than this method so that | |||
* of this class call performTasks rather than this method so that | |||
* appropriate build events are fired. | |||
* | |||
* | |||
* @exception BuildException if any of the tasks fail or if a data type | |||
* configuration fails. | |||
* | |||
* | |||
* @see #performTasks() | |||
* @see #setIf(String) | |||
* @see #setUnless(String) | |||
@@ -321,21 +321,21 @@ public class Target implements TaskContainer { | |||
} | |||
} | |||
} else if (!testIfCondition()) { | |||
project.log(this, "Skipped because property '" | |||
+ project.replaceProperties(this.ifCondition) | |||
project.log(this, "Skipped because property '" | |||
+ project.replaceProperties(this.ifCondition) | |||
+ "' not set.", Project.MSG_VERBOSE); | |||
} else { | |||
project.log(this, "Skipped because property '" | |||
+ project.replaceProperties(this.unlessCondition) | |||
project.log(this, "Skipped because property '" | |||
+ project.replaceProperties(this.unlessCondition) | |||
+ "' set.", Project.MSG_VERBOSE); | |||
} | |||
} | |||
/** | |||
* Performs the tasks within this target (if the conditions are met), | |||
* firing target started/target finished messages around a call to | |||
* firing target started/target finished messages around a call to | |||
* execute. | |||
* | |||
* | |||
* @see #execute() | |||
*/ | |||
public final void performTasks() { | |||
@@ -348,11 +348,11 @@ public class Target implements TaskContainer { | |||
throw exc; | |||
} | |||
} | |||
/** | |||
* Replaces all occurrences of the given task in the list | |||
* of children with the replacement data type wrapper. | |||
* | |||
* | |||
* @param el The task to replace. | |||
* Must not be <code>null</code>. | |||
* @param o The data type wrapper to replace <code>el</code> with. | |||
@@ -367,7 +367,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Replaces all occurrences of the given task in the list | |||
* of children with the replacement task. | |||
* | |||
* | |||
* @param el The task to replace. | |||
* Must not be <code>null</code>. | |||
* @param o The task to replace <code>el</code> with. | |||
@@ -381,7 +381,7 @@ public class Target implements TaskContainer { | |||
/** | |||
* Tests whether or not the "if" condition is satisfied. | |||
* | |||
* | |||
* @return whether or not the "if" condition is satisfied. If no | |||
* condition (or an empty condition) has been set, | |||
* <code>true</code> is returned. | |||
@@ -392,14 +392,14 @@ public class Target implements TaskContainer { | |||
if ("".equals(ifCondition)) { | |||
return true; | |||
} | |||
String test = project.replaceProperties(ifCondition); | |||
return project.getProperty(test) != null; | |||
} | |||
/** | |||
* Tests whether or not the "unless" condition is satisfied. | |||
* | |||
* | |||
* @return whether or not the "unless" condition is satisfied. If no | |||
* condition (or an empty condition) has been set, | |||
* <code>true</code> is returned. | |||
@@ -303,7 +303,7 @@ public abstract class Task extends ProjectComponent { | |||
wrapper.reconfigure(getProject()); | |||
} | |||
} | |||
/** | |||
* Handles a line of output by logging it with the INFO priority. | |||
* | |||
@@ -332,15 +332,15 @@ public abstract class Task extends ProjectComponent { | |||
* @param length the amount of data to read | |||
* | |||
* @return the number of bytes read | |||
* | |||
* | |||
* @exception IOException if the data cannot be read | |||
* @since Ant 1.6 | |||
*/ | |||
protected int handleInput(byte[] buffer, int offset, int length) | |||
protected int handleInput(byte[] buffer, int offset, int length) | |||
throws IOException { | |||
return getProject().defaultInput(buffer, offset, length); | |||
} | |||
/** | |||
* Handles an error line by logging it with the INFO priority. | |||
* | |||
@@ -426,7 +426,7 @@ public abstract class Task extends ProjectComponent { | |||
/** | |||
* Has this task been marked invalid? | |||
* | |||
* @return true if this task is no longer valid. A new task should be | |||
* @return true if this task is no longer valid. A new task should be | |||
* configured in this case. | |||
* | |||
* @since Ant 1.5 | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -58,7 +58,7 @@ import java.lang.reflect.Method; | |||
/** | |||
* Uses introspection to "adapt" an arbitrary Bean which doesn't | |||
* itself extend Task, but still contains an execute method and optionally | |||
* itself extend Task, but still contains an execute method and optionally | |||
* a setProject method. | |||
* | |||
* @author costin@dnt.ro | |||
@@ -67,26 +67,26 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
/** Object to act as a proxy for. */ | |||
private Object proxy; | |||
/** | |||
* Checks whether or not a class is suitable to be adapted by TaskAdapter. | |||
* | |||
* This only checks conditions which are additionally required for | |||
* This only checks conditions which are additionally required for | |||
* tasks adapted by TaskAdapter. Thus, this method should be called by | |||
* Project.checkTaskClass. | |||
* | |||
* Throws a BuildException and logs as Project.MSG_ERR for | |||
* conditions that will cause the task execution to fail. | |||
* Logs other suspicious conditions with Project.MSG_WARN. | |||
* | |||
* @param taskClass Class to test for suitability. | |||
* | |||
* @param taskClass Class to test for suitability. | |||
* Must not be <code>null</code>. | |||
* @param project Project to log warnings/errors to. | |||
* @param project Project to log warnings/errors to. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @see Project#checkTaskClass(Class) | |||
*/ | |||
public static void checkTaskClass(final Class taskClass, | |||
public static void checkTaskClass(final Class taskClass, | |||
final Project project) { | |||
// don't have to check for interface, since then | |||
// taskClass would be abstract too. | |||
@@ -97,8 +97,8 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
// don't have to check for abstract, since then | |||
// taskClass would be abstract too. | |||
if (!Void.TYPE.equals(executeM.getReturnType())) { | |||
final String message = "return type of execute() should be " | |||
+ "void but was \"" + executeM.getReturnType() + "\" in " | |||
final String message = "return type of execute() should be " | |||
+ "void but was \"" + executeM.getReturnType() + "\" in " | |||
+ taskClass; | |||
project.log(message, Project.MSG_WARN); | |||
} | |||
@@ -116,10 +116,10 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
public void checkProxyClass(Class proxyClass) { | |||
checkTaskClass(proxyClass, getProject()); | |||
} | |||
/** | |||
* Executes the proxied task. | |||
* | |||
* | |||
* @exception BuildException if the project could not be set | |||
* or the method could not be executed. | |||
*/ | |||
@@ -127,7 +127,7 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
Method setProjectM = null; | |||
try { | |||
Class c = proxy.getClass(); | |||
setProjectM = | |||
setProjectM = | |||
c.getMethod("setProject", new Class[] {Project.class}); | |||
if (setProjectM != null) { | |||
setProjectM.invoke(proxy, new Object[] {getProject()}); | |||
@@ -136,7 +136,7 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
// ignore this if the class being used as a task does not have | |||
// a set project method. | |||
} catch (Exception ex) { | |||
log("Error setting project in " + proxy.getClass(), | |||
log("Error setting project in " + proxy.getClass(), | |||
Project.MSG_ERR); | |||
throw new BuildException(ex); | |||
} | |||
@@ -147,13 +147,13 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
Class c = proxy.getClass(); | |||
executeM = c.getMethod("execute", new Class[0]); | |||
if (executeM == null) { | |||
log("No public execute() in " + proxy.getClass(), | |||
log("No public execute() in " + proxy.getClass(), | |||
Project.MSG_ERR); | |||
throw new BuildException("No public execute() in " | |||
throw new BuildException("No public execute() in " | |||
+ proxy.getClass()); | |||
} | |||
executeM.invoke(proxy, null); | |||
return; | |||
return; | |||
} catch (java.lang.reflect.InvocationTargetException ie) { | |||
log("Error in " + proxy.getClass(), Project.MSG_VERBOSE); | |||
Throwable t = ie.getTargetException(); | |||
@@ -168,10 +168,10 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
} | |||
} | |||
/** | |||
* Sets the target object to proxy for. | |||
* | |||
* | |||
* @param o The target object. Must not be <code>null</code>. | |||
*/ | |||
public void setProxy(Object o) { | |||
@@ -180,7 +180,7 @@ public class TaskAdapter extends Task implements TypeAdapter { | |||
/** | |||
* Returns the target object being proxied. | |||
* | |||
* | |||
* @return the target proxy object | |||
*/ | |||
public Object getProxy() { | |||
@@ -75,10 +75,10 @@ public class UnknownElement extends Task { | |||
* been redefined since original creation. | |||
*/ | |||
private String elementName; | |||
/** | |||
/** | |||
* Holds the namespace of the element. | |||
*/ | |||
*/ | |||
private String namespace; | |||
/** | |||
@@ -113,18 +113,18 @@ public class UnknownElement extends Task { | |||
} | |||
/** Return the namespace of the XML element associated with this component. | |||
* | |||
* | |||
* @return Namespace URI used in the xmlns declaration. | |||
*/ | |||
*/ | |||
public String getNamespace() { | |||
return namespace; | |||
} | |||
/** Set the namespace of the XML element associated with this component. | |||
* This method is typically called by the XML processor. | |||
* | |||
* | |||
* @param namespace URI used in the xmlns declaration. | |||
*/ | |||
*/ | |||
public void setNamespace(String namespace) { | |||
this.namespace = namespace; | |||
} | |||
@@ -163,7 +163,7 @@ public class UnknownElement extends Task { | |||
*/ | |||
public void configure(Object realObject) { | |||
realThing = realObject; | |||
getWrapper().setProxy(realThing); | |||
Task task = null; | |||
if (realThing instanceof Task) { | |||
@@ -181,7 +181,7 @@ public class UnknownElement extends Task { | |||
// configure attributes of the object and it's children. If it is | |||
// a task container, defer the configuration till the task container | |||
// attempts to use the task | |||
if (task != null) { | |||
task.maybeConfigure(); | |||
} else { | |||
@@ -204,17 +204,17 @@ public class UnknownElement extends Task { | |||
/** | |||
* @see Task#handleInput(byte[], int, int) | |||
* | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
protected int handleInput(byte[] buffer, int offset, int length) | |||
protected int handleInput(byte[] buffer, int offset, int length) | |||
throws IOException { | |||
if (realThing instanceof Task) { | |||
return ((Task) realThing).handleInput(buffer, offset, length); | |||
} else { | |||
return super.handleInput(buffer, offset, length); | |||
} | |||
} | |||
/** | |||
* Handles output sent to System.out by this task or its real task. | |||
@@ -255,7 +255,7 @@ public class UnknownElement extends Task { | |||
super.handleErrorOutput(line); | |||
} | |||
} | |||
/** | |||
* Executes the real object if it's a task. If it's not a task | |||
* (e.g. a data type) then this method does nothing. | |||
@@ -317,18 +317,18 @@ public class UnknownElement extends Task { | |||
for (int i = 0; it.hasNext(); i++) { | |||
RuntimeConfigurable childWrapper = parentWrapper.getChild(i); | |||
UnknownElement child = (UnknownElement) it.next(); | |||
// backwards compatibility - element names of nested | |||
// elements have been all lower-case in Ant, except for | |||
// TaskContainers | |||
if (!handleChild(ih, parent, child, | |||
child.getTag().toLowerCase(Locale.US), | |||
if (!handleChild(ih, parent, child, | |||
child.getTag().toLowerCase(Locale.US), | |||
childWrapper)) { | |||
if (!(parent instanceof TaskContainer)) { | |||
ih.throwNotSupported(getProject(), parent, | |||
ih.throwNotSupported(getProject(), parent, | |||
child.getTag()); | |||
} else { | |||
// a task container - anything could happen - just add the | |||
// a task container - anything could happen - just add the | |||
// child to the container | |||
TaskContainer container = (TaskContainer) parent; | |||
container.addTask(child); | |||
@@ -466,8 +466,8 @@ public class UnknownElement extends Task { | |||
Object parent, UnknownElement child, | |||
String childTag, | |||
RuntimeConfigurable childWrapper) { | |||
if (ih.supportsNestedElement(childTag)) { | |||
Object realChild | |||
if (ih.supportsNestedElement(childTag)) { | |||
Object realChild | |||
= ih.createElement(getProject(), parent, childTag); | |||
childWrapper.setProxy(realChild); | |||
if (realChild instanceof Task) { | |||
@@ -289,7 +289,7 @@ public class XmlLogger implements BuildLogger { | |||
TimedElement poppedStack = (TimedElement) threadStack.pop(); | |||
if (poppedStack != targetElement) { | |||
throw new RuntimeException("Mismatch - popped element = " | |||
+ poppedStack.element | |||
+ poppedStack.element | |||
+ " finished target element = " | |||
+ targetElement.element); | |||
} | |||
@@ -480,7 +480,7 @@ public class XmlLogger implements BuildLogger { | |||
/** | |||
* Ignore emacs mode, as it has no meaning in XML format | |||
* | |||
* @param emacsMode true if logger should produce emacs compatible | |||
* @param emacsMode true if logger should produce emacs compatible | |||
* output | |||
*/ | |||
public void setEmacsMode(boolean emacsMode) { | |||
@@ -95,7 +95,7 @@ public abstract class BaseFilterReader | |||
* | |||
* @param in A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
*/ | |||
public BaseFilterReader(final Reader in) { | |||
super(in); | |||
@@ -106,7 +106,7 @@ public abstract class BaseFilterReader | |||
* until some input is available, an I/O error occurs, or the end of the | |||
* stream is reached. | |||
* | |||
* @param cbuf Destination buffer to write characters to. | |||
* @param cbuf Destination buffer to write characters to. | |||
* Must not be <code>null</code>. | |||
* @param off Offset at which to start storing characters. | |||
* @param len Maximum number of characters to read. | |||
@@ -143,7 +143,7 @@ public abstract class BaseFilterReader | |||
* @exception IllegalArgumentException If <code>n</code> is negative. | |||
* @exception IOException If an I/O error occurs | |||
*/ | |||
public final long skip(final long n) | |||
public final long skip(final long n) | |||
throws IOException, IllegalArgumentException { | |||
if (n < 0L) { | |||
throw new IllegalArgumentException("skip value is negative"); | |||
@@ -159,7 +159,7 @@ public abstract class BaseFilterReader | |||
/** | |||
* Sets the initialized status. | |||
* | |||
* | |||
* @param initialized Whether or not the filter is initialized. | |||
*/ | |||
protected final void setInitialized(final boolean initialized) { | |||
@@ -168,7 +168,7 @@ public abstract class BaseFilterReader | |||
/** | |||
* Returns the initialized status. | |||
* | |||
* | |||
* @return whether or not the filter is initialized | |||
*/ | |||
protected final boolean getInitialized() { | |||
@@ -177,8 +177,8 @@ public abstract class BaseFilterReader | |||
/** | |||
* Sets the project to work with. | |||
* | |||
* @param project The project this filter is part of. | |||
* | |||
* @param project The project this filter is part of. | |||
* Should not be <code>null</code>. | |||
*/ | |||
public final void setProject(final Project project) { | |||
@@ -187,7 +187,7 @@ public abstract class BaseFilterReader | |||
/** | |||
* Returns the project this filter is part of. | |||
* | |||
* | |||
* @return the project this filter is part of | |||
*/ | |||
protected final Project getProject() { | |||
@@ -197,22 +197,22 @@ public abstract class BaseFilterReader | |||
/** | |||
* Reads a line of text ending with '\n' (or until the end of the stream). | |||
* The returned String retains the '\n'. | |||
* | |||
* | |||
* @return the line read, or <code>null</code> if the end of the stream | |||
* has already been reached | |||
* | |||
* @exception IOException if the underlying reader throws one during | |||
* | |||
* @exception IOException if the underlying reader throws one during | |||
* reading | |||
*/ | |||
protected final String readLine() throws IOException { | |||
int ch = in.read(); | |||
if (ch == -1) { | |||
return null; | |||
} | |||
StringBuffer line = new StringBuffer(); | |||
while (ch != -1) { | |||
line.append ((char) ch); | |||
if (ch == '\n') { | |||
@@ -225,10 +225,10 @@ public abstract class BaseFilterReader | |||
/** | |||
* Reads to the end of the stream, returning the contents as a String. | |||
* | |||
* | |||
* @return the remaining contents of the reader, as a String | |||
* | |||
* @exception IOException if the underlying reader throws one during | |||
* | |||
* @exception IOException if the underlying reader throws one during | |||
* reading | |||
*/ | |||
protected final String readFully() throws IOException { | |||
@@ -70,7 +70,7 @@ public abstract class BaseParamFilterReader | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public BaseParamFilterReader() { | |||
@@ -90,7 +90,7 @@ public abstract class BaseParamFilterReader | |||
/** | |||
* Sets the parameters used by this filter, and sets | |||
* the filter to an uninitialized status. | |||
* | |||
* | |||
* @param parameters The parameters to be used by this filter. | |||
* Should not be <code>null</code>. | |||
*/ | |||
@@ -101,7 +101,7 @@ public abstract class BaseParamFilterReader | |||
/** | |||
* Returns the parameters to be used by this filter. | |||
* | |||
* | |||
* @return the parameters to be used by this filter | |||
*/ | |||
protected final Parameter[] getParameters() { | |||
@@ -64,11 +64,11 @@ public interface ChainableReader { | |||
/** | |||
* Returns a reader with the same configuration as this one, | |||
* but filtering input from the specified reader. | |||
* | |||
* | |||
* @param rdr the reader which the returned reader should be filtering | |||
* | |||
* | |||
* @return a reader with the same configuration as this one, but | |||
* filtering input from the specified reader | |||
*/ | |||
public Reader chain(Reader rdr); | |||
Reader chain(Reader rdr); | |||
} |
@@ -76,7 +76,8 @@ import java.lang.reflect.Method; | |||
* Example:<br> | |||
* <pre><classconstants/></pre> | |||
* Or: | |||
* <pre><filterreader classname="org.apache.tools.ant.filters.ClassConstants"/></pre> | |||
* <pre><filterreader | |||
* classname="org.apache.tools.ant.filters.ClassConstants"/></pre> | |||
* @author Magesh Umasankar | |||
*/ | |||
public final class ClassConstants | |||
@@ -91,7 +92,7 @@ public final class ClassConstants | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public ClassConstants() { | |||
@@ -100,7 +101,7 @@ public final class ClassConstants | |||
/** | |||
* Creates a new filtered reader. The contents of the passed-in reader | |||
* are expected to be the name of the class from which to produce a | |||
* are expected to be the name of the class from which to produce a | |||
* list of constants. | |||
* | |||
* @param in A Reader object providing the underlying stream. | |||
@@ -112,10 +113,10 @@ public final class ClassConstants | |||
/** | |||
* Reads and assembles the constants declared in a class file. | |||
* | |||
* | |||
* @return the next character in the list of constants, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading, or if the constants for the specified class cannot | |||
* be read (for example due to the class not being found). | |||
@@ -144,7 +145,7 @@ public final class ClassConstants | |||
final Class javaClassHelper = | |||
Class.forName(JAVA_CLASS_HELPER); | |||
if (javaClassHelper != null) { | |||
final Class params[] = { | |||
final Class[] params = { | |||
byte[].class | |||
}; | |||
final Method getConstants = | |||
@@ -180,10 +181,10 @@ public final class ClassConstants | |||
/** | |||
* Creates a new ClassConstants using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -66,7 +66,7 @@ import org.apache.tools.ant.types.Parameter; | |||
* | |||
* Or: | |||
* | |||
* <pre><filterreader | |||
* <pre><filterreader | |||
classname="org.apache.tools.ant.filters.EscapeUnicode"/> | |||
* </pre> | |||
* | |||
@@ -161,11 +161,6 @@ public class EscapeUnicode | |||
* Parses the parameters (currently unused) | |||
*/ | |||
private final void initialize() { | |||
Parameter[] params = getParameters(); | |||
if (params != null) { | |||
for (int i = 0; i < params.length; i++) { | |||
} | |||
} | |||
} | |||
} | |||
@@ -63,8 +63,9 @@ import org.apache.tools.ant.Project; | |||
* Example:<br> | |||
* <pre><expandproperties/></pre> | |||
* Or: | |||
* <pre><filterreader classname="org.apache.tools.ant.filters.ExpandProperties"/></pre> | |||
* | |||
* <pre><filterreader | |||
* classname="org.apache.tools.ant.filters.ExpandProperties"/></pre> | |||
* | |||
* @author Magesh Umasankar | |||
*/ | |||
public final class ExpandProperties | |||
@@ -75,7 +76,7 @@ public final class ExpandProperties | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public ExpandProperties() { | |||
@@ -97,12 +98,12 @@ public final class ExpandProperties | |||
* stream is first read in fully, and the Ant properties are expanded. | |||
* The results of this expansion are then queued so they can be read | |||
* character-by-character. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
@@ -134,10 +135,10 @@ public final class ExpandProperties | |||
/** | |||
* Creates a new ExpandProperties filter using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -82,15 +82,18 @@ public final class HeadFilter | |||
/** Number of lines currently read in. */ | |||
private long linesRead = 0; | |||
/** Default number of lines to show */ | |||
private static int DEFAULT_NUM_LINES = 10; | |||
/** Number of lines to be returned in the filtered stream. */ | |||
private long lines = 10; | |||
private long lines = DEFAULT_NUM_LINES; | |||
/** Number of lines to be skipped. */ | |||
private long skip = 0; | |||
/** A line tokenizer */ | |||
private TokenFilter.LineTokenizer lineTokenizer = null; | |||
/** the current line from the input stream */ | |||
private String line = null; | |||
/** the position in the current line */ | |||
@@ -137,16 +140,18 @@ public final class HeadFilter | |||
while (line == null || line.length() == 0) { | |||
line = lineTokenizer.getToken(in); | |||
if (line == null) | |||
if (line == null) { | |||
return -1; | |||
} | |||
line = headFilter(line); | |||
linePos = 0; | |||
} | |||
int ch = line.charAt(linePos); | |||
linePos++; | |||
if (linePos == line.length()) | |||
if (linePos == line.length()) { | |||
line = null; | |||
} | |||
return ch; | |||
} | |||
@@ -171,7 +176,7 @@ public final class HeadFilter | |||
/** | |||
* Sets the number of lines to be skipped in the filtered stream. | |||
* | |||
* @param lines the number of lines to be skipped in the filtered stream | |||
* @param skip the number of lines to be skipped in the filtered stream | |||
*/ | |||
public final void setSkip(final long skip) { | |||
this.skip = skip; | |||
@@ -118,7 +118,7 @@ public final class LineContainsRegExp | |||
* Returns the next character in the filtered stream, only including | |||
* lines from the original stream which match all of the specified | |||
* regular expressions. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
@@ -174,8 +174,8 @@ public final class LineContainsRegExp | |||
/** | |||
* Adds a <code>regexp</code> element. | |||
* | |||
* @param regExp The <code>regexp</code> element to add. | |||
* | |||
* @param regExp The <code>regexp</code> element to add. | |||
* Must not be <code>null</code>. | |||
*/ | |||
public final void addConfiguredRegexp(final RegularExpression regExp) { | |||
@@ -183,12 +183,12 @@ public final class LineContainsRegExp | |||
} | |||
/** | |||
* Sets the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* Sets the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* filter. | |||
* | |||
* @param regexps A vector of regular expressions which must be contained | |||
* within a line in order for it to match in this filter. Must not be | |||
* | |||
* @param regexps A vector of regular expressions which must be contained | |||
* within a line in order for it to match in this filter. Must not be | |||
* <code>null</code>. | |||
*/ | |||
private void setRegexps(final Vector regexps) { | |||
@@ -196,13 +196,13 @@ public final class LineContainsRegExp | |||
} | |||
/** | |||
* Returns the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* Returns the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* filter. | |||
* | |||
* @return the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* filter. The returned object is "live" - in other words, changes made to | |||
* | |||
* @return the vector of regular expressions which must be contained within | |||
* a line read from the original stream in order for it to match this | |||
* filter. The returned object is "live" - in other words, changes made to | |||
* the returned object are mirrored in the filter. | |||
*/ | |||
private final Vector getRegexps() { | |||
@@ -212,10 +212,10 @@ public final class LineContainsRegExp | |||
/** | |||
* Creates a new LineContainsRegExp using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -85,7 +85,7 @@ public final class PrefixLines | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public PrefixLines() { | |||
@@ -107,12 +107,12 @@ public final class PrefixLines | |||
* from the original input, and the prefix added. The resulting | |||
* line is then used until it ends, at which point the next original line | |||
* is read, etc. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
if (!getInitialized()) { | |||
@@ -148,7 +148,7 @@ public final class PrefixLines | |||
/** | |||
* Sets the prefix to add at the start of each input line. | |||
* | |||
* | |||
* @param prefix The prefix to add at the start of each input line. | |||
* May be <code>null</code>, in which case no prefix | |||
* is added. | |||
@@ -159,7 +159,7 @@ public final class PrefixLines | |||
/** | |||
* Returns the prefix which will be added at the start of each input line. | |||
* | |||
* | |||
* @return the prefix which will be added at the start of each input line | |||
*/ | |||
private final String getPrefix() { | |||
@@ -169,10 +169,10 @@ public final class PrefixLines | |||
/** | |||
* Creates a new PrefixLines filter using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -95,10 +95,10 @@ public final class ReplaceTokens | |||
/** Index into replacement data */ | |||
private int replaceIndex = -1; | |||
/** Index into queue data */ | |||
private int queueIndex = -1; | |||
/** Hashtable to hold the replacee-replacer pairs (String to String). */ | |||
private Hashtable hash = new Hashtable(); | |||
@@ -110,7 +110,7 @@ public final class ReplaceTokens | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public ReplaceTokens() { | |||
@@ -135,19 +135,19 @@ public final class ReplaceTokens | |||
} | |||
return ch; | |||
} | |||
return in.read(); | |||
} | |||
/** | |||
* Returns the next character in the filtered stream, replacing tokens | |||
* from the original stream. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
if (!getInitialized()) { | |||
@@ -162,7 +162,7 @@ public final class ReplaceTokens | |||
} | |||
return ch; | |||
} | |||
int ch = getNextChar(); | |||
if (ch == beginToken) { | |||
@@ -180,14 +180,14 @@ public final class ReplaceTokens | |||
if (queuedData == null || queueIndex == -1) { | |||
queuedData = key.toString(); | |||
} else { | |||
queuedData | |||
queuedData | |||
= key.toString() + queuedData.substring(queueIndex); | |||
} | |||
queueIndex = 0; | |||
return beginToken; | |||
} else { | |||
key.setLength(key.length() - 1); | |||
final String replaceWith = (String) hash.get(key.toString()); | |||
if (replaceWith != null) { | |||
if (replaceWith.length() > 0) { | |||
@@ -212,7 +212,7 @@ public final class ReplaceTokens | |||
/** | |||
* Sets the "begin token" character. | |||
* | |||
* | |||
* @param beginToken the character used to denote the beginning of a token | |||
*/ | |||
public final void setBeginToken(final char beginToken) { | |||
@@ -221,7 +221,7 @@ public final class ReplaceTokens | |||
/** | |||
* Returns the "begin token" character. | |||
* | |||
* | |||
* @return the character used to denote the beginning of a token | |||
*/ | |||
private final char getBeginToken() { | |||
@@ -230,7 +230,7 @@ public final class ReplaceTokens | |||
/** | |||
* Sets the "end token" character. | |||
* | |||
* | |||
* @param endToken the character used to denote the end of a token | |||
*/ | |||
public final void setEndToken(final char endToken) { | |||
@@ -239,7 +239,7 @@ public final class ReplaceTokens | |||
/** | |||
* Returns the "end token" character. | |||
* | |||
* | |||
* @return the character used to denote the end of a token | |||
*/ | |||
private final char getEndToken() { | |||
@@ -248,7 +248,7 @@ public final class ReplaceTokens | |||
/** | |||
* Adds a token element to the map of tokens to replace. | |||
* | |||
* | |||
* @param token The token to add to the map of replacements. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -258,7 +258,7 @@ public final class ReplaceTokens | |||
/** | |||
* Sets the map of tokens to replace. | |||
* | |||
* | |||
* @param hash A map (String->String) of token keys to replacement | |||
* values. Must not be <code>null</code>. | |||
*/ | |||
@@ -268,7 +268,7 @@ public final class ReplaceTokens | |||
/** | |||
* Returns the map of tokens which will be replaced. | |||
* | |||
* | |||
* @return a map (String->String) of token keys to replacement | |||
* values | |||
*/ | |||
@@ -279,10 +279,10 @@ public final class ReplaceTokens | |||
/** | |||
* Creates a new ReplaceTokens using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -309,13 +309,13 @@ public final class ReplaceTokens | |||
String value = params[i].getValue(); | |||
if ("begintoken".equals(name)) { | |||
if (value.length() == 0) { | |||
throw new BuildException("Begin token cannot " | |||
throw new BuildException("Begin token cannot " | |||
+ "be empty"); | |||
} | |||
beginToken = params[i].getValue().charAt(0); | |||
} else if ("endtoken".equals(name)) { | |||
if (value.length() == 0) { | |||
throw new BuildException("End token cannot " | |||
throw new BuildException("End token cannot " | |||
+ "be empty"); | |||
} | |||
endToken = params[i].getValue().charAt(0); | |||
@@ -343,7 +343,7 @@ public final class ReplaceTokens | |||
/** | |||
* Sets the token key | |||
* | |||
* | |||
* @param key The key for this token. Must not be <code>null</code>. | |||
*/ | |||
public final void setKey(String key) { | |||
@@ -352,7 +352,7 @@ public final class ReplaceTokens | |||
/** | |||
* Sets the token value | |||
* | |||
* | |||
* @param value The value for this token. Must not be <code>null</code>. | |||
*/ | |||
public final void setValue(String value) { | |||
@@ -361,7 +361,7 @@ public final class ReplaceTokens | |||
/** | |||
* Returns the key for this token. | |||
* | |||
* | |||
* @return the key for this token | |||
*/ | |||
public final String getKey() { | |||
@@ -370,7 +370,7 @@ public final class ReplaceTokens | |||
/** | |||
* Returns the value for this token. | |||
* | |||
* | |||
* @return the value for this token | |||
*/ | |||
public final String getValue() { | |||
@@ -59,7 +59,7 @@ import org.apache.tools.ant.types.Parameter; | |||
/** | |||
* Filter to flatten the stream to a single line. | |||
* | |||
* | |||
* Example: | |||
* | |||
* <pre><striplinebreaks/></pre> | |||
@@ -88,7 +88,7 @@ public final class StripLineBreaks | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public StripLineBreaks() { | |||
@@ -108,12 +108,12 @@ public final class StripLineBreaks | |||
/** | |||
* Returns the next character in the filtered stream, only including | |||
* characters not in the set of line-breaking characters. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
if (!getInitialized()) { | |||
@@ -134,7 +134,7 @@ public final class StripLineBreaks | |||
/** | |||
* Sets the line-breaking characters. | |||
* | |||
* | |||
* @param lineBreaks A String containing all the characters to be | |||
* considered as line-breaking. | |||
*/ | |||
@@ -144,8 +144,8 @@ public final class StripLineBreaks | |||
/** | |||
* Returns the line-breaking characters as a String. | |||
* | |||
* @return a String containing all the characters considered as | |||
* | |||
* @return a String containing all the characters considered as | |||
* line-breaking | |||
*/ | |||
private final String getLineBreaks() { | |||
@@ -155,10 +155,10 @@ public final class StripLineBreaks | |||
/** | |||
* Creates a new StripLineBreaks using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -73,7 +73,7 @@ import org.apache.tools.ant.types.Parameter; | |||
* | |||
* Or: | |||
* | |||
* <pre><filterreader | |||
* <pre><filterreader | |||
* classname="org.apache.tools.ant.filters.StripLineComments"> | |||
* <param type="comment" value="#"/> | |||
* <param type="comment" value="--"/> | |||
@@ -98,7 +98,7 @@ public final class StripLineComments | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public StripLineComments() { | |||
@@ -117,14 +117,14 @@ public final class StripLineComments | |||
/** | |||
* Returns the next character in the filtered stream, only including | |||
* lines from the original stream which don't start with any of the | |||
* lines from the original stream which don't start with any of the | |||
* specified comment prefixes. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
if (!getInitialized()) { | |||
@@ -172,7 +172,7 @@ public final class StripLineComments | |||
/** | |||
* Adds a <code>comment</code> element to the list of prefixes. | |||
* | |||
* | |||
* @param comment The <code>comment</code> element to add to the | |||
* list of comment prefixes to strip. Must not be <code>null</code>. | |||
*/ | |||
@@ -182,7 +182,7 @@ public final class StripLineComments | |||
/** | |||
* Sets the list of comment prefixes to strip. | |||
* | |||
* | |||
* @param comments A list of strings, each of which is a prefix | |||
* for a comment line. Must not be <code>null</code>. | |||
*/ | |||
@@ -192,7 +192,7 @@ public final class StripLineComments | |||
/** | |||
* Returns the list of comment prefixes to strip. | |||
* | |||
* | |||
* @return the list of comment prefixes to strip. | |||
*/ | |||
private final Vector getComments() { | |||
@@ -202,10 +202,10 @@ public final class StripLineComments | |||
/** | |||
* Creates a new StripLineComments using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -240,7 +240,7 @@ public final class StripLineComments | |||
/** | |||
* Sets the prefix for this type of line comment. | |||
* | |||
* | |||
* @param comment The prefix for a line comment of this type. | |||
* Must not be <code>null</code>. | |||
*/ | |||
@@ -250,7 +250,7 @@ public final class StripLineComments | |||
/** | |||
* Returns the prefix for this type of line comment. | |||
* | |||
* | |||
* @return the prefix for this type of line comment. | |||
*/ | |||
public final String getValue() { | |||
@@ -89,7 +89,7 @@ public final class TabsToSpaces | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
* | |||
* @see BaseFilterReader#BaseFilterReader() | |||
*/ | |||
public TabsToSpaces() { | |||
@@ -109,12 +109,12 @@ public final class TabsToSpaces | |||
/** | |||
* Returns the next character in the filtered stream, converting tabs | |||
* to the specified number of spaces. | |||
* | |||
* | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* | |||
* @exception IOException if the underlying stream throws an IOException | |||
* during reading | |||
* during reading | |||
*/ | |||
public final int read() throws IOException { | |||
if (!getInitialized()) { | |||
@@ -139,7 +139,7 @@ public final class TabsToSpaces | |||
/** | |||
* Sets the tab length. | |||
* | |||
* | |||
* @param tabLength the number of spaces to be used when converting a tab. | |||
*/ | |||
public final void setTablength(final int tabLength) { | |||
@@ -148,7 +148,7 @@ public final class TabsToSpaces | |||
/** | |||
* Returns the tab length. | |||
* | |||
* | |||
* @return the number of spaces used when converting a tab | |||
*/ | |||
private final int getTablength() { | |||
@@ -158,10 +158,10 @@ public final class TabsToSpaces | |||
/** | |||
* Creates a new TabsToSpaces using the passed in | |||
* Reader for instantiation. | |||
* | |||
* | |||
* @param rdr A Reader object providing the underlying stream. | |||
* Must not be <code>null</code>. | |||
* | |||
* | |||
* @return a new filter based on this configuration, but filtering | |||
* the specified reader | |||
*/ | |||
@@ -99,14 +99,14 @@ public final class TailFilter | |||
/** A line tokenizer */ | |||
private TokenFilter.LineTokenizer lineTokenizer = null; | |||
/** the current line from the input stream */ | |||
private String line = null; | |||
/** the position in the current line */ | |||
private int linePos = 0; | |||
private LinkedList lineList = new LinkedList(); | |||
/** | |||
* Constructor for "dummy" instances. | |||
* | |||
@@ -77,17 +77,17 @@ import org.apache.tools.ant.util.StringUtils; | |||
* | |||
* @author costin@dnt.ro | |||
* @author stefano@apache.org | |||
* @author Wolfgang Werner | |||
* @author Wolfgang Werner | |||
* <a href="mailto:wwerner@picturesafe.de">wwerner@picturesafe.de</a> | |||
* @author Kevin Ross | |||
* @author Kevin Ross | |||
* <a href="mailto:kevin.ross@bredex.com">kevin.ross@bredex.com</a> | |||
* | |||
* @since Ant 1.5 | |||
*/ | |||
public abstract class AbstractCvsTask extends Task { | |||
/** | |||
/** | |||
* Default compression level to use, if compression is enabled via | |||
* setCompression( true ). | |||
* setCompression( true ). | |||
*/ | |||
public static final int DEFAULT_COMPRESSION_LEVEL = 3; | |||
@@ -189,7 +189,7 @@ public abstract class AbstractCvsTask extends Task { | |||
protected ExecuteStreamHandler getExecuteStreamHandler() { | |||
if (this.executeStreamHandler == null) { | |||
setExecuteStreamHandler(new PumpStreamHandler(getOutputStream(), | |||
setExecuteStreamHandler(new PumpStreamHandler(getOutputStream(), | |||
getErrorStream())); | |||
} | |||
@@ -211,7 +211,7 @@ public abstract class AbstractCvsTask extends Task { | |||
setOutputStream(new PrintStream( | |||
new BufferedOutputStream( | |||
new FileOutputStream(output | |||
.getPath(), | |||
.getPath(), | |||
append)))); | |||
} catch (IOException e) { | |||
throw new BuildException(e, getLocation()); | |||
@@ -280,7 +280,7 @@ public abstract class AbstractCvsTask extends Task { | |||
File defaultPassFile = new File( | |||
System.getProperty("cygwin.user.home", | |||
System.getProperty("user.home")) | |||
System.getProperty("user.home")) | |||
+ File.separatorChar + ".cvspass"); | |||
if(defaultPassFile.exists()) { | |||
@@ -294,7 +294,7 @@ public abstract class AbstractCvsTask extends Task { | |||
var.setKey("CVS_PASSFILE"); | |||
var.setValue(String.valueOf(passFile)); | |||
env.addVariable(var); | |||
log("Using cvs passfile: " + String.valueOf(passFile), | |||
log("Using cvs passfile: " + String.valueOf(passFile), | |||
Project.MSG_INFO); | |||
} else if (!passFile.canRead()) { | |||
log("cvs passfile: " + String.valueOf(passFile) | |||
@@ -341,7 +341,7 @@ public abstract class AbstractCvsTask extends Task { | |||
/*Throw an exception if cvs exited with error. (Iulian)*/ | |||
if (failOnError && retCode != 0) { | |||
throw new BuildException("cvs exited with error code " | |||
+ retCode | |||
+ retCode | |||
+ StringUtils.LINE_SEP | |||
+ "Command line was [" | |||
+ actualCommandLine + "]", getLocation()); | |||
@@ -413,7 +413,7 @@ public abstract class AbstractCvsTask extends Task { | |||
private String executeToString(Execute execute){ | |||
StringBuffer stringBuffer = | |||
StringBuffer stringBuffer = | |||
new StringBuffer(Commandline.describeCommand(execute | |||
.getCommandline())); | |||
@@ -674,10 +674,10 @@ public abstract class AbstractCvsTask extends Task { | |||
* Configures and adds the given Commandline. | |||
* @param insertAtStart If true, c is | |||
*/ | |||
public void addConfiguredCommandline(Commandline c, | |||
public void addConfiguredCommandline(Commandline c, | |||
boolean insertAtStart) { | |||
if (c == null) { | |||
return; | |||
return; | |||
} | |||
this.configureCommandline(c); | |||
if (insertAtStart) { | |||
@@ -702,7 +702,7 @@ public abstract class AbstractCvsTask extends Task { | |||
* level, AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL. | |||
*/ | |||
public void setCompression(boolean usecomp) { | |||
setCompressionLevel(usecomp ? | |||
setCompressionLevel(usecomp ? | |||
AbstractCvsTask.DEFAULT_COMPRESSION_LEVEL : 0); | |||
} | |||
@@ -273,10 +273,10 @@ public class Ant extends Task { | |||
/** | |||
* @see Task#handleInput(byte[], int, int) | |||
* | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
throws IOException { | |||
if (newProject != null) { | |||
return newProject.demuxInput(buffer, offset, length); | |||
@@ -284,7 +284,7 @@ public class Ant extends Task { | |||
return super.handleInput(buffer, offset, length); | |||
} | |||
} | |||
/** | |||
* Pass output sent to System.out to the new project. | |||
* | |||
@@ -371,7 +371,7 @@ public class Ant extends Task { | |||
target = newProject.getDefaultTarget(); | |||
} | |||
// Are we trying to call the target in which we are defined (or | |||
// Are we trying to call the target in which we are defined (or | |||
// the build file if this is a top level task)? | |||
if (newProject.getBaseDir().equals(getProject().getBaseDir()) && | |||
newProject.getProperty("ant.file").equals(getProject().getProperty("ant.file")) | |||
@@ -432,7 +432,7 @@ public class Ant extends Task { | |||
* requested. | |||
*/ | |||
private void addReferences() throws BuildException { | |||
Hashtable thisReferences | |||
Hashtable thisReferences | |||
= (Hashtable) getProject().getReferences().clone(); | |||
Hashtable newReferences = newProject.getReferences(); | |||
Enumeration e; | |||
@@ -484,8 +484,8 @@ public class Ant extends Task { | |||
private void copyReference(String oldKey, String newKey) { | |||
Object orig = getProject().getReference(oldKey); | |||
if (orig == null) { | |||
log("No object referenced by " + oldKey + ". Can't copy to " | |||
+ newKey, | |||
log("No object referenced by " + oldKey + ". Can't copy to " | |||
+ newKey, | |||
Project.MSG_WARN); | |||
return; | |||
} | |||
@@ -579,7 +579,7 @@ public class Ant extends Task { | |||
if (s.equals("")) { | |||
throw new BuildException("target attribute must not be empty"); | |||
} | |||
this.target = s; | |||
} | |||
@@ -130,7 +130,7 @@ public class Basename extends Task { | |||
// char preceding the suffix is a '.', we assume the user | |||
// wants to remove the '.' as well (see docs) | |||
int pos = value.length() - suffix.length(); | |||
if (pos > 0 && suffix.charAt(0) != '.' | |||
if (pos > 0 && suffix.charAt(0) != '.' | |||
&& value.charAt(pos - 1) == '.') { | |||
pos--; | |||
} | |||
@@ -78,7 +78,7 @@ import java.io.IOException; | |||
* defined in the project itself. | |||
* | |||
* | |||
* @author Stefan Bodewig | |||
* @author Stefan Bodewig | |||
* | |||
* @since Ant 1.2 | |||
* | |||
@@ -131,12 +131,12 @@ public class CallTarget extends Task { | |||
if (callee == null) { | |||
init(); | |||
} | |||
if (subTarget == null) { | |||
throw new BuildException("Attribute target is required.", | |||
throw new BuildException("Attribute target is required.", | |||
getLocation()); | |||
} | |||
callee.setAntfile(getProject().getProperty("ant.file")); | |||
callee.setTarget(subTarget); | |||
callee.setInheritAll(inheritAll); | |||
@@ -197,13 +197,13 @@ public class CallTarget extends Task { | |||
super.handleOutput(line); | |||
} | |||
} | |||
/** | |||
* @see Task#handleInput(byte[], int, int) | |||
* | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
throws IOException { | |||
if (callee != null) { | |||
return callee.handleInput(buffer, offset, length); | |||
@@ -224,7 +224,7 @@ public class CallTarget extends Task { | |||
super.handleFlush(line); | |||
} | |||
} | |||
/** | |||
* Pass output sent to System.err to the new project. | |||
* | |||
@@ -237,7 +237,7 @@ public class CallTarget extends Task { | |||
super.handleErrorOutput(line); | |||
} | |||
} | |||
/** | |||
* Pass output sent to System.err to the new project. | |||
* | |||
@@ -111,7 +111,7 @@ public class Concat extends Task { | |||
private File destinationFile = null; | |||
/** | |||
* Whether or not the stream should be appended if the destination file | |||
* Whether or not the stream should be appended if the destination file | |||
* exists. | |||
* Defaults to <code>false</code>. | |||
*/ | |||
@@ -311,11 +311,11 @@ public class Concat extends Task { | |||
public void setWriter(Writer outputWriter) { | |||
this.outputWriter = outputWriter; | |||
} | |||
/** | |||
* This method performs the concatenation. | |||
*/ | |||
public void execute() | |||
public void execute() | |||
throws BuildException { | |||
// treat empty nested text as no text | |||
@@ -325,12 +325,12 @@ public class Concat extends Task { | |||
throw new BuildException( | |||
"Cannot specify both a destination file and an output writer"); | |||
} | |||
// Sanity check our inputs. | |||
if (sources.size() == 0 && textBuffer == null) { | |||
// Nothing to concatenate! | |||
throw new BuildException("At least one file " + | |||
"must be provided, or " + | |||
throw new BuildException("At least one file " + | |||
"must be provided, or " + | |||
"some text."); | |||
} | |||
@@ -338,7 +338,7 @@ public class Concat extends Task { | |||
// using GNU 'cat' with file arguments -- stdin is simply | |||
// ignored. | |||
if (sources.size() > 0 && textBuffer != null) { | |||
throw new BuildException("Cannot include inline text " + | |||
throw new BuildException("Cannot include inline text " + | |||
"when using filesets."); | |||
} | |||
@@ -382,9 +382,9 @@ public class Concat extends Task { | |||
// Do nothing if all the sources are not present | |||
// And textBuffer is null | |||
if (textBuffer == null && sourceFiles.size() == 0 | |||
if (textBuffer == null && sourceFiles.size() == 0 | |||
&& header == null && footer == null) { | |||
log("No existing files and no nested text, doing nothing", | |||
log("No existing files and no nested text, doing nothing", | |||
Project.MSG_INFO); | |||
return; | |||
} | |||
@@ -416,16 +416,16 @@ public class Concat extends Task { | |||
log("File " + file + " does not exist.", Project.MSG_ERR); | |||
continue; | |||
} | |||
if (destinationFile != null | |||
if (destinationFile != null | |||
&& fileUtils.fileNameEquals(destinationFile, file)) { | |||
throw new BuildException("Input file \"" | |||
throw new BuildException("Input file \"" | |||
+ file + "\" " | |||
+ "is the same as the output file."); | |||
} | |||
sourceFiles.addElement(file); | |||
} | |||
} | |||
/** perform the concatenation */ | |||
private void cat() { | |||
OutputStream os = null; | |||
@@ -479,7 +479,7 @@ public class Concat extends Task { | |||
} else { | |||
reader = new MultiReader(); | |||
} | |||
concatenate(buffer, writer, reader); | |||
if (footer != null) { | |||
@@ -521,7 +521,7 @@ public class Concat extends Task { | |||
helper.setProject(getProject()); | |||
in = new BufferedReader(helper.getAssembledReader()); | |||
} | |||
while (true) { | |||
int nRead = in.read(buffer, 0, buffer.length); | |||
if (nRead == -1) { | |||
@@ -529,7 +529,7 @@ public class Concat extends Task { | |||
} | |||
writer.write(buffer, 0, nRead); | |||
} | |||
writer.flush(); | |||
} | |||
@@ -567,7 +567,7 @@ public class Concat extends Task { | |||
public void setFiltering(boolean filtering) { | |||
this.filtering = filtering; | |||
} | |||
/** return the filtering attribute */ | |||
private boolean getFiltering() { | |||
return filtering; | |||
@@ -576,7 +576,7 @@ public class Concat extends Task { | |||
public void setEncoding(String encoding) { | |||
this.encoding = encoding; | |||
} | |||
/** | |||
* set the text using a file | |||
* @param file the file to use | |||
@@ -681,7 +681,7 @@ public class Concat extends Task { | |||
private int lastPos = 0; | |||
private char[] lastChars = new char[eolString.length()]; | |||
private boolean needAddSeparator = false; | |||
private Reader getReader() throws IOException { | |||
if (reader == null) { | |||
if (encoding == null) { | |||
@@ -718,7 +718,7 @@ public class Concat extends Task { | |||
} | |||
return ret; | |||
} | |||
while (pos < sourceFiles.size()) { | |||
int ch = getReader().read(); | |||
if (ch == -1) { | |||
@@ -732,7 +732,7 @@ public class Concat extends Task { | |||
addLastChar((char) ch); | |||
return ch; | |||
} | |||
pos++; | |||
pos++; | |||
} | |||
return -1; | |||
} | |||
@@ -378,7 +378,7 @@ public class Copy extends Task { | |||
try { | |||
ds = fs.getDirectoryScanner(getProject()); | |||
} catch (BuildException e) { | |||
if (failonerror | |||
if (failonerror | |||
|| !e.getMessage().endsWith(" not found.")) { | |||
throw e; | |||
} else { | |||
@@ -386,7 +386,7 @@ public class Copy extends Task { | |||
continue; | |||
} | |||
} | |||
File fromDir = fs.getDir(getProject()); | |||
String[] srcFiles = ds.getIncludedFiles(); | |||
@@ -440,20 +440,20 @@ public class Copy extends Task { | |||
throw new BuildException("Specify at least one source " | |||
+ "- a file or a fileset."); | |||
} | |||
if (destFile != null && destDir != null) { | |||
throw new BuildException("Only one of tofile and todir " | |||
+ "may be set."); | |||
} | |||
if (destFile == null && destDir == null) { | |||
throw new BuildException("One of tofile or todir must be set."); | |||
} | |||
if (file != null && file.exists() && file.isDirectory()) { | |||
throw new BuildException("Use a fileset to copy directories."); | |||
} | |||
if (destFile != null && filesets.size() > 0) { | |||
if (filesets.size() > 1) { | |||
throw new BuildException( | |||
@@ -105,7 +105,7 @@ public class Copydir extends MatchingTask { | |||
log("DEPRECATED - The copydir task is deprecated. Use copy instead."); | |||
if (srcDir == null) { | |||
throw new BuildException("src attribute must be set!", | |||
throw new BuildException("src attribute must be set!", | |||
getLocation()); | |||
} | |||
@@ -115,7 +115,7 @@ public class Copydir extends MatchingTask { | |||
} | |||
if (destDir == null) { | |||
throw new BuildException("The dest attribute must be set.", | |||
throw new BuildException("The dest attribute must be set.", | |||
getLocation()); | |||
} | |||
@@ -140,7 +140,7 @@ public class Copydir extends MatchingTask { | |||
getProject().copyFile(fromFile, toFile, filtering, | |||
forceOverwrite); | |||
} catch (IOException ioe) { | |||
String msg = "Failed to copy " + fromFile + " to " | |||
String msg = "Failed to copy " + fromFile + " to " | |||
+ toFile + " due to " + ioe.getMessage(); | |||
throw new BuildException(msg, ioe, getLocation()); | |||
} | |||
@@ -77,7 +77,7 @@ public class Copyfile extends Task { | |||
private File destFile; | |||
private boolean filtering = false; | |||
private boolean forceOverwrite = false; | |||
public void setSrc(File src) { | |||
srcFile = src; | |||
} | |||
@@ -98,17 +98,17 @@ public class Copyfile extends Task { | |||
log("DEPRECATED - The copyfile task is deprecated. Use copy instead."); | |||
if (srcFile == null) { | |||
throw new BuildException("The src attribute must be present.", | |||
throw new BuildException("The src attribute must be present.", | |||
getLocation()); | |||
} | |||
if (!srcFile.exists()) { | |||
throw new BuildException("src " + srcFile.toString() | |||
+ " does not exist.", getLocation()); | |||
} | |||
if (destFile == null) { | |||
throw new BuildException("The dest attribute must be present.", | |||
throw new BuildException("The dest attribute must be present.", | |||
getLocation()); | |||
} | |||
@@ -116,7 +116,7 @@ public class Copyfile extends Task { | |||
log("Warning: src == dest", Project.MSG_WARN); | |||
} | |||
if (forceOverwrite | |||
if (forceOverwrite | |||
|| srcFile.lastModified() > destFile.lastModified()) { | |||
try { | |||
getProject().copyFile(srcFile, destFile, filtering, forceOverwrite); | |||
@@ -65,13 +65,13 @@ package org.apache.tools.ant.taskdefs; | |||
* | |||
* @author costin@dnt.ro | |||
* @author stefano@apache.org | |||
* @author Wolfgang Werner | |||
* @author Wolfgang Werner | |||
* <a href="mailto:wwerner@picturesafe.de">wwerner@picturesafe.de</a> | |||
* @author Kevin Ross | |||
* @author Kevin Ross | |||
* <a href="mailto:kevin.ross@bredex.com">kevin.ross@bredex.com</a> | |||
* | |||
* @since Ant 1.1 | |||
* | |||
* | |||
* @ant.task category="scm" | |||
*/ | |||
public class Cvs extends AbstractCvsTask { | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -80,18 +80,18 @@ import org.apache.tools.ant.types.selectors.FileSelector; | |||
/** | |||
* Deletes a file or directory, or set of files defined by a fileset. | |||
* The original delete task would delete a file, or a set of files | |||
* using the include/exclude syntax. The deltree task would delete a | |||
* The original delete task would delete a file, or a set of files | |||
* using the include/exclude syntax. The deltree task would delete a | |||
* directory tree. This task combines the functionality of these two | |||
* originally distinct tasks. | |||
* <p>Currently Delete extends MatchingTask. This is intend <i>only</i> | |||
* to provide backwards compatibility for a release. The future position | |||
* is to use nested filesets exclusively.</p> | |||
* | |||
* @author Stefano Mazzocchi | |||
* | |||
* @author Stefano Mazzocchi | |||
* <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
* @author Tom Dimock <a href="mailto:tad1@cornell.edu">tad1@cornell.edu</a> | |||
* @author Glenn McAllister | |||
* @author Glenn McAllister | |||
* <a href="mailto:glennm@ca.ibm.com">glennm@ca.ibm.com</a> | |||
* @author Jon S. Stevens <a href="mailto:jon@latchkey.com">jon@latchkey.com</a> | |||
* | |||
@@ -197,7 +197,7 @@ public class Delete extends MatchingTask { | |||
usedMatchingTask = true; | |||
return super.createIncludesFile(); | |||
} | |||
/** | |||
* add a name entry on the exclude list | |||
*/ | |||
@@ -213,7 +213,7 @@ public class Delete extends MatchingTask { | |||
usedMatchingTask = true; | |||
return super.createExcludesFile(); | |||
} | |||
/** | |||
* add a set of patterns | |||
*/ | |||
@@ -410,7 +410,7 @@ public class Delete extends MatchingTask { | |||
usedMatchingTask = true; | |||
super.addDepend(selector); | |||
} | |||
/** | |||
* add a regular expression selector entry on the selector list | |||
*/ | |||
@@ -447,38 +447,38 @@ public class Delete extends MatchingTask { | |||
throw new BuildException("quiet and failonerror cannot both be " | |||
+ "set to true", getLocation()); | |||
} | |||
// delete the single file | |||
if (file != null) { | |||
if (file.exists()) { | |||
if (file.isDirectory()) { | |||
log("Directory " + file.getAbsolutePath() | |||
log("Directory " + file.getAbsolutePath() | |||
+ " cannot be removed using the file attribute. " | |||
+ "Use dir instead."); | |||
} else { | |||
log("Deleting: " + file.getAbsolutePath()); | |||
if (!file.delete()) { | |||
String message = "Unable to delete file " | |||
String message = "Unable to delete file " | |||
+ file.getAbsolutePath(); | |||
if (failonerror) { | |||
throw new BuildException(message); | |||
} else { | |||
log(message, quiet ? Project.MSG_VERBOSE | |||
} else { | |||
log(message, quiet ? Project.MSG_VERBOSE | |||
: Project.MSG_WARN); | |||
} | |||
} | |||
} | |||
} else { | |||
log("Could not find file " + file.getAbsolutePath() | |||
+ " to delete.", | |||
log("Could not find file " + file.getAbsolutePath() | |||
+ " to delete.", | |||
Project.MSG_VERBOSE); | |||
} | |||
} | |||
// delete the directory | |||
if (dir != null && dir.exists() && dir.isDirectory() && | |||
if (dir != null && dir.exists() && dir.isDirectory() && | |||
!usedMatchingTask) { | |||
/* | |||
If verbosity is MSG_VERBOSE, that mean we are doing | |||
@@ -506,7 +506,7 @@ public class Delete extends MatchingTask { | |||
if (failonerror) { | |||
throw be; | |||
} else { | |||
log(be.getMessage(), | |||
log(be.getMessage(), | |||
quiet ? Project.MSG_VERBOSE : Project.MSG_WARN); | |||
} | |||
} | |||
@@ -524,7 +524,7 @@ public class Delete extends MatchingTask { | |||
if (failonerror) { | |||
throw be; | |||
} else { | |||
log(be.getMessage(), | |||
log(be.getMessage(), | |||
quiet ? Project.MSG_VERBOSE : Project.MSG_WARN); | |||
} | |||
} | |||
@@ -548,7 +548,7 @@ public class Delete extends MatchingTask { | |||
} else { | |||
log("Deleting " + f.getAbsolutePath(), verbosity); | |||
if (!f.delete()) { | |||
String message = "Unable to delete file " | |||
String message = "Unable to delete file " | |||
+ f.getAbsolutePath(); | |||
if (failonerror) { | |||
throw new BuildException(message); | |||
@@ -561,7 +561,7 @@ public class Delete extends MatchingTask { | |||
} | |||
log("Deleting directory " + d.getAbsolutePath(), verbosity); | |||
if (!d.delete()) { | |||
String message = "Unable to delete directory " | |||
String message = "Unable to delete directory " | |||
+ dir.getAbsolutePath(); | |||
if (failonerror) { | |||
throw new BuildException(message); | |||
@@ -581,13 +581,13 @@ public class Delete extends MatchingTask { | |||
*/ | |||
protected void removeFiles(File d, String[] files, String[] dirs) { | |||
if (files.length > 0) { | |||
log("Deleting " + files.length + " files from " | |||
log("Deleting " + files.length + " files from " | |||
+ d.getAbsolutePath()); | |||
for (int j = 0; j < files.length; j++) { | |||
File f = new File(d, files[j]); | |||
log("Deleting " + f.getAbsolutePath(), verbosity); | |||
if (!f.delete()) { | |||
String message = "Unable to delete file " | |||
String message = "Unable to delete file " | |||
+ f.getAbsolutePath(); | |||
if (failonerror) { | |||
throw new BuildException(message); | |||
@@ -135,13 +135,13 @@ public class Deltree extends Task { | |||
removeDir(f); | |||
} else { | |||
if (!f.delete()) { | |||
throw new BuildException("Unable to delete file " | |||
throw new BuildException("Unable to delete file " | |||
+ f.getAbsolutePath()); | |||
} | |||
} | |||
} | |||
if (!dir.delete()) { | |||
throw new BuildException("Unable to delete directory " | |||
throw new BuildException("Unable to delete directory " | |||
+ dir.getAbsolutePath()); | |||
} | |||
} | |||
@@ -99,8 +99,8 @@ public class Ear extends Jar { | |||
public void setAppxml(File descr) { | |||
deploymentDescriptor = descr; | |||
if (!deploymentDescriptor.exists()) { | |||
throw new BuildException("Deployment descriptor: " | |||
+ deploymentDescriptor | |||
throw new BuildException("Deployment descriptor: " | |||
+ deploymentDescriptor | |||
+ " does not exist."); | |||
} | |||
@@ -138,7 +138,7 @@ public class Ear extends Jar { | |||
/** | |||
* Overriden from Zip class to deal with application.xml | |||
*/ | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
int mode) | |||
throws IOException { | |||
// If the file being added is META-INF/application.xml, we | |||
@@ -147,7 +147,7 @@ public class Ear extends Jar { | |||
// file is specified by the "appxml" attribute and in a | |||
// <fileset> element. | |||
if (vPath.equalsIgnoreCase("META-INF/application.xml")) { | |||
if (deploymentDescriptor == null | |||
if (deploymentDescriptor == null | |||
|| !fu.fileNameEquals(deploymentDescriptor, file) | |||
|| descriptorAdded) { | |||
log("Warning: selected " + archiveType | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -74,10 +74,10 @@ public class Echo extends Task { | |||
protected String message = ""; // required | |||
protected File file = null; | |||
protected boolean append = false; | |||
// by default, messages are always displayed | |||
protected int logLevel = Project.MSG_WARN; | |||
protected int logLevel = Project.MSG_WARN; | |||
/** | |||
* Does the work. | |||
* | |||
@@ -166,7 +166,7 @@ public class Echo extends Task { | |||
* @see EnumeratedAttribute#getValues | |||
*/ | |||
public String[] getValues() { | |||
return new String[] {"error", "warning", "info", | |||
return new String[] {"error", "warning", "info", | |||
"verbose", "debug"}; | |||
} | |||
} | |||
@@ -76,7 +76,7 @@ import org.apache.tools.ant.Task; | |||
* @author duncan@x180.com | |||
* @author rubys@us.ibm.com | |||
* | |||
* @deprecated delegate to {@link org.apache.tools.ant.taskdefs.Execute Execute} | |||
* @deprecated delegate to {@link org.apache.tools.ant.taskdefs.Execute Execute} | |||
* instead. | |||
*/ | |||
public class Exec extends Task { | |||
@@ -88,9 +88,9 @@ public class Exec extends Task { | |||
private boolean failOnError = false; | |||
public Exec() { | |||
System.err.println("As of Ant 1.2 released in October 2000, " | |||
System.err.println("As of Ant 1.2 released in October 2000, " | |||
+ "the Exec class"); | |||
System.err.println("is considered to be dead code by the Ant " | |||
System.err.println("is considered to be dead code by the Ant " | |||
+ "developers and is unmaintained."); | |||
System.err.println("Don\'t use it!"); | |||
} | |||
@@ -124,10 +124,10 @@ public class Exec extends Task { | |||
} else { | |||
String ant = getProject().getProperty("ant.home"); | |||
if (ant == null) { | |||
throw new BuildException("Property 'ant.home' not " | |||
throw new BuildException("Property 'ant.home' not " | |||
+ "found", getLocation()); | |||
} | |||
String antRun = getProject().resolveFile(ant + "/bin/antRun.bat").toString(); | |||
command = antRun + " " + dir + " " + command; | |||
} | |||
@@ -212,7 +212,7 @@ public class Exec extends Task { | |||
protected void outputLog(String line, int messageLevel) { | |||
if (fos == null) { | |||
log(line, messageLevel); | |||
log(line, messageLevel); | |||
} else { | |||
fos.println(line); | |||
} | |||
@@ -79,7 +79,7 @@ import org.apache.tools.ant.util.FileUtils; | |||
public class ExecTask extends Task { | |||
private String os; | |||
private File dir; | |||
protected boolean failOnError = false; | |||
protected boolean newEnvironment = false; | |||
@@ -92,7 +92,7 @@ public class ExecTask extends Task { | |||
private boolean resolveExecutable = false; | |||
private Redirector redirector = new Redirector(this); | |||
/** | |||
* Controls whether the VM (1.3 and above) is used to execute the | |||
* command | |||
@@ -152,7 +152,7 @@ public class ExecTask extends Task { | |||
} | |||
/** | |||
* File the output of the process is redirected to. If error is not | |||
* File the output of the process is redirected to. If error is not | |||
* redirected, it too will appear in the output | |||
*/ | |||
public void setOutput(File out) { | |||
@@ -174,7 +174,7 @@ public class ExecTask extends Task { | |||
public void setInputString(String inputString) { | |||
redirector.setInputString(inputString); | |||
} | |||
/** | |||
* Controls whether error output of exec is logged. This is only useful | |||
* when output is being redirected and error output is desired in the | |||
@@ -183,7 +183,7 @@ public class ExecTask extends Task { | |||
public void setLogError(boolean logError) { | |||
redirector.setLogError(logError); | |||
} | |||
/** | |||
* File the error stream of the process is redirected to. | |||
* | |||
@@ -231,7 +231,7 @@ public class ExecTask extends Task { | |||
public void setResolveExecutable(boolean resolveExecutable) { | |||
this.resolveExecutable = resolveExecutable; | |||
} | |||
/** | |||
* Add an environment variable to the launched process. | |||
*/ | |||
@@ -286,10 +286,10 @@ public class ExecTask extends Task { | |||
redirector.setAppend(append); | |||
} | |||
/** | |||
* Attempt to figure out where the executable is so that we can feed | |||
* Attempt to figure out where the executable is so that we can feed | |||
* the full path - first try basedir, then the exec dir and then | |||
* fallback to the straight executable name (i.e. on ther path) | |||
* | |||
@@ -299,13 +299,13 @@ public class ExecTask extends Task { | |||
if (!resolveExecutable) { | |||
return executable; | |||
} | |||
// try to find the executable | |||
File executableFile = getProject().resolveFile(executable); | |||
if (executableFile.exists()) { | |||
return executableFile.getAbsolutePath(); | |||
} | |||
// now try to resolve against the dir if given | |||
if (dir != null) { | |||
FileUtils fileUtils = FileUtils.newFileUtils(); | |||
@@ -316,9 +316,9 @@ public class ExecTask extends Task { | |||
} | |||
// couldn't find it - must be on path | |||
return executable; | |||
return executable; | |||
} | |||
/** | |||
* Do the work. | |||
*/ | |||
@@ -372,7 +372,7 @@ public class ExecTask extends Task { | |||
/** | |||
* If true, launch new process with VM, otherwise use the OS's shell. | |||
*/ | |||
public void setVMLauncher(boolean vmLauncher) { | |||
public void setVMLauncher(boolean vmLauncher) { | |||
this.vmLauncher = vmLauncher; | |||
} | |||
@@ -415,7 +415,7 @@ public class ExecTask extends Task { | |||
maybeSetResultPropertyValue(returnCode); | |||
if (returnCode != 0) { | |||
if (failOnError) { | |||
throw new BuildException(getTaskType() + " returned: " | |||
throw new BuildException(getTaskType() + " returned: " | |||
+ returnCode, getLocation()); | |||
} else { | |||
log("Result: " + returnCode, Project.MSG_ERR); | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -72,9 +72,9 @@ import org.apache.tools.ant.util.FileNameMapper; | |||
import org.apache.tools.ant.util.SourceFileScanner; | |||
/** | |||
* Executes a given command, supplying a set of files as arguments. | |||
* Executes a given command, supplying a set of files as arguments. | |||
* | |||
* @author Stefan Bodewig | |||
* @author Stefan Bodewig | |||
* @author <a href="mailto:mariusz@rakiura.org">Mariusz Nowostawski</a> | |||
* | |||
* @since Ant 1.2 | |||
@@ -120,7 +120,7 @@ public class ExecuteOn extends ExecTask { | |||
* @since Ant 1.6 | |||
*/ | |||
public void addDirset(DirSet set) { | |||
filesets.addElement(set); | |||
filesets.addElement(set); | |||
} | |||
/** | |||
* Source files to operate upon. | |||
@@ -257,21 +257,21 @@ public class ExecuteOn extends ExecTask { | |||
if ("execon".equals(getTaskName())) { | |||
log("!! execon is deprecated. Use apply instead. !!"); | |||
} | |||
super.checkConfiguration(); | |||
if (filesets.size() == 0 && filelists.size() == 0) { | |||
throw new BuildException("no filesets and no filelists specified", | |||
getLocation()); | |||
} | |||
if (targetFilePos != null || mapperElement != null | |||
if (targetFilePos != null || mapperElement != null | |||
|| destDir != null) { | |||
if (mapperElement == null) { | |||
throw new BuildException("no mapper specified", getLocation()); | |||
} | |||
if (destDir == null) { | |||
throw new BuildException("no dest attribute specified", | |||
throw new BuildException("no dest attribute specified", | |||
getLocation()); | |||
} | |||
mapper = mapperElement.getImplementation(); | |||
@@ -291,7 +291,7 @@ public class ExecuteOn extends ExecTask { | |||
AbstractFileSet fs = (AbstractFileSet) filesets.elementAt(i); | |||
if (fs instanceof DirSet) { | |||
if (!"dir".equals(type)) { | |||
log("Found a nested dirset but type is " + type + ". " | |||
log("Found a nested dirset but type is " + type + ". " | |||
+ "Temporarily switching to type=\"dir\" on the" + | |||
" assumption that you really did mean" + | |||
" <dirset> not <fileset>.", Project.MSG_DEBUG); | |||
@@ -330,7 +330,7 @@ public class ExecuteOn extends ExecTask { | |||
fileNames.copyInto(s); | |||
for (int j = 0; j < s.length; j++) { | |||
String[] command = getCommandline(s[j], base); | |||
log(Commandline.describeCommand(command), | |||
log(Commandline.describeCommand(command), | |||
Project.MSG_VERBOSE); | |||
exe.setCommandline(command); | |||
runExecute(exe); | |||
@@ -373,7 +373,7 @@ public class ExecuteOn extends ExecTask { | |||
fileNames.copyInto(s); | |||
for (int j = 0; j < s.length; j++) { | |||
String[] command = getCommandline(s[j], base); | |||
log(Commandline.describeCommand(command), | |||
log(Commandline.describeCommand(command), | |||
Project.MSG_VERBOSE); | |||
exe.setCommandline(command); | |||
runExecute(exe); | |||
@@ -440,13 +440,13 @@ public class ExecuteOn extends ExecTask { | |||
} | |||
String[] targetFiles = new String[targets.size()]; | |||
targets.copyInto(targetFiles); | |||
if (!addSourceFile) { | |||
srcFiles = new String[0]; | |||
} | |||
String[] orig = cmdl.getCommandline(); | |||
String[] result | |||
String[] result | |||
= new String[orig.length + srcFiles.length + targetFiles.length]; | |||
int srcIndex = orig.length; | |||
@@ -457,42 +457,42 @@ public class ExecuteOn extends ExecTask { | |||
if (targetFilePos != null) { | |||
int targetIndex = targetFilePos.getPosition(); | |||
if (srcIndex < targetIndex | |||
if (srcIndex < targetIndex | |||
|| (srcIndex == targetIndex && srcIsFirst)) { | |||
// 0 --> srcIndex | |||
System.arraycopy(orig, 0, result, 0, srcIndex); | |||
// srcIndex --> targetIndex | |||
System.arraycopy(orig, srcIndex, result, | |||
System.arraycopy(orig, srcIndex, result, | |||
srcIndex + srcFiles.length, | |||
targetIndex - srcIndex); | |||
// targets are already absolute file names | |||
System.arraycopy(targetFiles, 0, result, | |||
targetIndex + srcFiles.length, | |||
System.arraycopy(targetFiles, 0, result, | |||
targetIndex + srcFiles.length, | |||
targetFiles.length); | |||
// targetIndex --> end | |||
System.arraycopy(orig, targetIndex, result, | |||
System.arraycopy(orig, targetIndex, result, | |||
targetIndex + srcFiles.length + targetFiles.length, | |||
orig.length - targetIndex); | |||
} else { | |||
// 0 --> targetIndex | |||
System.arraycopy(orig, 0, result, 0, targetIndex); | |||
// targets are already absolute file names | |||
System.arraycopy(targetFiles, 0, result, | |||
System.arraycopy(targetFiles, 0, result, | |||
targetIndex, | |||
targetFiles.length); | |||
// targetIndex --> srcIndex | |||
System.arraycopy(orig, targetIndex, result, | |||
System.arraycopy(orig, targetIndex, result, | |||
targetIndex + targetFiles.length, | |||
srcIndex - targetIndex); | |||
// srcIndex --> end | |||
System.arraycopy(orig, srcIndex, result, | |||
System.arraycopy(orig, srcIndex, result, | |||
srcIndex + srcFiles.length + targetFiles.length, | |||
orig.length - srcIndex); | |||
srcIndex += targetFiles.length; | |||
@@ -503,7 +503,7 @@ public class ExecuteOn extends ExecTask { | |||
// 0 --> srcIndex | |||
System.arraycopy(orig, 0, result, 0, srcIndex); | |||
// srcIndex --> end | |||
System.arraycopy(orig, srcIndex, result, | |||
System.arraycopy(orig, srcIndex, result, | |||
srcIndex + srcFiles.length, | |||
orig.length - srcIndex); | |||
@@ -512,13 +512,13 @@ public class ExecuteOn extends ExecTask { | |||
// fill in source file names | |||
for (int i = 0; i < srcFiles.length; i++) { | |||
if (!relative) { | |||
result[srcIndex + i] = | |||
result[srcIndex + i] = | |||
(new File(baseDirs[i], srcFiles[i])).getAbsolutePath(); | |||
} else { | |||
result[srcIndex + i] = srcFiles[i]; | |||
} | |||
if (forwardSlash && fileSeparator != '/') { | |||
result[srcIndex + i] = | |||
result[srcIndex + i] = | |||
result[srcIndex + i].replace(fileSeparator, '/'); | |||
} | |||
} | |||
@@ -542,7 +542,7 @@ public class ExecuteOn extends ExecTask { | |||
protected String[] getFiles(File baseDir, DirectoryScanner ds) { | |||
if (mapper != null) { | |||
SourceFileScanner sfs = new SourceFileScanner(this); | |||
return sfs.restrict(ds.getIncludedFiles(), baseDir, destDir, | |||
return sfs.restrict(ds.getIncludedFiles(), baseDir, destDir, | |||
mapper); | |||
} else { | |||
return ds.getIncludedFiles(); | |||
@@ -556,7 +556,7 @@ public class ExecuteOn extends ExecTask { | |||
protected String[] getDirs(File baseDir, DirectoryScanner ds) { | |||
if (mapper != null) { | |||
SourceFileScanner sfs = new SourceFileScanner(this); | |||
return sfs.restrict(ds.getIncludedDirectories(), baseDir, destDir, | |||
return sfs.restrict(ds.getIncludedDirectories(), baseDir, destDir, | |||
mapper); | |||
} else { | |||
return ds.getIncludedDirectories(); | |||
@@ -569,7 +569,7 @@ public class ExecuteOn extends ExecTask { | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
protected void runParallel(Execute exe, Vector fileNames, | |||
protected void runParallel(Execute exe, Vector fileNames, | |||
Vector baseDirs) | |||
throws IOException, BuildException { | |||
String[] s = new String[fileNames.size()]; | |||
@@ -577,7 +577,7 @@ public class ExecuteOn extends ExecTask { | |||
File[] b = new File[baseDirs.size()]; | |||
baseDirs.copyInto(b); | |||
if (maxParallel <= 0 | |||
if (maxParallel <= 0 | |||
|| s.length == 0 /* this is skipEmpty == false */) { | |||
String[] command = getCommandline(s, b); | |||
log(Commandline.describeCommand(command), Project.MSG_VERBOSE); | |||
@@ -605,7 +605,7 @@ public class ExecuteOn extends ExecTask { | |||
/** | |||
* Enumerated attribute with the values "file", "dir" and "both" | |||
* for the type attribute. | |||
* for the type attribute. | |||
*/ | |||
public static class FileDirBoth extends EnumeratedAttribute { | |||
/** | |||
@@ -70,7 +70,7 @@ import org.apache.tools.ant.util.Watchdog; | |||
* // it was killed on purpose by the watchdog | |||
* } | |||
* </pre> | |||
* @author thomas.haas@softwired-inc.com | |||
* @author <a href="mailto:sbailliez_at_apache.org">Stephane Bailliez</a> | |||
* @see Execute | |||
@@ -78,13 +78,13 @@ import org.apache.tools.ant.util.Watchdog; | |||
* @since Ant 1.2 | |||
*/ | |||
public class ExecuteWatchdog implements TimeoutObserver { | |||
/** the process to execute and watch for duration */ | |||
private Process process; | |||
/** say whether or not the watchog is currently monitoring a process */ | |||
private boolean watch = false; | |||
/** exception that might be thrown during the process execution */ | |||
private Exception caught = null; | |||
@@ -97,7 +97,7 @@ public class ExecuteWatchdog implements TimeoutObserver { | |||
/** | |||
* Creates a new watchdog with a given timeout. | |||
* | |||
* @param timeout the timeout for the process in milliseconds. | |||
* @param timeout the timeout for the process in milliseconds. | |||
* It must be greather than 0. | |||
*/ | |||
public ExecuteWatchdog(long timeout) { | |||
@@ -135,7 +135,7 @@ public class ExecuteWatchdog implements TimeoutObserver { | |||
} | |||
/** | |||
* Stops the watcher. It will notify all threads possibly waiting | |||
* Stops the watcher. It will notify all threads possibly waiting | |||
* on this object. | |||
*/ | |||
public synchronized void stop() { | |||
@@ -177,11 +177,11 @@ public class ExecuteWatchdog implements TimeoutObserver { | |||
} | |||
/** | |||
* This method will rethrow the exception that was possibly caught during | |||
* the run of the process. It will only remains valid once the process has | |||
* been terminated either by 'error', timeout or manual intervention. | |||
* This method will rethrow the exception that was possibly caught during | |||
* the run of the process. It will only remains valid once the process has | |||
* been terminated either by 'error', timeout or manual intervention. | |||
* Information will be discarded once a new process is ran. | |||
* @throws BuildException a wrapped exception over the one that was | |||
* @throws BuildException a wrapped exception over the one that was | |||
* silently swallowed and stored during the process run. | |||
*/ | |||
public void checkException() throws BuildException { | |||
@@ -193,7 +193,7 @@ public class ExecuteWatchdog implements TimeoutObserver { | |||
/** | |||
* Indicates whether or not the watchdog is still monitoring the process. | |||
* @return <tt>true</tt> if the process is still running, otherwise | |||
* @return <tt>true</tt> if the process is still running, otherwise | |||
* <tt>false</tt>. | |||
*/ | |||
public boolean isWatching(){ | |||
@@ -202,7 +202,7 @@ public class ExecuteWatchdog implements TimeoutObserver { | |||
/** | |||
* Indicates whether the last process run was killed on timeout or not. | |||
* @return <tt>true</tt> if the process was killed otherwise | |||
* @return <tt>true</tt> if the process was killed otherwise | |||
* <tt>false</tt>. | |||
*/ | |||
public boolean killedProcess(){ | |||
@@ -1025,7 +1025,7 @@ public class FixCRLF extends MatchingTask { | |||
* @see EnumeratedAttribute#getValues | |||
*/ | |||
public String[] getValues() { | |||
return new String[] {"asis", "cr", "lf", "crlf", | |||
return new String[] {"asis", "cr", "lf", "crlf", | |||
"mac", "unix", "dos"}; | |||
} | |||
} | |||
@@ -62,7 +62,7 @@ import org.apache.tools.ant.util.JavaEnvUtils; | |||
/** | |||
* Generates a key in a keystore. | |||
* | |||
* | |||
* @author <a href="mailto:donaldp@apache.org">Peter Donald</a> | |||
* | |||
* @since Ant 1.2 | |||
@@ -74,15 +74,15 @@ public class GenerateKey extends Task { | |||
public static class DnameParam { | |||
private String name; | |||
private String value; | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
public String getName() { | |||
return name; | |||
} | |||
public void setValue(String value) { | |||
this.value = value; | |||
} | |||
@@ -94,14 +94,14 @@ public class GenerateKey extends Task { | |||
public static class DistinguishedName { | |||
private Vector params = new Vector(); | |||
public Object createParam() { | |||
DnameParam param = new DnameParam(); | |||
params.addElement(param); | |||
return param; | |||
} | |||
public Enumeration getParams() { | |||
return params.elements(); | |||
} | |||
@@ -122,7 +122,7 @@ public class GenerateKey extends Task { | |||
sb.append('='); | |||
sb.append(encode(param.getValue())); | |||
} | |||
return sb.toString(); | |||
} | |||
@@ -132,9 +132,9 @@ public class GenerateKey extends Task { | |||
if (-1 == end) { | |||
return string; | |||
} | |||
final StringBuffer sb = new StringBuffer(); | |||
int start = 0; | |||
while (-1 != end) { | |||
@@ -145,8 +145,8 @@ public class GenerateKey extends Task { | |||
} | |||
sb.append(string.substring(start)); | |||
return sb.toString(); | |||
return sb.toString(); | |||
} | |||
} | |||
@@ -276,8 +276,8 @@ public class GenerateKey extends Task { | |||
* @todo Could convert this to a plain Integer setter. | |||
*/ | |||
public void setKeysize(final String keysize) throws BuildException { | |||
try { | |||
this.keysize = Integer.parseInt(keysize); | |||
try { | |||
this.keysize = Integer.parseInt(keysize); | |||
} catch (final NumberFormatException nfe) { | |||
throw new BuildException("KeySize attribute should be a integer"); | |||
} | |||
@@ -290,8 +290,8 @@ public class GenerateKey extends Task { | |||
* @throws BuildException If not an Integer | |||
*/ | |||
public void setValidity(final String validity) throws BuildException { | |||
try { | |||
this.validity = Integer.parseInt(validity); | |||
try { | |||
this.validity = Integer.parseInt(validity); | |||
} catch (final NumberFormatException nfe) { | |||
throw new BuildException("Validity attribute should be a integer"); | |||
} | |||
@@ -303,7 +303,7 @@ public class GenerateKey extends Task { | |||
*/ | |||
public void setVerbose(final boolean verbose) { | |||
this.verbose = verbose; | |||
} | |||
} | |||
public void execute() throws BuildException { | |||
if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||
@@ -313,15 +313,15 @@ public class GenerateKey extends Task { | |||
if (null == alias) { | |||
throw new BuildException("alias attribute must be set"); | |||
} | |||
} | |||
if (null == storepass) { | |||
throw new BuildException("storepass attribute must be set"); | |||
} | |||
} | |||
if (null == dname && null == expandedDname) { | |||
throw new BuildException("dname must be set"); | |||
} | |||
} | |||
final StringBuffer sb = new StringBuffer(); | |||
@@ -329,7 +329,7 @@ public class GenerateKey extends Task { | |||
if (verbose) { | |||
sb.append("-v "); | |||
} | |||
} | |||
sb.append("-alias \""); | |||
sb.append(alias); | |||
@@ -339,13 +339,13 @@ public class GenerateKey extends Task { | |||
sb.append("-dname \""); | |||
sb.append(dname); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (null != expandedDname) { | |||
sb.append("-dname \""); | |||
sb.append(expandedDname); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (null != keystore) { | |||
sb.append("-keystore \""); | |||
@@ -357,13 +357,13 @@ public class GenerateKey extends Task { | |||
sb.append("-storepass \""); | |||
sb.append(storepass); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (null != storetype) { | |||
sb.append("-storetype \""); | |||
sb.append(storetype); | |||
sb.append("\" "); | |||
} | |||
} | |||
sb.append("-keypass \""); | |||
if (null != keypass) { | |||
@@ -377,26 +377,26 @@ public class GenerateKey extends Task { | |||
sb.append("-sigalg \""); | |||
sb.append(sigalg); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (null != keyalg) { | |||
sb.append("-keyalg \""); | |||
sb.append(keyalg); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (0 < keysize) { | |||
sb.append("-keysize \""); | |||
sb.append(keysize); | |||
sb.append("\" "); | |||
} | |||
} | |||
if (0 < validity) { | |||
sb.append("-validity \""); | |||
sb.append(validity); | |||
sb.append("\" "); | |||
} | |||
} | |||
log("Generating Key for " + alias); | |||
final ExecTask cmd = (ExecTask) getProject().createTask("exec"); | |||
@@ -406,6 +406,6 @@ public class GenerateKey extends Task { | |||
cmd.setFailonerror(true); | |||
cmd.setTaskName(getTaskName()); | |||
cmd.execute(); | |||
} | |||
} | |||
} | |||
@@ -148,7 +148,7 @@ public class Get extends Task { | |||
try { | |||
Object encoder = | |||
Class.forName("sun.misc.BASE64Encoder").newInstance(); | |||
encoding = (String) | |||
encoding = (String) | |||
encoder.getClass().getMethod("encode", new Class[] {byte[].class}) | |||
.invoke(encoder, new Object[] {up.getBytes()}); | |||
@@ -67,7 +67,7 @@ import java.util.Vector; | |||
* Task to import another build file into the current project. | |||
* <p> | |||
* It must be 'top level'. On execution it will read another Ant file | |||
* into the same Project. | |||
* into the same Project. | |||
* <p> | |||
* <b>Important</b>: there is one limitation related to the top level | |||
* elements in the imported files. The current implementation will | |||
@@ -77,7 +77,7 @@ import java.util.Vector; | |||
* <b>Important</b>: we have not finalized how relative file references | |||
* will be resolved in deep/complex build hierarchies -such as what happens | |||
* when an imported file imports another file. Use absolute references for | |||
* enhanced build file stability, especially in the imported files. | |||
* enhanced build file stability, especially in the imported files. | |||
* | |||
* Examples | |||
* <pre> | |||
@@ -109,7 +109,7 @@ public class ImportTask extends Task { | |||
// for relative paths. | |||
this.file=file; | |||
} | |||
/** | |||
* This relies on the task order model. | |||
* | |||
@@ -137,7 +137,7 @@ public class Input extends Task { | |||
* @exception BuildException | |||
*/ | |||
public void execute () throws BuildException { | |||
if (addproperty != null | |||
if (addproperty != null | |||
&& getProject().getProperty(addproperty) != null) { | |||
log("skipping " + getTaskName() + " as property " + addproperty | |||
+ " has already been set."); | |||
@@ -154,7 +154,7 @@ public class Input extends Task { | |||
getProject().getInputHandler().handleInput(request); | |||
String value = request.getInput(); | |||
if ((value == null || value.trim().length() == 0) | |||
if ((value == null || value.trim().length() == 0) | |||
&& defaultvalue != null) { | |||
value = defaultvalue; | |||
} | |||
@@ -104,7 +104,7 @@ public class Jar extends Zip { | |||
/** merged manifests added through filesets */ | |||
private Manifest filesetManifest; | |||
/** | |||
/** | |||
* Manifest of original archive, will be set to null if not in | |||
* update mode. | |||
*/ | |||
@@ -127,7 +127,7 @@ public class Jar extends Zip { | |||
/** The encoding to use when reading in a manifest file */ | |||
private String manifestEncoding; | |||
/** | |||
* The file found from the 'manifest' attribute. This can be | |||
* either the location of a manifest, or the name of a jar added | |||
@@ -139,7 +139,7 @@ public class Jar extends Zip { | |||
/** jar index is JDK 1.3+ only */ | |||
private boolean index = false; | |||
/** | |||
/** | |||
* whether to really create the archive in createEmptyZip, will | |||
* get set in getResourcesToAdd. | |||
*/ | |||
@@ -270,7 +270,7 @@ public class Jar extends Zip { | |||
ZipFile zf = null; | |||
try { | |||
zf = new ZipFile(jarFile); | |||
// must not use getEntry as "well behaving" applications | |||
// must accept the manifest in any capitalization | |||
Enumeration enum = zf.entries(); | |||
@@ -522,7 +522,7 @@ public class Jar extends Zip { | |||
manifest = getManifest(file); | |||
} | |||
} catch (UnsupportedEncodingException e) { | |||
throw new BuildException("Unsupported encoding while reading " | |||
throw new BuildException("Unsupported encoding while reading " | |||
+ "manifest: " + e.getMessage(), e); | |||
} | |||
} else if (filesetManifestConfig != null && | |||
@@ -551,7 +551,7 @@ public class Jar extends Zip { | |||
filesetManifest.merge(newManifest); | |||
} | |||
} catch (UnsupportedEncodingException e) { | |||
throw new BuildException("Unsupported encoding while reading " | |||
throw new BuildException("Unsupported encoding while reading " | |||
+ "manifest: " + e.getMessage(), e); | |||
} catch (ManifestException e) { | |||
log("Manifest in file " + file + " is invalid: " | |||
@@ -617,7 +617,7 @@ public class Jar extends Zip { | |||
} else { | |||
Manifest mf = createManifest(); | |||
if (!mf.equals(originalManifest)) { | |||
log("Updating jar since jar manifest has changed", | |||
log("Updating jar since jar manifest has changed", | |||
Project.MSG_VERBOSE); | |||
needsUpdate = true; | |||
} | |||
@@ -641,10 +641,10 @@ public class Jar extends Zip { | |||
if (!createEmpty) { | |||
return true; | |||
} | |||
ZipOutputStream zOut = null; | |||
try { | |||
log("Building MANIFEST-only jar: " | |||
log("Building MANIFEST-only jar: " | |||
+ getDestFile().getAbsolutePath()); | |||
zOut = new ZipOutputStream(new FileOutputStream(getDestFile())); | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -73,7 +73,7 @@ import org.apache.tools.ant.types.Reference; | |||
* the same JVM for the called application thus resulting in much | |||
* faster operation. | |||
* | |||
* @author Stefano Mazzocchi | |||
* @author Stefano Mazzocchi | |||
* <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
* @author Stefan Bodewig | |||
* @author <a href="mailto:donal@savvion.com">Donal Quinlan</a> | |||
@@ -102,7 +102,7 @@ public class Java extends Task { | |||
int err = -1; | |||
try { | |||
if ((err = executeJava()) != 0) { | |||
if ((err = executeJava()) != 0) { | |||
if (failOnError) { | |||
throw new BuildException("Java returned: " + err, getLocation()); | |||
} else { | |||
@@ -136,11 +136,11 @@ public class Java extends Task { | |||
log(cmdl.describeCommand(), Project.MSG_VERBOSE); | |||
} else { | |||
if (cmdl.getVmCommand().size() > 1) { | |||
log("JVM args ignored when same JVM is used.", | |||
log("JVM args ignored when same JVM is used.", | |||
Project.MSG_WARN); | |||
} | |||
if (dir != null) { | |||
log("Working directory ignored when same JVM is used.", | |||
log("Working directory ignored when same JVM is used.", | |||
Project.MSG_WARN); | |||
} | |||
@@ -150,14 +150,14 @@ public class Java extends Task { | |||
} | |||
if (cmdl.getBootclasspath() != null) { | |||
log("bootclasspath ignored when same JVM is used.", | |||
log("bootclasspath ignored when same JVM is used.", | |||
Project.MSG_WARN); | |||
} | |||
log("Running in same VM " + cmdl.describeJavaCommand(), | |||
log("Running in same VM " + cmdl.describeJavaCommand(), | |||
Project.MSG_VERBOSE); | |||
} | |||
try { | |||
if (fork) { | |||
return run(cmdl.getCommandline()); | |||
@@ -188,13 +188,13 @@ public class Java extends Task { | |||
/** | |||
* Set the classpath to be used when running the Java class | |||
* | |||
* | |||
* @param s an Ant Path object containing the classpath. | |||
*/ | |||
public void setClasspath(Path s) { | |||
createClasspath().append(s); | |||
} | |||
/** | |||
* Adds a path to the classpath. | |||
*/ | |||
@@ -267,9 +267,9 @@ public class Java extends Task { | |||
public void setResultProperty(String resultProperty) { | |||
this.resultProperty = resultProperty; | |||
} | |||
/** | |||
* helper method to set result property to the | |||
* helper method to set result property to the | |||
* passed in value if appropriate | |||
*/ | |||
protected void maybeSetResultPropertyValue(int result) { | |||
@@ -278,7 +278,7 @@ public class Java extends Task { | |||
project.setNewProperty(resultProperty, res); | |||
} | |||
} | |||
/** | |||
* If true, execute in a new VM. | |||
*/ | |||
@@ -295,7 +295,7 @@ public class Java extends Task { | |||
Project.MSG_WARN); | |||
cmdl.createVmArgument().setLine(s); | |||
} | |||
/** | |||
* Adds a JVM argument. | |||
*/ | |||
@@ -309,7 +309,7 @@ public class Java extends Task { | |||
public void setJvm(String s) { | |||
cmdl.setVm(s); | |||
} | |||
/** | |||
* Adds a system property. | |||
*/ | |||
@@ -363,7 +363,7 @@ public class Java extends Task { | |||
public void setInputString(String inputString) { | |||
redirector.setInputString(inputString); | |||
} | |||
/** | |||
* Controls whether error output of exec is logged. This is only useful | |||
* when output is being redirected and error output is desired in the | |||
@@ -372,7 +372,7 @@ public class Java extends Task { | |||
public void setLogError(boolean logError) { | |||
redirector.setLogError(logError); | |||
} | |||
/** | |||
* File the error stream of the process is redirected to. | |||
* | |||
@@ -414,7 +414,7 @@ public class Java extends Task { | |||
public void setJVMVersion(String value) { | |||
cmdl.setVmversion(value); | |||
} | |||
/** | |||
* Adds an environment variable. | |||
* | |||
@@ -467,8 +467,8 @@ public class Java extends Task { | |||
super.handleOutput(line); | |||
} | |||
} | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
public int handleInput(byte[] buffer, int offset, int length) | |||
throws IOException { | |||
if (redirector.getInputStream() != null) { | |||
return redirector.handleInput(buffer, offset, length); | |||
@@ -489,7 +489,7 @@ public class Java extends Task { | |||
super.handleFlush(line); | |||
} | |||
} | |||
/** | |||
* Pass output sent to System.err to specified output file. | |||
* | |||
@@ -502,7 +502,7 @@ public class Java extends Task { | |||
super.handleErrorOutput(line); | |||
} | |||
} | |||
/** | |||
* Pass output sent to System.err to specified output file. | |||
* | |||
@@ -515,7 +515,7 @@ public class Java extends Task { | |||
super.handleErrorOutput(line); | |||
} | |||
} | |||
/** | |||
* Executes the given classname with the given arguments as it | |||
* was a command line application. | |||
@@ -539,11 +539,11 @@ public class Java extends Task { | |||
* Executes the given classname with the given arguments in a separate VM. | |||
*/ | |||
private int run(String[] command) throws BuildException { | |||
Execute exe | |||
Execute exe | |||
= new Execute(redirector.createHandler(), createWatchdog()); | |||
exe.setAntRun(getProject()); | |||
if (dir == null) { | |||
dir = getProject().getBaseDir(); | |||
} else if (!dir.exists() || !dir.isDirectory()) { | |||
@@ -551,9 +551,9 @@ public class Java extends Task { | |||
+ " is not a valid directory", | |||
getLocation()); | |||
} | |||
exe.setWorkingDirectory(dir); | |||
String[] environment = env.getVariables(); | |||
if (environment != null) { | |||
for (int i = 0; i < environment.length; i++) { | |||
@@ -568,7 +568,7 @@ public class Java extends Task { | |||
try { | |||
int rc = exe.execute(); | |||
if (exe.killedProcess()) { | |||
log("Timeout: killed the sub-process", Project.MSG_WARN); | |||
log("Timeout: killed the sub-process", Project.MSG_WARN); | |||
} | |||
redirector.complete(); | |||
return rc; | |||
@@ -1523,7 +1523,7 @@ public class Javadoc extends Task { | |||
log ("-linksource option not supported on JavaDoc < 1.4", | |||
Project.MSG_VERBOSE); | |||
} | |||
this.linksource = b; | |||
this.linksource = b; | |||
} | |||
/** | |||
@@ -1537,7 +1537,7 @@ public class Javadoc extends Task { | |||
log ("-breakiterator option not supported on JavaDoc < 1.4", | |||
Project.MSG_VERBOSE); | |||
} | |||
this.breakiterator = b; | |||
this.breakiterator = b; | |||
} | |||
/** | |||
@@ -1845,7 +1845,7 @@ public class Javadoc extends Task { | |||
toExecute.createArgument().setValue("-source"); | |||
toExecute.createArgument().setValue(source); | |||
} | |||
if (linksource && doclet == null) { | |||
toExecute.createArgument().setValue("-linksource"); | |||
} | |||
@@ -86,9 +86,9 @@ public class Jikes { | |||
protected Jikes(JikesOutputParser jop, String command, Project project) { | |||
super(); | |||
System.err.println("As of Ant 1.2 released in October 2000, " | |||
System.err.println("As of Ant 1.2 released in October 2000, " | |||
+ "the Jikes class"); | |||
System.err.println("is considered to be dead code by the Ant " | |||
System.err.println("is considered to be dead code by the Ant " | |||
+ "developers and is unmaintained."); | |||
System.err.println("Don\'t use it!"); | |||
@@ -113,7 +113,7 @@ public class Jikes { | |||
// There have been reports that 300 files could be compiled | |||
// so 250 is a conservative approach | |||
if (myos.toLowerCase().indexOf("windows") >= 0 | |||
if (myos.toLowerCase().indexOf("windows") >= 0 | |||
&& args.length > 250) { | |||
PrintWriter out = null; | |||
try { | |||
@@ -123,10 +123,10 @@ public class Jikes { | |||
out.println(args[i]); | |||
} | |||
out.flush(); | |||
commandArray = new String[] { command, | |||
commandArray = new String[] { command, | |||
"@" + tmpFile.getAbsolutePath()}; | |||
} catch (IOException e) { | |||
throw new BuildException("Error creating temporary file", | |||
throw new BuildException("Error creating temporary file", | |||
e); | |||
} finally { | |||
if (out != null) { | |||
@@ -138,7 +138,7 @@ public class Jikes { | |||
commandArray[0] = command; | |||
System.arraycopy(args, 0, commandArray, 1, args.length); | |||
} | |||
// We assume, that everything jikes writes goes to | |||
// standard output, not to standard error. The option | |||
// -Xstdout that is given to Jikes in Javac.doJikesCompile() | |||
@@ -80,7 +80,7 @@ public class JikesOutputParser implements ExecuteStreamHandler { | |||
protected int warnings; | |||
protected boolean error = false; | |||
protected boolean emacsMode; | |||
protected BufferedReader br; | |||
/** | |||
@@ -119,9 +119,9 @@ public class JikesOutputParser implements ExecuteStreamHandler { | |||
protected JikesOutputParser(Task task, boolean emacsMode) { | |||
super(); | |||
System.err.println("As of Ant 1.2 released in October 2000, the " | |||
System.err.println("As of Ant 1.2 released in October 2000, the " | |||
+ "JikesOutputParser class"); | |||
System.err.println("is considered to be dead code by the Ant " | |||
System.err.println("is considered to be dead code by the Ant " | |||
+ "developers and is unmaintained."); | |||
System.err.println("Don\'t use it!"); | |||
@@ -145,9 +145,9 @@ public class JikesOutputParser implements ExecuteStreamHandler { | |||
String line; | |||
String lower; | |||
// We assume, that every output, jike does, stands for an error/warning | |||
// XXX | |||
// XXX | |||
// Is this correct? | |||
// TODO: | |||
// A warning line, that shows code, which contains a variable | |||
// error will cause some trouble. The parser should definitely | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000,2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000,2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -68,7 +68,7 @@ import org.apache.tools.ant.Task; | |||
/** | |||
* Keyword substitution. Input file is written to output file. | |||
* Do not make input file same as output file. | |||
* Keywords in input files look like this: @foo@. See the docs for the | |||
* Keywords in input files look like this: @foo@. See the docs for the | |||
* setKeys method to understand how to do the substitutions. | |||
* | |||
* @author Jon S. Stevens <a href="mailto:jon@clearink.com">jon@clearink.com</a> | |||
@@ -81,7 +81,7 @@ public class KeySubst extends Task { | |||
private File dest = null; | |||
private String sep = "*"; | |||
private Hashtable replacements = new Hashtable(); | |||
/** | |||
Do the execution. | |||
*/ | |||
@@ -90,7 +90,7 @@ public class KeySubst extends Task { | |||
log("Performing Substitions"); | |||
if (source == null || dest == null) { | |||
log("Source and destinations must not be null"); | |||
return; | |||
return; | |||
} | |||
BufferedReader br = null; | |||
BufferedWriter bw = null; | |||
@@ -152,7 +152,7 @@ public class KeySubst extends Task { | |||
} | |||
/** | |||
* Sets the keys. | |||
* | |||
* | |||
Format string is like this: | |||
<p> | |||
name=value*name2=value | |||
@@ -170,21 +170,21 @@ public class KeySubst extends Task { | |||
String token = tok.nextToken().trim(); | |||
StringTokenizer itok = | |||
new StringTokenizer(token, "=", false); | |||
String name = itok.nextToken(); | |||
String value = itok.nextToken(); | |||
replacements.put(name, value); | |||
} | |||
} | |||
} | |||
public static void main(String[] args) { | |||
try { | |||
Hashtable hash = new Hashtable(); | |||
hash.put("VERSION", "1.0.3"); | |||
hash.put("b", "ffff"); | |||
System.out.println(KeySubst.replace("$f ${VERSION} f ${b} jj $", | |||
System.out.println(KeySubst.replace("$f ${VERSION} f ${b} jj $", | |||
hash)); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
@@ -193,7 +193,7 @@ public class KeySubst extends Task { | |||
/** | |||
Does replacement on text using the hashtable of keys. | |||
@return the string with the replacements in it. | |||
*/ | |||
public static String replace(String origString, Hashtable keys) | |||
@@ -203,7 +203,7 @@ public class KeySubst extends Task { | |||
int i = 0; | |||
String key = null; | |||
while ((index = origString.indexOf("${", i)) > -1) { | |||
key = origString.substring(index + 2, origString.indexOf("}", | |||
key = origString.substring(index + 2, origString.indexOf("}", | |||
index + 3)); | |||
finalString.append (origString.substring(i, index)); | |||
if (keys.containsKey(key)) { | |||
@@ -189,7 +189,7 @@ public final class LoadFile extends Task { | |||
crh.setFilterChains(filterChains); | |||
crh.setProject(getProject()); | |||
instream = crh.getAssembledReader(); | |||
text = crh.readFully(instream); | |||
} | |||
@@ -110,12 +110,12 @@ public class LogOutputStream extends OutputStream { | |||
} | |||
/** | |||
* Flush this log stream | |||
* Flush this log stream | |||
*/ | |||
public void flush() { | |||
processBuffer(); | |||
} | |||
/** | |||
* Converts the buffer to a string and sends it to <code>processLine</code> | |||
@@ -637,7 +637,7 @@ public class Manifest { | |||
while (e.hasMoreElements()) { | |||
String key = (String) e.nextElement(); | |||
Attribute attribute = getAttribute(key); | |||
cloned.storeAttribute(new Attribute(attribute.getName(), | |||
cloned.storeAttribute(new Attribute(attribute.getName(), | |||
attribute.getValue())); | |||
} | |||
return cloned; | |||
@@ -729,9 +729,9 @@ public class Manifest { | |||
+ defManifest); | |||
} | |||
try { | |||
Manifest defaultManifest | |||
Manifest defaultManifest | |||
= new Manifest(new InputStreamReader(in, "UTF-8")); | |||
Attribute createdBy = new Attribute("Created-By", | |||
Attribute createdBy = new Attribute("Created-By", | |||
System.getProperty("java.vm.version") + " (" | |||
+ System.getProperty("java.vm.vendor") + ")" ); | |||
defaultManifest.getMainSection().storeAttribute(createdBy); | |||
@@ -96,11 +96,11 @@ public class ManifestTask extends Task { | |||
*/ | |||
private Mode mode; | |||
/** | |||
/** | |||
* The encoding of the manifest file | |||
*/ | |||
private String encoding; | |||
/** | |||
* Helper class for Manifest's mode attribute. | |||
*/ | |||
@@ -410,7 +410,7 @@ public abstract class MatchingTask extends Task implements SelectorContainer { | |||
public void addDepend(DependSelector selector) { | |||
fileset.addDepend(selector); | |||
} | |||
/** | |||
* add a regular expression selector entry on the selector list | |||
*/ | |||
@@ -87,14 +87,14 @@ public class Mkdir extends Task { | |||
if (dir.isFile()) { | |||
throw new BuildException("Unable to create directory as a file " | |||
+ "already exists with that name: " | |||
+ "already exists with that name: " | |||
+ dir.getAbsolutePath()); | |||
} | |||
if (!dir.exists()) { | |||
boolean result = dir.mkdirs(); | |||
if (!result) { | |||
String msg = "Directory " + dir.getAbsolutePath() | |||
String msg = "Directory " + dir.getAbsolutePath() | |||
+ " creation was not successful for an unknown reason"; | |||
throw new BuildException(msg, getLocation()); | |||
} | |||
@@ -66,14 +66,14 @@ import org.apache.tools.ant.util.StringUtils; | |||
* Executes the contained tasks in separate threads, continuing | |||
* once all are completed. | |||
* <p> | |||
* New behavior allows for the ant script to specify a maximum number of | |||
* New behavior allows for the ant script to specify a maximum number of | |||
* threads that will be executed in parallel. One should be very careful about | |||
* using the <code>waitFor</code> task when specifying <code>threadCount</code> | |||
* as it can cause deadlocks if the number of threads is too small or if one of | |||
* the nested tasks fails to execute completely. The task selection algorithm | |||
* will insure that the tasks listed before a task have started before that | |||
* task is started, but it will not insure a successful completion of those | |||
* tasks or that those tasks will finish first (i.e. it's a classic race | |||
* as it can cause deadlocks if the number of threads is too small or if one of | |||
* the nested tasks fails to execute completely. The task selection algorithm | |||
* will insure that the tasks listed before a task have started before that | |||
* task is started, but it will not insure a successful completion of those | |||
* tasks or that those tasks will finish first (i.e. it's a classic race | |||
* condition). | |||
* </p> | |||
* @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a> | |||
@@ -91,13 +91,13 @@ public class Parallel extends Task | |||
/** Semaphore to notify of completed threads */ | |||
private final Object semaphore = new Object(); | |||
/** Total number of threads to run */ | |||
private int numThreads = 0; | |||
/** Total number of threads per processor to run. */ | |||
private int numThreadsPerProcessor = 0; | |||
/** Interval (in ms) to poll for finished threads. */ | |||
private int pollInterval = 1000; // default is once a second | |||
@@ -108,28 +108,28 @@ public class Parallel extends Task | |||
public void addTask(Task nestedTask) { | |||
nestedTasks.addElement(nestedTask); | |||
} | |||
/** | |||
* Dynamically generates the number of threads to execute based on the | |||
* number of available processors (via | |||
* <code>java.lang.Runtime.availableProcessors()</code>). Requires a J2SE | |||
* 1.4 VM, and it will overwrite the value set in threadCount. | |||
* If used in a 1.1, 1.2, or 1.3 VM then the task will defer to | |||
/** | |||
* Dynamically generates the number of threads to execute based on the | |||
* number of available processors (via | |||
* <code>java.lang.Runtime.availableProcessors()</code>). Requires a J2SE | |||
* 1.4 VM, and it will overwrite the value set in threadCount. | |||
* If used in a 1.1, 1.2, or 1.3 VM then the task will defer to | |||
* <code>threadCount</code>.; optional | |||
* @param numThreadsPerProcessor Number of threads to create per available | |||
* @param numThreadsPerProcessor Number of threads to create per available | |||
* processor. | |||
* | |||
*/ | |||
public void setThreadsPerProcessor(int numThreadsPerProcessor) { | |||
this.numThreadsPerProcessor = numThreadsPerProcessor; | |||
} | |||
/** | |||
* Statically determine the maximum number of tasks to execute | |||
* simultaneously. If there are less tasks than threads then all will be | |||
* executed at once, if there are more then only <code>threadCount</code> | |||
* tasks will be executed at one time. If <code>threadsPerProcessor</code> | |||
* is set and the JVM is at least a 1.4 VM then this value is | |||
/** | |||
* Statically determine the maximum number of tasks to execute | |||
* simultaneously. If there are less tasks than threads then all will be | |||
* executed at once, if there are more then only <code>threadCount</code> | |||
* tasks will be executed at one time. If <code>threadsPerProcessor</code> | |||
* is set and the JVM is at least a 1.4 VM then this value is | |||
* ignored.; optional | |||
* | |||
* @param numThreads total number of therads. | |||
@@ -139,8 +139,8 @@ public class Parallel extends Task | |||
this.numThreads = numThreads; | |||
} | |||
/** | |||
* Interval to poll for completed threads when threadCount or | |||
/** | |||
* Interval to poll for completed threads when threadCount or | |||
* threadsPerProcessor is specified. Integer in milliseconds.; optional | |||
* | |||
* @param pollInterval New value of property pollInterval. | |||
@@ -148,7 +148,7 @@ public class Parallel extends Task | |||
public void setPollInterval(int pollInterval) { | |||
this.pollInterval = pollInterval; | |||
} | |||
/** | |||
* Execute the parallel tasks | |||
* | |||
@@ -161,7 +161,7 @@ public class Parallel extends Task | |||
} | |||
spinThreads(); | |||
} | |||
/** | |||
* Determine the number of threads based on the number of processors | |||
*/ | |||
@@ -173,7 +173,7 @@ public class Parallel extends Task | |||
} | |||
} | |||
} | |||
/** | |||
* Spin up required threads with a maximum number active at any given time. | |||
* | |||
@@ -184,11 +184,11 @@ public class Parallel extends Task | |||
Thread[] threads = new Thread[numTasks]; | |||
TaskRunnable[] runnables = new TaskRunnable[numTasks]; | |||
int threadNumber = 0; | |||
for (Enumeration e = nestedTasks.elements(); e.hasMoreElements(); | |||
for (Enumeration e = nestedTasks.elements(); e.hasMoreElements(); | |||
threadNumber++) { | |||
Task nestedTask = (Task) e.nextElement(); | |||
ThreadGroup group = new ThreadGroup("parallel"); | |||
TaskRunnable taskRunnable | |||
TaskRunnable taskRunnable | |||
= new TaskRunnable(threadNumber, nestedTask); | |||
runnables[threadNumber] = taskRunnable; | |||
threads[threadNumber] = new Thread(group, taskRunnable); | |||
@@ -197,7 +197,7 @@ public class Parallel extends Task | |||
final int maxRunning = numThreads; | |||
Thread[] running = new Thread[maxRunning]; | |||
threadNumber = 0; | |||
// now run them in limited numbers... | |||
outer: | |||
while (threadNumber < numTasks) { | |||
@@ -206,7 +206,7 @@ public class Parallel extends Task | |||
if (running[i] == null || !running[i].isAlive()) { | |||
running[i] = threads[threadNumber++]; | |||
running[i].start(); | |||
// countinue on outer while loop in case we | |||
// countinue on outer while loop in case we | |||
// used our last thread | |||
continue outer; | |||
} | |||
@@ -221,8 +221,8 @@ public class Parallel extends Task | |||
} | |||
} | |||
} | |||
// now join to all the threads | |||
// now join to all the threads | |||
for (int i = 0; i < maxRunning; ++i) { | |||
try { | |||
if (running[i] != null) { | |||
@@ -232,7 +232,7 @@ public class Parallel extends Task | |||
// who would interrupt me at a time like this? | |||
} | |||
} | |||
// now did any of the threads throw an exception | |||
StringBuffer exceptionMessage = new StringBuffer(); | |||
int numExceptions = 0; | |||
@@ -245,7 +245,7 @@ public class Parallel extends Task | |||
if (firstException == null) { | |||
firstException = t; | |||
} | |||
if (t instanceof BuildException && | |||
if (t instanceof BuildException && | |||
firstLocation == Location.UNKNOWN_LOCATION) { | |||
firstLocation = ((BuildException) t).getLocation(); | |||
} | |||
@@ -253,7 +253,7 @@ public class Parallel extends Task | |||
exceptionMessage.append(t.getMessage()); | |||
} | |||
} | |||
if (numExceptions == 1) { | |||
if (firstException instanceof BuildException) { | |||
throw (BuildException) firstException; | |||
@@ -261,11 +261,11 @@ public class Parallel extends Task | |||
throw new BuildException(firstException); | |||
} | |||
} else if (numExceptions > 1) { | |||
throw new BuildException(exceptionMessage.toString(), | |||
throw new BuildException(exceptionMessage.toString(), | |||
firstLocation); | |||
} | |||
} | |||
/** | |||
* Determine the number of processors. Only effective on later VMs | |||
* | |||
@@ -328,5 +328,5 @@ public class Parallel extends Task | |||
return exception; | |||
} | |||
} | |||
} |
@@ -90,7 +90,7 @@ public class Patch extends Task { | |||
*/ | |||
public void setPatchfile(File file) { | |||
if (!file.exists()) { | |||
throw new BuildException("patchfile " + file + " doesn\'t exist", | |||
throw new BuildException("patchfile " + file + " doesn\'t exist", | |||
getLocation()); | |||
} | |||
cmd.createArgument().setValue("-i"); | |||
@@ -165,9 +165,9 @@ public class Patch extends Task { | |||
*/ | |||
public void execute() throws BuildException { | |||
if (!havePatchfile) { | |||
throw new BuildException("patchfile argument is required", | |||
throw new BuildException("patchfile argument is required", | |||
getLocation()); | |||
} | |||
} | |||
Commandline toExecute = (Commandline) cmd.clone(); | |||
toExecute.setExecutable("patch"); | |||
@@ -176,7 +176,7 @@ public class Patch extends Task { | |||
} | |||
Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, | |||
Project.MSG_WARN), | |||
Project.MSG_WARN), | |||
null); | |||
exe.setCommandline(toExecute.getCommandline()); | |||
@@ -237,7 +237,7 @@ public class PathConvert extends Task { | |||
/** | |||
* Set targetos to a platform to one of | |||
* "windows", "unix", "netware", or "os/2". | |||
* | |||
* | |||
* Required unless unless pathsep and/or dirsep are specified. | |||
* | |||
* @deprecated use the method taking a TargetOs argument instead | |||
@@ -74,14 +74,14 @@ class ProcessDestroyer | |||
private Method addShutdownHookMethod; | |||
private Method removeShutdownHookMethod; | |||
private ProcessDestroyerImpl destroyProcessThread = null; | |||
// whether or not this ProcessDestroyer has been registered as a | |||
// shutdown hook | |||
private boolean added = false; | |||
private class ProcessDestroyerImpl extends Thread{ | |||
private boolean shouldDestroy = true; | |||
public ProcessDestroyerImpl(){ | |||
super("ProcessDestroyer Shutdown Hook"); | |||
} | |||
@@ -90,30 +90,30 @@ class ProcessDestroyer | |||
ProcessDestroyer.this.run(); | |||
} | |||
} | |||
public void setShouldDestroy(boolean shouldDestroy){ | |||
this.shouldDestroy = shouldDestroy; | |||
} | |||
} | |||
/** | |||
* Constructs a <code>ProcessDestroyer</code> and obtains | |||
* <code>Runtime.addShutdownHook()</code> and | |||
* <code>Runtime.removeShutdownHook()</code> through reflection. The | |||
* ProcessDestroyer manages a list of processes to be destroyed when the | |||
* VM exits. If a process is added when the list is empty, | |||
* this <code>ProcessDestroyer</code> is registered as a shutdown hook. If | |||
* Constructs a <code>ProcessDestroyer</code> and obtains | |||
* <code>Runtime.addShutdownHook()</code> and | |||
* <code>Runtime.removeShutdownHook()</code> through reflection. The | |||
* ProcessDestroyer manages a list of processes to be destroyed when the | |||
* VM exits. If a process is added when the list is empty, | |||
* this <code>ProcessDestroyer</code> is registered as a shutdown hook. If | |||
* removing a process results in an empty list, the | |||
* <code>ProcessDestroyer</code> is removed as a shutdown hook. | |||
*/ | |||
public ProcessDestroyer() { | |||
try { | |||
// check to see if the shutdown hook methods exists | |||
// check to see if the shutdown hook methods exists | |||
// (support pre-JDK 1.3 VMs) | |||
Class[] paramTypes = {Thread.class}; | |||
addShutdownHookMethod = | |||
Runtime.class.getMethod("addShutdownHook", paramTypes); | |||
removeShutdownHookMethod = | |||
Runtime.class.getMethod("removeShutdownHook", paramTypes); | |||
// wait to add shutdown hook as needed | |||
@@ -121,9 +121,9 @@ class ProcessDestroyer | |||
// it just won't be added as a shutdown hook... :( | |||
} | |||
} | |||
/** | |||
* Registers this <code>ProcessDestroyer</code> as a shutdown hook, | |||
* Registers this <code>ProcessDestroyer</code> as a shutdown hook, | |||
* uses reflection to ensure pre-JDK 1.3 compatibility. | |||
*/ | |||
private void addShutdownHook(){ | |||
@@ -140,7 +140,7 @@ class ProcessDestroyer | |||
} | |||
} | |||
} | |||
/** | |||
* Registers this <code>ProcessDestroyer</code> as a shutdown hook, | |||
* uses reflection to ensure pre-JDK 1.3 compatibility | |||
@@ -161,7 +161,7 @@ class ProcessDestroyer | |||
destroyProcessThread.setShouldDestroy(false); | |||
destroyProcessThread.start(); | |||
// this should return quickly, since Process.destroy() | |||
try{ | |||
try{ | |||
destroyProcessThread.join(20000); | |||
}catch(InterruptedException ie){ | |||
// the thread didn't die in time | |||
@@ -174,27 +174,27 @@ class ProcessDestroyer | |||
} | |||
} | |||
} | |||
/** | |||
* Returns whether or not the ProcessDestroyer is registered as | |||
* Returns whether or not the ProcessDestroyer is registered as | |||
* as shutdown hook | |||
* @return true if this is currently added as shutdown hook | |||
*/ | |||
public boolean isAddedAsShutdownHook(){ | |||
return added; | |||
} | |||
/** | |||
* Returns <code>true</code> if the specified <code>Process</code> was | |||
* successfully added to the list of processes to destroy upon VM exit. | |||
* | |||
* | |||
* @param process the process to add | |||
* @return <code>true</code> if the specified <code>Process</code> was | |||
* successfully added | |||
*/ | |||
public boolean add(Process process) { | |||
synchronized(processes){ | |||
// if this list is empty, register the shutdown hook | |||
// if this list is empty, register the shutdown hook | |||
if(processes.size() == 0){ | |||
addShutdownHook(); | |||
} | |||
@@ -76,8 +76,8 @@ public class PumpStreamHandler implements ExecuteStreamHandler { | |||
private OutputStream out; | |||
private OutputStream err; | |||
private InputStream input; | |||
public PumpStreamHandler(OutputStream out, OutputStream err, | |||
public PumpStreamHandler(OutputStream out, OutputStream err, | |||
InputStream input) { | |||
this.out = out; | |||
this.err = err; | |||
@@ -116,7 +116,7 @@ public class PumpStreamHandler implements ExecuteStreamHandler { | |||
} catch (IOException e) { | |||
//ignore | |||
} | |||
} | |||
} | |||
} | |||
public void start() { | |||
@@ -144,7 +144,7 @@ public class PumpStreamHandler implements ExecuteStreamHandler { | |||
inputThread.join(); | |||
} catch (InterruptedException e) { | |||
// ignore | |||
} | |||
} | |||
} | |||
try { | |||
@@ -188,9 +188,9 @@ public class PumpStreamHandler implements ExecuteStreamHandler { | |||
* Creates a stream pumper to copy the given input stream to the | |||
* given output stream. | |||
*/ | |||
protected Thread createPump(InputStream is, OutputStream os, | |||
protected Thread createPump(InputStream is, OutputStream os, | |||
boolean closeWhenExhausted) { | |||
final Thread result | |||
final Thread result | |||
= new Thread(new StreamPumper(is, os, closeWhenExhausted)); | |||
result.setDaemon(true); | |||
return result; | |||
@@ -78,11 +78,11 @@ import org.apache.tools.ant.util.StringUtils; | |||
/** | |||
* Replaces all occurrences of one or more string tokens with given | |||
* values in the indicated files. Each value can be either a string | |||
* values in the indicated files. Each value can be either a string | |||
* or the value of a property available in a designated property file. | |||
* If you want to replace a text that crosses line boundaries, you | |||
* must use a nested <code><replacetoken></code> element. | |||
* @author Stefano Mazzocchi | |||
* @author Stefano Mazzocchi | |||
* <a href="mailto:stefano@apache.org">stefano@apache.org</a> | |||
* @author <a href="mailto:erik@desknetinc.com">Erik Langenbach</a> | |||
* | |||
@@ -91,7 +91,7 @@ import org.apache.tools.ant.util.StringUtils; | |||
* @ant.task category="filesystem" | |||
*/ | |||
public class Replace extends MatchingTask { | |||
private File src = null; | |||
private NestedString token = null; | |||
private NestedString value = new NestedString(); | |||
@@ -104,12 +104,12 @@ public class Replace extends MatchingTask { | |||
private File dir = null; | |||
private int fileCount; | |||
private int replaceCount; | |||
private int replaceCount; | |||
private boolean summary = false; | |||
/** The encoding used to read and write files - if null, uses default */ | |||
private String encoding = null; | |||
private FileUtils fileUtils = FileUtils.newFileUtils(); | |||
/** | |||
@@ -143,7 +143,7 @@ public class Replace extends MatchingTask { | |||
public void validate() throws BuildException { | |||
//Validate mandatory attributes | |||
if (token == null) { | |||
String message = "token is a mandatory attribute " | |||
String message = "token is a mandatory attribute " | |||
+ "of replacefilter."; | |||
throw new BuildException(message); | |||
} | |||
@@ -156,8 +156,8 @@ public class Replace extends MatchingTask { | |||
//value and property are mutually exclusive attributes | |||
if ((value != null) && (property != null)) { | |||
String message = "Either value or property " | |||
+ "can be specified, but a replacefilter " | |||
String message = "Either value or property " | |||
+ "can be specified, but a replacefilter " | |||
+ "element cannot have both."; | |||
throw new BuildException(message); | |||
} | |||
@@ -174,7 +174,7 @@ public class Replace extends MatchingTask { | |||
//Make sure property exists in property file | |||
if (properties == null || | |||
properties.getProperty(property) == null) { | |||
String message = "property \"" + property | |||
String message = "property \"" + property | |||
+ "\" was not found in " + propertyFile.getPath(); | |||
throw new BuildException(message); | |||
} | |||
@@ -256,7 +256,7 @@ public class Replace extends MatchingTask { | |||
public void execute() throws BuildException { | |||
Vector savedFilters = (Vector) replacefilters.clone(); | |||
Properties savedProperties = | |||
Properties savedProperties = | |||
properties == null ? null : (Properties) properties.clone(); | |||
try { | |||
@@ -270,42 +270,42 @@ public class Replace extends MatchingTask { | |||
replaceFilter.setValue(props.getProperty(token)); | |||
} | |||
} | |||
validateAttributes(); | |||
if (propertyFile != null) { | |||
properties = getProperties(propertyFile); | |||
} | |||
validateReplacefilters(); | |||
fileCount = 0; | |||
replaceCount = 0; | |||
if (src != null) { | |||
processFile(src); | |||
} | |||
if (dir != null) { | |||
DirectoryScanner ds = super.getDirectoryScanner(dir); | |||
String[] srcs = ds.getIncludedFiles(); | |||
for (int i = 0; i < srcs.length; i++) { | |||
File file = new File(dir, srcs[i]); | |||
processFile(file); | |||
} | |||
} | |||
if (summary) { | |||
log("Replaced " + replaceCount + " occurrences in " | |||
log("Replaced " + replaceCount + " occurrences in " | |||
+ fileCount + " files.", Project.MSG_INFO); | |||
} | |||
} finally { | |||
replacefilters = savedFilters; | |||
properties = savedProperties; | |||
} // end of finally | |||
} | |||
/** | |||
* Validate attributes provided for this task in .xml build file. | |||
* | |||
@@ -314,12 +314,12 @@ public class Replace extends MatchingTask { | |||
*/ | |||
public void validateAttributes() throws BuildException { | |||
if (src == null && dir == null) { | |||
String message = "Either the file or the dir attribute " | |||
String message = "Either the file or the dir attribute " | |||
+ "must be specified"; | |||
throw new BuildException(message, getLocation()); | |||
} | |||
if (propertyFile != null && !propertyFile.exists()) { | |||
String message = "Property file " + propertyFile.getPath() | |||
String message = "Property file " + propertyFile.getPath() | |||
+ " does not exist."; | |||
throw new BuildException(message, getLocation()); | |||
} | |||
@@ -343,7 +343,7 @@ public class Replace extends MatchingTask { | |||
public void validateReplacefilters() | |||
throws BuildException { | |||
for (int i = 0; i < replacefilters.size(); i++) { | |||
Replacefilter element = | |||
Replacefilter element = | |||
(Replacefilter) replacefilters.elementAt(i); | |||
element.validate(); | |||
} | |||
@@ -362,11 +362,11 @@ public class Replace extends MatchingTask { | |||
try { | |||
properties.load(new FileInputStream(propertyFile)); | |||
} catch (FileNotFoundException e) { | |||
String message = "Property file (" + propertyFile.getPath() | |||
String message = "Property file (" + propertyFile.getPath() | |||
+ ") not found."; | |||
throw new BuildException(message); | |||
} catch (IOException e) { | |||
String message = "Property file (" + propertyFile.getPath() | |||
String message = "Property file (" + propertyFile.getPath() | |||
+ ") cannot be loaded."; | |||
throw new BuildException(message); | |||
} | |||
@@ -384,11 +384,11 @@ public class Replace extends MatchingTask { | |||
*/ | |||
private void processFile(File src) throws BuildException { | |||
if (!src.exists()) { | |||
throw new BuildException("Replace: source file " + src.getPath() | |||
throw new BuildException("Replace: source file " + src.getPath() | |||
+ " doesn't exist", getLocation()); | |||
} | |||
File temp = fileUtils.createTempFile("rep", ".tmp", | |||
File temp = fileUtils.createTempFile("rep", ".tmp", | |||
fileUtils.getParentFile(src)); | |||
Reader reader = null; | |||
@@ -398,7 +398,7 @@ public class Replace extends MatchingTask { | |||
: new InputStreamReader(new FileInputStream(src), encoding); | |||
writer = encoding == null ? new FileWriter(temp) | |||
: new OutputStreamWriter(new FileOutputStream(temp), encoding); | |||
BufferedReader br = new BufferedReader(reader); | |||
BufferedWriter bw = new BufferedWriter(writer); | |||
@@ -418,9 +418,9 @@ public class Replace extends MatchingTask { | |||
StringUtils.LINE_SEP, false); | |||
String tok = stringReplace(token.getText(), "\n", | |||
StringUtils.LINE_SEP, false); | |||
// for each found token, replace with value | |||
log("Replacing in " + src.getPath() + ": " + token.getText() | |||
log("Replacing in " + src.getPath() + ": " + token.getText() | |||
+ " --> " + value.getText(), Project.MSG_VERBOSE); | |||
newString = stringReplace(newString, tok, val, true); | |||
} | |||
@@ -449,8 +449,8 @@ public class Replace extends MatchingTask { | |||
temp = null; | |||
} | |||
} catch (IOException ioe) { | |||
throw new BuildException("IOException in " + src + " - " + | |||
ioe.getClass().getName() + ":" | |||
throw new BuildException("IOException in " + src + " - " + | |||
ioe.getClass().getName() + ":" | |||
+ ioe.getMessage(), ioe, getLocation()); | |||
} finally { | |||
if (reader != null) { | |||
@@ -467,7 +467,7 @@ public class Replace extends MatchingTask { | |||
temp.delete(); | |||
} | |||
} | |||
} | |||
/** | |||
@@ -483,9 +483,9 @@ public class Replace extends MatchingTask { | |||
Replacefilter filter = (Replacefilter) replacefilters.elementAt(i); | |||
//for each found token, replace with value | |||
log("Replacing in " + filename + ": " + filter.getToken() | |||
log("Replacing in " + filename + ": " + filter.getToken() | |||
+ " --> " + filter.getReplaceValue(), Project.MSG_VERBOSE); | |||
newString = stringReplace(newString, filter.getToken(), | |||
newString = stringReplace(newString, filter.getToken(), | |||
filter.getReplaceValue(), true); | |||
} | |||
@@ -512,8 +512,8 @@ public class Replace extends MatchingTask { | |||
public void setSummary(boolean summary) { | |||
this.summary = summary; | |||
} | |||
/** | |||
* Sets the name of a property file containing filters; optional. | |||
* Each property will be treated as a | |||
@@ -563,7 +563,7 @@ public class Replace extends MatchingTask { | |||
public void setEncoding(String encoding) { | |||
this.encoding = encoding; | |||
} | |||
/** | |||
* the token to filter as the text of a nested element | |||
* @return nested token to configure | |||
@@ -605,7 +605,7 @@ public class Replace extends MatchingTask { | |||
/** | |||
* Replace occurrences of str1 in string str with str2 | |||
*/ | |||
*/ | |||
private String stringReplace(String str, String str1, String str2, | |||
boolean countReplaces) { | |||
StringBuffer ret = new StringBuffer(); | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -86,25 +86,25 @@ import java.sql.ResultSetMetaData; | |||
* Executes a series of SQL statements on a database using JDBC. | |||
* | |||
* <p>Statements can | |||
* either be read in from a text file using the <i>src</i> attribute or from | |||
* either be read in from a text file using the <i>src</i> attribute or from | |||
* between the enclosing SQL tags.</p> | |||
* | |||
* <p>Multiple statements can be provided, separated by semicolons (or the | |||
* defined <i>delimiter</i>). Individual lines within the statements can be | |||
* | |||
* <p>Multiple statements can be provided, separated by semicolons (or the | |||
* defined <i>delimiter</i>). Individual lines within the statements can be | |||
* commented using either --, // or REM at the start of the line.</p> | |||
* | |||
* <p>The <i>autocommit</i> attribute specifies whether auto-commit should be | |||
* turned on or off whilst executing the statements. If auto-commit is turned | |||
* on each statement will be executed and committed. If it is turned off the | |||
* | |||
* <p>The <i>autocommit</i> attribute specifies whether auto-commit should be | |||
* turned on or off whilst executing the statements. If auto-commit is turned | |||
* on each statement will be executed and committed. If it is turned off the | |||
* statements will all be executed as one transaction.</p> | |||
* | |||
* <p>The <i>onerror</i> attribute specifies how to proceed when an error occurs | |||
* during the execution of one of the statements. | |||
* | |||
* <p>The <i>onerror</i> attribute specifies how to proceed when an error occurs | |||
* during the execution of one of the statements. | |||
* The possible values are: <b>continue</b> execution, only show the error; | |||
* <b>stop</b> execution and commit transaction; | |||
* and <b>abort</b> execution and transaction and fail task.</p> | |||
* | |||
* | |||
* @author <a href="mailto:jeff@custommonkey.org">Jeff Martin</a> | |||
* @author <A href="mailto:gholam@xtra.co.nz">Michael McCallum</A> | |||
* @author <A href="mailto:tim.stephenson@sybase.com">Tim Stephenson</A> | |||
@@ -126,8 +126,8 @@ public class SQLExec extends JDBCTask { | |||
} | |||
} | |||
private int goodSql = 0; | |||
private int totalSql = 0; | |||
@@ -166,13 +166,13 @@ public class SQLExec extends JDBCTask { | |||
* SQL Statement delimiter | |||
*/ | |||
private String delimiter = ";"; | |||
/** | |||
* The delimiter type indicating whether the delimiter will | |||
* only be recognized on a line by itself | |||
*/ | |||
private String delimiterType = DelimiterType.NORMAL; | |||
/** | |||
* Print SQL results. | |||
*/ | |||
@@ -188,12 +188,12 @@ public class SQLExec extends JDBCTask { | |||
*/ | |||
private File output = null; | |||
/** | |||
* Action to perform if an error is found | |||
**/ | |||
private String onError = "abort"; | |||
/** | |||
* Encoding to use when reading SQL statements from a file | |||
*/ | |||
@@ -203,7 +203,7 @@ public class SQLExec extends JDBCTask { | |||
* Append to an existing file or overwrite it? | |||
*/ | |||
private boolean append = false; | |||
/** | |||
* Keep the format of a sql block? | |||
*/ | |||
@@ -223,15 +223,15 @@ public class SQLExec extends JDBCTask { | |||
public void setSrc(File srcFile) { | |||
this.srcFile = srcFile; | |||
} | |||
/** | |||
* Set an inline SQL command to execute. | |||
* Set an inline SQL command to execute. | |||
* NB: Properties are not expanded in this text. | |||
*/ | |||
public void addText(String sql) { | |||
this.sqlCommand += sql; | |||
} | |||
/** | |||
* Adds a set of files (nested fileset attribute). | |||
*/ | |||
@@ -248,7 +248,7 @@ public class SQLExec extends JDBCTask { | |||
transactions.addElement(t); | |||
return t; | |||
} | |||
/** | |||
* Set the file encoding to use on the SQL files read in | |||
* | |||
@@ -257,9 +257,9 @@ public class SQLExec extends JDBCTask { | |||
public void setEncoding(String encoding) { | |||
this.encoding = encoding; | |||
} | |||
/** | |||
* Set the delimiter that separates SQL statements. Defaults to ";"; | |||
* Set the delimiter that separates SQL statements. Defaults to ";"; | |||
* optional | |||
* | |||
* <p>For example, set this to "go" and delimitertype to "ROW" for | |||
@@ -280,7 +280,7 @@ public class SQLExec extends JDBCTask { | |||
public void setDelimiterType(DelimiterType delimiterType) { | |||
this.delimiterType = delimiterType.getValue(); | |||
} | |||
/** | |||
* Print result sets from the statements; | |||
* optional, default false | |||
@@ -288,9 +288,9 @@ public class SQLExec extends JDBCTask { | |||
public void setPrint(boolean print) { | |||
this.print = print; | |||
} | |||
/** | |||
* Print headers for result sets from the | |||
* Print headers for result sets from the | |||
* statements; optional, default true. | |||
*/ | |||
public void setShowheaders(boolean showheaders) { | |||
@@ -298,7 +298,7 @@ public class SQLExec extends JDBCTask { | |||
} | |||
/** | |||
* Set the output file; | |||
* Set the output file; | |||
* optional, defaults to the Ant log. | |||
*/ | |||
public void setOutput(File output) { | |||
@@ -315,7 +315,7 @@ public class SQLExec extends JDBCTask { | |||
this.append = append; | |||
} | |||
/** | |||
* Action to perform when statement fails: continue, stop, or abort | |||
* optional; default "abort" | |||
@@ -327,13 +327,13 @@ public class SQLExec extends JDBCTask { | |||
/** | |||
* whether or not format should be preserved. | |||
* Defaults to false. | |||
* | |||
* | |||
* @param keepformat The keepformat to set | |||
*/ | |||
public void setKeepformat(boolean keepformat) { | |||
this.keepformat = keepformat; | |||
} | |||
/** | |||
* Set escape processing for statements. | |||
* | |||
@@ -353,15 +353,15 @@ public class SQLExec extends JDBCTask { | |||
sqlCommand = sqlCommand.trim(); | |||
try { | |||
if (srcFile == null && sqlCommand.length() == 0 | |||
&& filesets.isEmpty()) { | |||
if (srcFile == null && sqlCommand.length() == 0 | |||
&& filesets.isEmpty()) { | |||
if (transactions.size() == 0) { | |||
throw new BuildException("Source file or fileset, " | |||
+ "transactions or sql statement " | |||
+ "must be set!", location); | |||
} | |||
} | |||
if (srcFile != null && !srcFile.exists()) { | |||
throw new BuildException("Source file does not exist!", location); | |||
} | |||
@@ -371,16 +371,16 @@ public class SQLExec extends JDBCTask { | |||
FileSet fs = (FileSet) filesets.elementAt(i); | |||
DirectoryScanner ds = fs.getDirectoryScanner(project); | |||
File srcDir = fs.getDir(project); | |||
String[] srcFiles = ds.getIncludedFiles(); | |||
// Make a transaction for each file | |||
for (int j = 0 ; j < srcFiles.length ; j++) { | |||
Transaction t = createTransaction(); | |||
t.setSrc(new File(srcDir, srcFiles[j])); | |||
} | |||
} | |||
// Make a transaction group for the outer command | |||
Transaction t = createTransaction(); | |||
t.setSrc(srcFile); | |||
@@ -392,11 +392,11 @@ public class SQLExec extends JDBCTask { | |||
try { | |||
statement = conn.createStatement(); | |||
statement.setEscapeProcessing(escapeProcessing); | |||
PrintStream out = System.out; | |||
try { | |||
if (output != null) { | |||
log("Opening PrintStream to output file " + output, | |||
log("Opening PrintStream to output file " + output, | |||
Project.MSG_VERBOSE); | |||
out = new PrintStream( | |||
new BufferedOutputStream( | |||
@@ -404,11 +404,11 @@ public class SQLExec extends JDBCTask { | |||
.getAbsolutePath(), | |||
append))); | |||
} | |||
// Process all transactions | |||
for (Enumeration e = transactions.elements(); | |||
for (Enumeration e = transactions.elements(); | |||
e.hasMoreElements();) { | |||
((Transaction) e.nextElement()).runTransaction(out); | |||
if (!isAutocommit()) { | |||
log("Commiting transaction", Project.MSG_VERBOSE); | |||
@@ -419,7 +419,7 @@ public class SQLExec extends JDBCTask { | |||
if (out != null && out != System.out) { | |||
out.close(); | |||
} | |||
} | |||
} | |||
} catch (IOException e){ | |||
if (!isAutocommit() && conn != null && onError.equals("abort")) { | |||
try { | |||
@@ -444,8 +444,8 @@ public class SQLExec extends JDBCTask { | |||
} | |||
} catch (SQLException e) {} | |||
} | |||
log(goodSql + " of " + totalSql + | |||
log(goodSql + " of " + totalSql + | |||
" SQL statements executed successfully"); | |||
} finally { | |||
transactions = savedTransaction; | |||
@@ -456,13 +456,13 @@ public class SQLExec extends JDBCTask { | |||
/** | |||
* read in lines and execute them | |||
*/ | |||
protected void runStatements(Reader reader, PrintStream out) | |||
protected void runStatements(Reader reader, PrintStream out) | |||
throws SQLException, IOException { | |||
StringBuffer sql = new StringBuffer(); | |||
String line = ""; | |||
BufferedReader in = new BufferedReader(reader); | |||
while ((line = in.readLine()) != null){ | |||
if (!keepformat) { | |||
line = line.trim(); | |||
@@ -483,13 +483,13 @@ public class SQLExec extends JDBCTask { | |||
} | |||
} | |||
} | |||
if (!keepformat) { | |||
sql.append(" " + line); | |||
} else { | |||
sql.append("\n" + line); | |||
} | |||
// SQL defines "--" as a comment to EOL | |||
// and in Oracle it may contain a hint | |||
// so we cannot just remove it, instead we must end it | |||
@@ -498,12 +498,12 @@ public class SQLExec extends JDBCTask { | |||
sql.append("\n"); | |||
} | |||
} | |||
if ((delimiterType.equals(DelimiterType.NORMAL) | |||
&& sql.toString().endsWith(delimiter)) | |||
if ((delimiterType.equals(DelimiterType.NORMAL) | |||
&& sql.toString().endsWith(delimiter)) | |||
|| | |||
(delimiterType.equals(DelimiterType.ROW) | |||
(delimiterType.equals(DelimiterType.ROW) | |||
&& line.equals(delimiter))) { | |||
execSQL(sql.substring(0, sql.length() - delimiter.length()), | |||
execSQL(sql.substring(0, sql.length() - delimiter.length()), | |||
out); | |||
sql.replace(0, sql.length(), ""); | |||
} | |||
@@ -513,8 +513,8 @@ public class SQLExec extends JDBCTask { | |||
execSQL(sql.toString(), out); | |||
} | |||
} | |||
/** | |||
* Exec the sql statement. | |||
*/ | |||
@@ -523,19 +523,19 @@ public class SQLExec extends JDBCTask { | |||
if ("".equals(sql.trim())) { | |||
return; | |||
} | |||
try { | |||
try { | |||
totalSql++; | |||
log("SQL: " + sql, Project.MSG_VERBOSE); | |||
if (!statement.execute(sql)) { | |||
log(statement.getUpdateCount() + " rows affected", | |||
log(statement.getUpdateCount() + " rows affected", | |||
Project.MSG_VERBOSE); | |||
} else { | |||
if (print) { | |||
printResults(out); | |||
} | |||
} | |||
SQLWarning warning = conn.getWarnings(); | |||
while (warning != null){ | |||
log(warning + " sql warning", Project.MSG_VERBOSE); | |||
@@ -551,7 +551,7 @@ public class SQLExec extends JDBCTask { | |||
log(e.toString(), Project.MSG_ERR); | |||
} | |||
} | |||
/** | |||
* print any results in the statement. | |||
*/ | |||
@@ -580,7 +580,7 @@ public class SQLExec extends JDBCTask { | |||
if (columnValue != null) { | |||
columnValue = columnValue.trim(); | |||
} | |||
if (first) { | |||
first = false; | |||
} else { | |||
@@ -634,20 +634,20 @@ public class SQLExec extends JDBCTask { | |||
/** | |||
* | |||
*/ | |||
private void runTransaction(PrintStream out) | |||
private void runTransaction(PrintStream out) | |||
throws IOException, SQLException { | |||
if (tSqlCommand.length() != 0) { | |||
log("Executing commands", Project.MSG_INFO); | |||
runStatements(new StringReader(tSqlCommand), out); | |||
} | |||
if (tSrcFile != null) { | |||
log("Executing file: " + tSrcFile.getAbsolutePath(), | |||
log("Executing file: " + tSrcFile.getAbsolutePath(), | |||
Project.MSG_INFO); | |||
Reader reader = | |||
Reader reader = | |||
(encoding == null) ? new FileReader(tSrcFile) | |||
: new InputStreamReader( | |||
new FileInputStream(tSrcFile), | |||
new FileInputStream(tSrcFile), | |||
encoding); | |||
try { | |||
runStatements(reader, out); | |||
@@ -57,12 +57,12 @@ package org.apache.tools.ant.taskdefs; | |||
import org.apache.tools.ant.taskdefs.email.EmailTask; | |||
/** | |||
* A task to send SMTP email. | |||
* A task to send SMTP email. | |||
* This task can send mail using either plain | |||
* text, UU encoding or Mime format mail depending on what is available. | |||
* Attachments may be sent using nested FileSet | |||
* elements. | |||
* @author glenn_twiggs@bmc.com | |||
* @author Magesh Umasankar | |||
* | |||
@@ -62,16 +62,16 @@ import org.apache.tools.ant.TaskContainer; | |||
/** | |||
* Sequential is a container task - it can contain other Ant tasks. The nested | |||
* tasks are simply executed in sequence. Sequential's primary use is to support | |||
* Sequential is a container task - it can contain other Ant tasks. The nested | |||
* tasks are simply executed in sequence. Sequential's primary use is to support | |||
* the sequential execution of a subset of tasks within the | |||
{@link Parallel Parallel Task} | |||
{@link Parallel Parallel Task} | |||
* <p> | |||
* The sequential task has no attributes and does not support any nested | |||
* elements apart from Ant tasks. Any valid Ant task may be embedded within the | |||
* The sequential task has no attributes and does not support any nested | |||
* elements apart from Ant tasks. Any valid Ant task may be embedded within the | |||
* sequential task.</p> | |||
* @author Thomas Christen <a href="mailto:chr@active.ch">chr@active.ch</a> | |||
* @since Ant 1.4 | |||
* @ant.task category="control" | |||
@@ -245,7 +245,7 @@ public class SignJar extends Task { | |||
log("nested filesets will be ignored if the jar attribute has" | |||
+ " been specified.", Project.MSG_WARN); | |||
} | |||
doOneJar(jar, signedjar); | |||
return; | |||
} else { | |||
@@ -83,13 +83,13 @@ public class StreamPumper implements Runnable { | |||
* @param closeWhenExhausted if true, the output stream will be closed when | |||
* the input is exhausted. | |||
*/ | |||
public StreamPumper(InputStream is, OutputStream os, | |||
public StreamPumper(InputStream is, OutputStream os, | |||
boolean closeWhenExhausted) { | |||
this.is = is; | |||
this.os = os; | |||
this.closeWhenExhausted = closeWhenExhausted; | |||
this.closeWhenExhausted = closeWhenExhausted; | |||
} | |||
/** | |||
* Create a new stream pumper. | |||
* | |||
@@ -163,7 +163,7 @@ public class Sync extends Task { | |||
log("Removed " + count + " " + what + " from " + toDir, | |||
Project.MSG_INFO); | |||
} else { | |||
log("NO " + what + " to remove from " + toDir, | |||
log("NO " + what + " to remove from " + toDir, | |||
Project.MSG_VERBOSE); | |||
} | |||
} | |||
@@ -219,7 +219,7 @@ public class Tar extends MatchingTask { | |||
public void setCompression(TarCompressionMethod mode) { | |||
this.compression = mode; | |||
} | |||
/** | |||
* do the business | |||
*/ | |||
@@ -336,7 +336,7 @@ public class Tar extends MatchingTask { | |||
filesets = savedFileSets; | |||
} | |||
} | |||
/** | |||
* tar a file | |||
*/ | |||
@@ -489,12 +489,12 @@ public class Tar extends MatchingTask { | |||
} | |||
/** | |||
* A 3 digit octal string, specify the user, group and | |||
* other modes in the standard Unix fashion; | |||
* A 3 digit octal string, specify the user, group and | |||
* other modes in the standard Unix fashion; | |||
* optional, default=0644 | |||
*/ | |||
public void setMode(String octalString) { | |||
this.fileMode = | |||
this.fileMode = | |||
UnixStat.FILE_FLAG | Integer.parseInt(octalString, 8); | |||
} | |||
@@ -503,14 +503,14 @@ public class Tar extends MatchingTask { | |||
} | |||
/** | |||
* A 3 digit octal string, specify the user, group and | |||
* other modes in the standard Unix fashion; | |||
* A 3 digit octal string, specify the user, group and | |||
* other modes in the standard Unix fashion; | |||
* optional, default=0755 | |||
* | |||
* @since Ant 1.6 | |||
*/ | |||
public void setDirMode(String octalString) { | |||
this.dirMode = | |||
this.dirMode = | |||
UnixStat.DIR_FLAG | Integer.parseInt(octalString, 8); | |||
} | |||
@@ -522,7 +522,7 @@ public class Tar extends MatchingTask { | |||
} | |||
/** | |||
* The username for the tar entry | |||
* The username for the tar entry | |||
* This is not the same as the UID, which is | |||
* not currently set by the task. | |||
*/ | |||
@@ -589,7 +589,7 @@ public class Tar extends MatchingTask { | |||
} | |||
/** | |||
* Set of options for long file handling in the task. | |||
* Set of options for long file handling in the task. | |||
* | |||
* @author Magesh Umasankar | |||
*/ | |||
@@ -77,7 +77,7 @@ import org.apache.tools.ant.util.JavaEnvUtils; | |||
* <p>Note: Setting the modification time of files is not supported in | |||
* JDK 1.1.</p> | |||
* | |||
* @author Stefan Bodewig | |||
* @author Stefan Bodewig | |||
* @author <a href="mailto:mj@servidium.com">Michael J. Sikorsky</a> | |||
* @author <a href="mailto:shaw@servidium.com">Robert Shaw</a> | |||
* | |||
@@ -87,7 +87,7 @@ import org.apache.tools.ant.util.JavaEnvUtils; | |||
*/ | |||
public class Touch extends Task { | |||
private File file; | |||
private File file; | |||
private long millis = -1; | |||
private String dateTime; | |||
private Vector filesets = new Vector(); | |||
@@ -116,7 +116,7 @@ public class Touch extends Task { | |||
/** | |||
* the new modification time of the file | |||
* in the format "MM/DD/YYYY HH:MM AM <i>or</i> PM" | |||
* in the format "MM/DD/YYYY HH:MM AM <i>or</i> PM" | |||
* or "MM/DD/YYYY HH:MM:SS AM <i>or</i> PM". | |||
* Optional, default=now | |||
*/ | |||
@@ -138,7 +138,7 @@ public class Touch extends Task { | |||
long savedMillis = millis; | |||
if (file == null && filesets.size() == 0) { | |||
throw | |||
throw | |||
new BuildException("Specify at least one source - a file or " | |||
+ "a fileset."); | |||
} | |||
@@ -159,21 +159,21 @@ public class Touch extends Task { | |||
* that fails with MEDIUM - throw an exception if both | |||
* fail. | |||
*/ | |||
DateFormat df = | |||
DateFormat df = | |||
DateFormat.getDateTimeInstance(DateFormat.SHORT, | |||
DateFormat.SHORT, | |||
Locale.US); | |||
try { | |||
setMillis(df.parse(dateTime).getTime()); | |||
} catch (ParseException pe) { | |||
df = | |||
df = | |||
DateFormat.getDateTimeInstance(DateFormat.SHORT, | |||
DateFormat.MEDIUM, | |||
Locale.US); | |||
try { | |||
setMillis(df.parse(dateTime).getTime()); | |||
} catch (ParseException pe2) { | |||
throw new BuildException(pe2.getMessage(), pe, | |||
throw new BuildException(pe2.getMessage(), pe, | |||
getLocation()); | |||
} | |||
} | |||
@@ -204,18 +204,18 @@ public class Touch extends Task { | |||
try { | |||
fileUtils.createNewFile(file); | |||
} catch (IOException ioe) { | |||
throw new BuildException("Could not create " + file, ioe, | |||
throw new BuildException("Could not create " + file, ioe, | |||
getLocation()); | |||
} | |||
} | |||
} | |||
if (millis >= 0 && | |||
if (millis >= 0 && | |||
JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||
log("modification time of files cannot be set in JDK 1.1", | |||
Project.MSG_WARN); | |||
return; | |||
} | |||
} | |||
boolean resetMillis = false; | |||
if (millis < 0) { | |||
@@ -239,7 +239,7 @@ public class Touch extends Task { | |||
for (int j = 0; j < srcFiles.length ; j++) { | |||
touch(new File(fromDir, srcFiles[j])); | |||
} | |||
for (int j = 0; j < srcDirs.length ; j++) { | |||
touch(new File(fromDir, srcDirs[j])); | |||
} | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
@@ -74,7 +74,7 @@ package org.apache.tools.ant.taskdefs; | |||
* types are things likepaths or filesets that can be defined at | |||
* the project level and referenced via their ID attribute.</p> | |||
* <p>Custom data types usually need custom tasks to put them to good use.</p> | |||
* | |||
* | |||
* @author Stefan Bodewig | |||
* @since Ant 1.4 | |||
* @ant.task category="internal" | |||
@@ -118,7 +118,7 @@ public class Untar extends Expand { | |||
* @since Ant 1.6 | |||
*/ | |||
public void setEncoding(String encoding) { | |||
throw new BuildException("The " + getTaskName() | |||
throw new BuildException("The " + getTaskName() | |||
+ " task doesn't support the encoding" | |||
+ " attribute", getLocation()); | |||
} | |||
@@ -72,9 +72,9 @@ import org.apache.tools.ant.util.SourceFileScanner; | |||
* Sets the given property if the specified target has a timestamp | |||
* greater than all of the source files. | |||
* | |||
* @author William Ferguson | |||
* <a href="mailto:williamf@mincom.com">williamf@mincom.com</a> | |||
* @author Hiroaki Nakamura | |||
* @author William Ferguson | |||
* <a href="mailto:williamf@mincom.com">williamf@mincom.com</a> | |||
* @author Hiroaki Nakamura | |||
* <a href="mailto:hnakamur@mc.neweb.ne.jp">hnakamur@mc.neweb.ne.jp</a> | |||
* @author Stefan Bodewig | |||
* @author <a href="http://nerdmonkey.com">Eli Tucker</a> | |||
@@ -119,7 +119,7 @@ public class UpToDate extends Task implements Condition { | |||
*/ | |||
private String getValue() { | |||
return (_value != null) ? _value : "true"; | |||
} | |||
} | |||
/** | |||
* The file which must be more up-to-date than (each of) the source file(s) | |||
@@ -183,14 +183,14 @@ public class UpToDate extends Task implements Condition { | |||
// if the target file is not there, then it can't be up-to-date | |||
if (_targetFile != null && !_targetFile.exists()) { | |||
log("The targetfile \"" + _targetFile.getAbsolutePath() | |||
log("The targetfile \"" + _targetFile.getAbsolutePath() | |||
+ "\" does not exist.", Project.MSG_VERBOSE); | |||
return false; | |||
} | |||
} | |||
// if the source file isn't there, throw an exception | |||
if (_sourceFile != null && !_sourceFile.exists()) { | |||
throw new BuildException(_sourceFile.getAbsolutePath() | |||
throw new BuildException(_sourceFile.getAbsolutePath() | |||
+ " not found."); | |||
} | |||
@@ -226,14 +226,14 @@ public class UpToDate extends Task implements Condition { | |||
*/ | |||
public void execute() throws BuildException { | |||
if (_property == null) { | |||
throw new BuildException("property attribute is required.", | |||
throw new BuildException("property attribute is required.", | |||
getLocation()); | |||
} | |||
boolean upToDate = eval(); | |||
if (upToDate) { | |||
this.getProject().setNewProperty(_property, getValue()); | |||
if (mapperElement == null) { | |||
log("File \"" + _targetFile.getAbsolutePath() | |||
log("File \"" + _targetFile.getAbsolutePath() | |||
+ "\" is up-to-date.", Project.MSG_VERBOSE); | |||
} else { | |||
log("All target files are up-to-date.", | |||
@@ -172,7 +172,7 @@ public class WaitFor extends ConditionBase { | |||
} | |||
/** | |||
* The enumeration of units: | |||
* The enumeration of units: | |||
* millisecond, second, minute, hour, day, week | |||
* @todo we use timestamps in many places, why not factor this out | |||
*/ | |||
@@ -174,7 +174,7 @@ public class War extends Jar { | |||
/** | |||
* Overriden from Zip class to deal with web.xml | |||
*/ | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
int mode) | |||
throws IOException { | |||
// If the file being added is WEB-INF/web.xml, we warn if it's | |||
@@ -112,8 +112,8 @@ public class XSLTProcess extends MatchingTask implements XSLTLogger { | |||
/** Classpath to use when trying to load the XSL processor */ | |||
private Path classpath = null; | |||
/** The Liason implementation to use to communicate with the XSL | |||
/** The Liason implementation to use to communicate with the XSL | |||
* processor */ | |||
private XSLTLiaison liaison; | |||
@@ -264,7 +264,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
try { | |||
log("Loading " + src.getAbsolutePath(), Project.MSG_VERBOSE); | |||
if (src.exists()) { | |||
configurationStream = | |||
@@ -297,7 +297,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
log("Unable to find property file: " + src.getAbsolutePath(), | |||
Project.MSG_VERBOSE); | |||
} | |||
} catch (SAXException sxe) { | |||
// Error generated during parsing | |||
Exception x = sxe; | |||
@@ -322,7 +322,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
} | |||
/** Iterate through all nodes in the tree. */ | |||
private void addNodeRecursively(Node node, String prefix, | |||
private void addNodeRecursively(Node node, String prefix, | |||
Object container) { | |||
// Set the prefix for this node to include its tag name. | |||
@@ -347,7 +347,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
// For each child, pass the object added by | |||
// processNode to its children -- in other word, each | |||
// object can pass information along to its children. | |||
addNodeRecursively(nodeChildren.item(i), nodePrefix, | |||
addNodeRecursively(nodeChildren.item(i), nodePrefix, | |||
nodeObject); | |||
} | |||
} | |||
@@ -389,7 +389,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
// Is there an id attribute? | |||
Node idNode = nodeAttributes.getNamedItem(ID); | |||
id = (semanticAttributes && idNode != null | |||
id = (semanticAttributes && idNode != null | |||
? idNode.getNodeValue() : null); | |||
// Now, iterate through the attributes adding them. | |||
@@ -406,8 +406,8 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
String nodeName = attributeNode.getNodeName(); | |||
String attributeValue = getAttributeValue(attributeNode); | |||
Path containingPath = | |||
(container != null && container instanceof Path | |||
Path containingPath = | |||
(container != null && container instanceof Path | |||
? (Path) container : null ); | |||
/* | |||
@@ -419,15 +419,15 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
if (nodeName.equals(ID)) { | |||
// ID has already been found above. | |||
continue; | |||
} else if (containingPath != null | |||
} else if (containingPath != null | |||
&& nodeName.equals(PATH)) { | |||
// A "path" attribute for a node within a Path object. | |||
containingPath.setPath(attributeValue); | |||
} else if (container instanceof Path | |||
} else if (container instanceof Path | |||
&& nodeName.equals(REF_ID)) { | |||
// A "refid" attribute for a node within a Path object. | |||
containingPath.setPath(attributeValue); | |||
} else if (container instanceof Path | |||
} else if (container instanceof Path | |||
&& nodeName.equals(LOCATION)) { | |||
// A "location" attribute for a node within a | |||
// Path object. | |||
@@ -454,16 +454,16 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
if (node.getNodeType() == Node.TEXT_NODE) { | |||
// For the text node, add a property. | |||
nodeText = getAttributeValue(node); | |||
} else if ((node.getNodeType() == Node.ELEMENT_NODE) | |||
} else if ((node.getNodeType() == Node.ELEMENT_NODE) | |||
&& (node.getChildNodes().getLength() == 1) | |||
&& (node.getFirstChild().getNodeType() == Node.CDATA_SECTION_NODE)) { | |||
nodeText = node.getFirstChild().getNodeValue(); | |||
} | |||
if (nodeText != null) { | |||
// If the containing object was a String, then use it as the ID. | |||
if (semanticAttributes && id == null | |||
if (semanticAttributes && id == null | |||
&& container instanceof String) { | |||
id = (String) container; | |||
System.out.println("Setting id = " + id); | |||
@@ -528,7 +528,7 @@ public class XmlProperty extends org.apache.tools.ant.Task { | |||
if (attributeName.equals(REF_ID)) { | |||
return ""; | |||
// Otherwise, return it appended unless property to hide it is set. | |||
} else if (!isSemanticAttribute(attributeName) | |||
} else if (!isSemanticAttribute(attributeName) | |||
|| includeSemanticAttribute) { | |||
return "." + attributeName; | |||
} else { | |||
@@ -436,7 +436,7 @@ public class Zip extends MatchingTask { | |||
addResources(fss[i], addThem[i], zOut); | |||
} | |||
} | |||
if (doUpdate) { | |||
addingNewFiles = false; | |||
ZipFileSet oldFiles = new ZipFileSet(); | |||
@@ -447,7 +447,7 @@ public class Zip extends MatchingTask { | |||
PatternSet.NameEntry ne = oldFiles.createExclude(); | |||
ne.setName((String) addedFiles.elementAt(i)); | |||
} | |||
DirectoryScanner ds = | |||
DirectoryScanner ds = | |||
oldFiles.getDirectoryScanner(getProject()); | |||
((ZipScanner) ds).setEncoding(encoding); | |||
String[] f = ds.getIncludedFiles(); | |||
@@ -455,7 +455,7 @@ public class Zip extends MatchingTask { | |||
for (int i = 0; i < f.length; i++) { | |||
r[i] = ds.getResource(f[i]); | |||
} | |||
addResources(oldFiles, r, zOut); | |||
} | |||
finalizeZipOutputStream(zOut); | |||
@@ -580,7 +580,7 @@ public class Zip extends MatchingTask { | |||
} else { | |||
zf = new ZipFile(zfs.getSrc(getProject()), encoding); | |||
} | |||
for (int i = 0; i < resources.length; i++) { | |||
String name = null; | |||
if (fullpath.length() > 0) { | |||
@@ -589,26 +589,26 @@ public class Zip extends MatchingTask { | |||
name = resources[i].getName(); | |||
} | |||
name = name.replace(File.separatorChar, '/'); | |||
if ("".equals(name)) { | |||
continue; | |||
} | |||
if (resources[i].isDirectory() && ! name.endsWith("/")) { | |||
name = name + "/"; | |||
} | |||
addParentDirs(base, name, zOut, prefix, dirMode); | |||
if (!resources[i].isDirectory() && dealingWithFiles) { | |||
File f = fileUtils.resolveFile(base, | |||
File f = fileUtils.resolveFile(base, | |||
resources[i].getName()); | |||
zipFile(f, zOut, prefix + name, fileMode); | |||
} else if (!resources[i].isDirectory()) { | |||
ZipEntry ze = zf.getEntry(resources[i].getName()); | |||
if (ze != null) { | |||
zipFile(zf.getInputStream(ze), zOut, prefix + name, | |||
ze.getTime(), zfs.getSrc(getProject()), | |||
zfs.hasFileModeBeenSet() ? fileMode | |||
zipFile(zf.getInputStream(ze), zOut, prefix + name, | |||
ze.getTime(), zfs.getSrc(getProject()), | |||
zfs.hasFileModeBeenSet() ? fileMode | |||
: ze.getUnixMode()); | |||
} | |||
} | |||
@@ -734,18 +734,18 @@ public class Zip extends MatchingTask { | |||
if (emptyBehavior.equals("skip")) { | |||
if (doUpdate) { | |||
log(archiveType + " archive " + zipFile | |||
+ " not updated because no new files were included.", | |||
log(archiveType + " archive " + zipFile | |||
+ " not updated because no new files were included.", | |||
Project.MSG_VERBOSE); | |||
} else { | |||
log("Warning: skipping " + archiveType + " archive " | |||
+ zipFile + " because no files were included.", | |||
log("Warning: skipping " + archiveType + " archive " | |||
+ zipFile + " because no files were included.", | |||
Project.MSG_WARN); | |||
} | |||
} else if (emptyBehavior.equals("fail")) { | |||
throw new BuildException("Cannot create " + archiveType | |||
+ " archive " + zipFile + | |||
": no files were included.", | |||
": no files were included.", | |||
getLocation()); | |||
} else { | |||
// Create. | |||
@@ -768,13 +768,13 @@ public class Zip extends MatchingTask { | |||
Resource[][] newerResources = new Resource[filesets.length][]; | |||
for (int i = 0; i < filesets.length; i++) { | |||
if (!(fileset instanceof ZipFileSet) | |||
if (!(fileset instanceof ZipFileSet) | |||
|| ((ZipFileSet) fileset).getSrc(getProject()) == null) { | |||
File base = filesets[i].getDir(getProject()); | |||
for (int j = 0; j < initialResources[i].length; j++) { | |||
File resourceAsFile = | |||
fileUtils.resolveFile(base, | |||
File resourceAsFile = | |||
fileUtils.resolveFile(base, | |||
initialResources[i][j].getName()); | |||
if (resourceAsFile.equals(zipFile)) { | |||
throw new BuildException("A zip file cannot include " | |||
@@ -789,7 +789,7 @@ public class Zip extends MatchingTask { | |||
newerResources[i] = new Resource[] {}; | |||
continue; | |||
} | |||
FileNameMapper myMapper = new IdentityMapper(); | |||
if (filesets[i] instanceof ZipFileSet) { | |||
ZipFileSet zfs = (ZipFileSet) filesets[i]; | |||
@@ -819,8 +819,8 @@ public class Zip extends MatchingTask { | |||
if (doFilesonly) { | |||
resources = selectFileResources(resources); | |||
} | |||
newerResources[i] = | |||
newerResources[i] = | |||
ResourceUtils.selectOutOfDateSources(this, | |||
resources, | |||
myMapper, | |||
@@ -838,21 +838,21 @@ public class Zip extends MatchingTask { | |||
// we are recreating the archive, need all resources | |||
return new ArchiveState(true, initialResources); | |||
} | |||
return new ArchiveState(needsUpdate, newerResources); | |||
} | |||
/** | |||
* Fetch all included and not excluded resources from the sets. | |||
* | |||
* <p>Included directories will preceede included files.</p> | |||
* <p>Included directories will preceede included files.</p> | |||
* | |||
* @since Ant 1.5.2 | |||
*/ | |||
protected Resource[][] grabResources(FileSet[] filesets) { | |||
Resource[][] result = new Resource[filesets.length][]; | |||
for (int i = 0; i < filesets.length; i++) { | |||
DirectoryScanner rs = | |||
DirectoryScanner rs = | |||
filesets[i].getDirectoryScanner(getProject()); | |||
if (rs instanceof ZipScanner) { | |||
((ZipScanner) rs).setEncoding(encoding); | |||
@@ -866,7 +866,7 @@ public class Zip extends MatchingTask { | |||
for (int j = 0; j < files.length; j++) { | |||
resources.addElement(rs.getResource(files[j])); | |||
} | |||
result[i] = new Resource[resources.size()]; | |||
resources.copyInto(result[i]); | |||
} | |||
@@ -1017,7 +1017,7 @@ public class Zip extends MatchingTask { | |||
* | |||
* @since Ant 1.5.2 | |||
*/ | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
protected void zipFile(File file, ZipOutputStream zOut, String vPath, | |||
int mode) | |||
throws IOException { | |||
if (file.equals(zipFile)) { | |||
@@ -1120,7 +1120,7 @@ public class Zip extends MatchingTask { | |||
/** | |||
* @return true if all individual arrays are empty | |||
* | |||
* | |||
* @since Ant 1.5.2 | |||
*/ | |||
protected final static boolean isEmpty(Resource[][] r) { | |||
@@ -1141,13 +1141,13 @@ public class Zip extends MatchingTask { | |||
if (orig.length == 0) { | |||
return orig; | |||
} | |||
Vector v = new Vector(orig.length); | |||
for (int i = 0; i < orig.length; i++) { | |||
if (!orig[i].isDirectory()) { | |||
v.addElement(orig[i]); | |||
} else { | |||
log("Ignoring directory " + orig[i].getName() | |||
log("Ignoring directory " + orig[i].getName() | |||
+ " as only files will be added.", Project.MSG_VERBOSE); | |||
} | |||
} | |||