git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274856 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -92,6 +92,12 @@ public class DemuxOutputStream extends OutputStream { | |||||
| /** Initial buffer size. */ | /** Initial buffer size. */ | ||||
| private static final int INTIAL_SIZE = 132; | private static final int INTIAL_SIZE = 132; | ||||
| /** Carriage return */ | |||||
| private static final int CR = 0x0d; | |||||
| /** Linefeed */ | |||||
| private static final int LF = 0x0a; | |||||
| /** Mapping from thread to buffer (Thread to BufferInfo). */ | /** Mapping from thread to buffer (Thread to BufferInfo). */ | ||||
| private Hashtable buffers = new Hashtable(); | private Hashtable buffers = new Hashtable(); | ||||
| @@ -243,14 +249,23 @@ public class DemuxOutputStream extends OutputStream { | |||||
| } | } | ||||
| } | } | ||||
| public void write(byte b[], int off, int len) throws IOException { | |||||
| /** | |||||
| * Write a block of characters to the output stream | |||||
| * | |||||
| * @param b the array containg the data | |||||
| * @param off the offset into the array where data starts | |||||
| * @param len the length of block | |||||
| * | |||||
| * @throws IOException if the data cannot be written into the stream. | |||||
| */ | |||||
| public void write(byte[] b, int off, int len) throws IOException { | |||||
| // find the line breaks and pass other chars through in blocks | // find the line breaks and pass other chars through in blocks | ||||
| int offset = off; | int offset = off; | ||||
| int blockStartOffset = offset; | int blockStartOffset = offset; | ||||
| int remaining = len; | int remaining = len; | ||||
| BufferInfo bufferInfo = getBufferInfo(); | BufferInfo bufferInfo = getBufferInfo(); | ||||
| while (remaining > 0) { | while (remaining > 0) { | ||||
| while (remaining > 0 && b[offset] != 0x0a && b[offset] != 0x0d) { | |||||
| while (remaining > 0 && b[offset] != LF && b[offset] != CR) { | |||||
| offset++; | offset++; | ||||
| remaining--; | remaining--; | ||||
| } | } | ||||
| @@ -259,7 +274,7 @@ public class DemuxOutputStream extends OutputStream { | |||||
| if (blockLength > 0) { | if (blockLength > 0) { | ||||
| bufferInfo.buffer.write(b, blockStartOffset, blockLength); | bufferInfo.buffer.write(b, blockStartOffset, blockLength); | ||||
| } | } | ||||
| while (remaining > 0 && (b[offset] == 0x0a || b[offset] == 0x0d)) { | |||||
| while (remaining > 0 && (b[offset] == LF || b[offset] == CR)) { | |||||
| write(b[offset]); | write(b[offset]); | ||||
| offset++; | offset++; | ||||
| remaining--; | remaining--; | ||||
| @@ -655,7 +655,7 @@ public class DirectoryScanner | |||||
| // put in the newroots vector the include patterns without | // put in the newroots vector the include patterns without | ||||
| // wildcard tokens | // wildcard tokens | ||||
| for (int icounter = 0; icounter < includes.length; icounter++) { | for (int icounter = 0; icounter < includes.length; icounter++) { | ||||
| String newpattern = | |||||
| String newpattern = | |||||
| SelectorUtils.rtrimWildcardTokens(includes[icounter]); | SelectorUtils.rtrimWildcardTokens(includes[icounter]); | ||||
| // check whether the candidate new pattern has a parent | // check whether the candidate new pattern has a parent | ||||
| boolean hasParent = false; | boolean hasParent = false; | ||||
| @@ -716,19 +716,19 @@ public class DirectoryScanner | |||||
| } else { | } else { | ||||
| if (currentelement.length() > 0) { | if (currentelement.length() > 0) { | ||||
| if (currentelement.charAt(currentelement.length() | if (currentelement.charAt(currentelement.length() | ||||
| - 1) | |||||
| - 1) | |||||
| != File.separatorChar) { | != File.separatorChar) { | ||||
| currentelement = | |||||
| currentelement = | |||||
| currentelement + File.separatorChar; | currentelement + File.separatorChar; | ||||
| } | } | ||||
| } | } | ||||
| scandir(myfile, currentelement, true); | scandir(myfile, currentelement, true); | ||||
| } | } | ||||
| } else { | } else { | ||||
| if (isCaseSensitive | |||||
| if (isCaseSensitive | |||||
| && originalpattern.equals(currentelement)) { | && originalpattern.equals(currentelement)) { | ||||
| accountForIncludedFile(currentelement, myfile); | accountForIncludedFile(currentelement, myfile); | ||||
| } else if (!isCaseSensitive | |||||
| } else if (!isCaseSensitive | |||||
| && originalpattern.equalsIgnoreCase(currentelement)) { | && originalpattern.equalsIgnoreCase(currentelement)) { | ||||
| accountForIncludedFile(currentelement, myfile); | accountForIncludedFile(currentelement, myfile); | ||||
| } | } | ||||
| @@ -1160,7 +1160,7 @@ public class DirectoryScanner | |||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| */ | */ | ||||
| private File findFileCaseInsensitive(File base, String path) { | private File findFileCaseInsensitive(File base, String path) { | ||||
| File f = findFileCaseInsensitive(base, | |||||
| File f = findFileCaseInsensitive(base, | |||||
| SelectorUtils.tokenizePath(path)); | SelectorUtils.tokenizePath(path)); | ||||
| return f == null ? new File(base, path) : f; | return f == null ? new File(base, path) : f; | ||||
| } | } | ||||
| @@ -1211,7 +1211,7 @@ public class DirectoryScanner | |||||
| * basedir? | * basedir? | ||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| */ | */ | ||||
| private boolean isSymlink(File base, Vector pathElements) { | |||||
| private boolean isSymlink(File base, Vector pathElements) { | |||||
| if (pathElements.size() > 0) { | if (pathElements.size() > 0) { | ||||
| String current = (String) pathElements.remove(0); | String current = (String) pathElements.remove(0); | ||||
| try { | try { | ||||
| @@ -502,8 +502,8 @@ public class IntrospectionHelper implements BuildListener { | |||||
| return; | return; | ||||
| } else { | } else { | ||||
| // Not whitespace - fail | // Not whitespace - fail | ||||
| String msg = project.getElementName(element) + | |||||
| " doesn't support nested text data."; | |||||
| String msg = project.getElementName(element) | |||||
| + " doesn't support nested text data."; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| } | } | ||||
| @@ -703,8 +703,8 @@ public class IntrospectionHelper implements BuildListener { | |||||
| throws BuildException { | throws BuildException { | ||||
| Class at = (Class) attributeTypes.get(attributeName); | Class at = (Class) attributeTypes.get(attributeName); | ||||
| if (at == null) { | if (at == null) { | ||||
| String msg = "Class " + bean.getName() + | |||||
| " doesn't support the \"" + attributeName + "\" attribute."; | |||||
| String msg = "Class " + bean.getName() | |||||
| + " doesn't support the \"" + attributeName + "\" attribute."; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| return at; | return at; | ||||
| @@ -99,16 +99,16 @@ public class Main implements AntMain { | |||||
| private static PrintStream err = System.err; | private static PrintStream err = System.err; | ||||
| /** The build targets. */ | /** The build targets. */ | ||||
| private Vector targets = new Vector(5); | |||||
| private Vector targets = new Vector(); | |||||
| /** Set of properties that can be used by tasks. */ | /** Set of properties that can be used by tasks. */ | ||||
| private Properties definedProps = new Properties(); | private Properties definedProps = new Properties(); | ||||
| /** Names of classes to add as listeners to project. */ | /** Names of classes to add as listeners to project. */ | ||||
| private Vector listeners = new Vector(5); | |||||
| private Vector listeners = new Vector(1); | |||||
| /** File names of property files to load on startup. */ | /** File names of property files to load on startup. */ | ||||
| private Vector propertyFiles = new Vector(5); | |||||
| private Vector propertyFiles = new Vector(1); | |||||
| /** Indicates whether this build is to support interactive input */ | /** Indicates whether this build is to support interactive input */ | ||||
| private boolean allowInput = true; | private boolean allowInput = true; | ||||
| @@ -334,8 +334,8 @@ public class Main implements AntMain { | |||||
| + "permissions."; | + "permissions."; | ||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } catch (ArrayIndexOutOfBoundsException aioobe) { | } catch (ArrayIndexOutOfBoundsException aioobe) { | ||||
| String msg = "You must specify a log file when " + | |||||
| "using the -log argument"; | |||||
| String msg = "You must specify a log file when " | |||||
| + "using the -log argument"; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| } else if (arg.equals("-buildfile") || arg.equals("-file") | } else if (arg.equals("-buildfile") || arg.equals("-file") | ||||
| @@ -344,8 +344,8 @@ public class Main implements AntMain { | |||||
| buildFile = new File(args[i + 1].replace('/', File.separatorChar)); | buildFile = new File(args[i + 1].replace('/', File.separatorChar)); | ||||
| i++; | i++; | ||||
| } catch (ArrayIndexOutOfBoundsException aioobe) { | } catch (ArrayIndexOutOfBoundsException aioobe) { | ||||
| String msg = "You must specify a buildfile when " + | |||||
| "using the -buildfile argument"; | |||||
| String msg = "You must specify a buildfile when " | |||||
| + "using the -buildfile argument"; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| } else if (arg.equals("-listener")) { | } else if (arg.equals("-listener")) { | ||||
| @@ -353,8 +353,8 @@ public class Main implements AntMain { | |||||
| listeners.addElement(args[i + 1]); | listeners.addElement(args[i + 1]); | ||||
| i++; | i++; | ||||
| } catch (ArrayIndexOutOfBoundsException aioobe) { | } catch (ArrayIndexOutOfBoundsException aioobe) { | ||||
| String msg = "You must specify a classname when " + | |||||
| "using the -listener argument"; | |||||
| String msg = "You must specify a classname when " | |||||
| + "using the -listener argument"; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| } else if (arg.startsWith("-D")) { | } else if (arg.startsWith("-D")) { | ||||
| @@ -421,8 +421,8 @@ public class Main implements AntMain { | |||||
| propertyFiles.addElement(args[i + 1]); | propertyFiles.addElement(args[i + 1]); | ||||
| i++; | i++; | ||||
| } catch (ArrayIndexOutOfBoundsException aioobe) { | } catch (ArrayIndexOutOfBoundsException aioobe) { | ||||
| String msg = "You must specify a property filename when " + | |||||
| "using the -propertyfile argument"; | |||||
| String msg = "You must specify a property filename when " | |||||
| + "using the -propertyfile argument"; | |||||
| throw new BuildException(msg); | throw new BuildException(msg); | ||||
| } | } | ||||
| } else if (arg.equals("-k") || arg.equals("-keep-going")) { | } else if (arg.equals("-k") || arg.equals("-keep-going")) { | ||||
| @@ -483,6 +483,7 @@ public class Main implements AntMain { | |||||
| try { | try { | ||||
| fis.close(); | fis.close(); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| // ignore | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -502,7 +503,8 @@ public class Main implements AntMain { | |||||
| } | } | ||||
| if (logTo != null) { | if (logTo != null) { | ||||
| out = err = logTo; | |||||
| out = logTo; | |||||
| err = logTo; | |||||
| System.setOut(out); | System.setOut(out); | ||||
| System.setErr(out); | System.setErr(out); | ||||
| } | } | ||||
| @@ -605,8 +607,8 @@ public class Main implements AntMain { | |||||
| // use a system manager that prevents from System.exit() | // use a system manager that prevents from System.exit() | ||||
| // only in JDK > 1.1 | // only in JDK > 1.1 | ||||
| SecurityManager oldsm = null; | SecurityManager oldsm = null; | ||||
| if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0) && | |||||
| !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||||
| if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0) | |||||
| && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)) { | |||||
| oldsm = System.getSecurityManager(); | oldsm = System.getSecurityManager(); | ||||
| //SecurityManager can not be installed here for backwards | //SecurityManager can not be installed here for backwards | ||||
| @@ -176,8 +176,8 @@ public class PathTokenizer { | |||||
| // make sure we aren't going to get the path separator next | // make sure we aren't going to get the path separator next | ||||
| if (!nextToken.equals(File.pathSeparator)) { | if (!nextToken.equals(File.pathSeparator)) { | ||||
| if (nextToken.equals(":")) { | if (nextToken.equals(":")) { | ||||
| if (!token.startsWith("/") && !token.startsWith("\\") | |||||
| && !token.startsWith(".") | |||||
| if (!token.startsWith("/") && !token.startsWith("\\") | |||||
| && !token.startsWith(".") | |||||
| && !token.startsWith("..")) { | && !token.startsWith("..")) { | ||||
| // it indeed is a drive spec, get the next bit | // it indeed is a drive spec, get the next bit | ||||
| String oneMore = tokenizer.nextToken().trim(); | String oneMore = tokenizer.nextToken().trim(); | ||||
| @@ -2029,7 +2029,8 @@ public class Project { | |||||
| // Should move to a separate public class - and have API to add | // Should move to a separate public class - and have API to add | ||||
| // listeners, etc. | // listeners, etc. | ||||
| private static class AntRefTable extends Hashtable { | private static class AntRefTable extends Hashtable { | ||||
| Project project; | |||||
| private Project project; | |||||
| public AntRefTable(Project project) { | public AntRefTable(Project project) { | ||||
| super(); | super(); | ||||
| this.project = project; | this.project = project; | ||||
| @@ -132,7 +132,7 @@ public class ProjectHelper { | |||||
| // Since the tree is composed of UE and RC - it can be reused ! | // Since the tree is composed of UE and RC - it can be reused ! | ||||
| // protected Hashtable processedFiles=new Hashtable(); | // protected Hashtable processedFiles=new Hashtable(); | ||||
| protected Vector importStack = new Vector(); | |||||
| private Vector importStack = new Vector(); | |||||
| // Temporary - until we figure a better API | // Temporary - until we figure a better API | ||||
| /** EXPERIMENTAL WILL_CHANGE | /** EXPERIMENTAL WILL_CHANGE | ||||
| @@ -146,6 +146,8 @@ public class ProjectHelper { | |||||
| * Import stack. | * Import stack. | ||||
| * Used to keep track of imported files. Error reporting should | * Used to keep track of imported files. Error reporting should | ||||
| * display the import path. | * display the import path. | ||||
| * | |||||
| * @return the stack of import source objects. | |||||
| */ | */ | ||||
| public Vector getImportStack() { | public Vector getImportStack() { | ||||
| return importStack; | return importStack; | ||||
| @@ -229,8 +231,8 @@ public class ProjectHelper { | |||||
| String helperClassName = rd.readLine(); | String helperClassName = rd.readLine(); | ||||
| rd.close(); | rd.close(); | ||||
| if (helperClassName != null && | |||||
| !"".equals(helperClassName)) { | |||||
| if (helperClassName != null | |||||
| && !"".equals(helperClassName)) { | |||||
| helper = newHelper(helperClassName); | helper = newHelper(helperClassName); | ||||
| } | } | ||||
| @@ -349,8 +349,8 @@ public class RuntimeConfigurable implements Serializable { | |||||
| } | } | ||||
| // Configure the object | // Configure the object | ||||
| Object target = (wrappedObject instanceof TypeAdapter) ? | |||||
| ((TypeAdapter) wrappedObject).getProxy() : wrappedObject; | |||||
| Object target = (wrappedObject instanceof TypeAdapter) | |||||
| ? ((TypeAdapter) wrappedObject).getProxy() : wrappedObject; | |||||
| //PropertyHelper ph=PropertyHelper.getPropertyHelper(p); | //PropertyHelper ph=PropertyHelper.getPropertyHelper(p); | ||||
| IntrospectionHelper ih = | IntrospectionHelper ih = | ||||
| @@ -77,12 +77,12 @@ public class Target implements TaskContainer { | |||||
| /** The "unless" condition to test on execution. */ | /** The "unless" condition to test on execution. */ | ||||
| private String unlessCondition = ""; | private String unlessCondition = ""; | ||||
| /** List of targets this target is dependent on. */ | /** List of targets this target is dependent on. */ | ||||
| private List/*<String>*/ dependencies = null; | |||||
| private List dependencies = null; | |||||
| /** Children of this target (tasks and data types). */ | /** Children of this target (tasks and data types). */ | ||||
| private List/*<Task|RuntimeConfigurable>*/ children = new ArrayList(5); | |||||
| private List children = new ArrayList(); | |||||
| /** Position in task list */ | /** Position in task list */ | ||||
| private int taskPosition = 0; | private int taskPosition = 0; | ||||
| /** Project this target belongs to. */ | /** Project this target belongs to. */ | ||||
| private Project project; | private Project project; | ||||
| /** Description of this target, if any. */ | /** Description of this target, if any. */ | ||||
| @@ -180,7 +180,7 @@ public class Target implements TaskContainer { | |||||
| public void startImportedTasks() { | public void startImportedTasks() { | ||||
| importedTasks = new ArrayList(); | importedTasks = new ArrayList(); | ||||
| } | } | ||||
| /** | /** | ||||
| * Adds a task to this target. | * Adds a task to this target. | ||||
| * | * | ||||
| @@ -228,7 +228,7 @@ public class Target implements TaskContainer { | |||||
| } | } | ||||
| } | } | ||||
| return (Task[])tasks.toArray(new Task[tasks.size()]); | |||||
| return (Task[]) tasks.toArray(new Task[tasks.size()]); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -204,7 +204,8 @@ public abstract class Task extends ProjectComponent { | |||||
| * | * | ||||
| * @exception BuildException if someting goes wrong with the build | * @exception BuildException if someting goes wrong with the build | ||||
| */ | */ | ||||
| public void init() throws BuildException {} | |||||
| public void init() throws BuildException { | |||||
| } | |||||
| /** | /** | ||||
| * Called by the project to let the task do its work. This method may be | * Called by the project to let the task do its work. This method may be | ||||
| @@ -215,7 +216,8 @@ public abstract class Task extends ProjectComponent { | |||||
| * | * | ||||
| * @exception BuildException if something goes wrong with the build | * @exception BuildException if something goes wrong with the build | ||||
| */ | */ | ||||
| public void execute() throws BuildException {} | |||||
| public void execute() throws BuildException { | |||||
| } | |||||
| /** | /** | ||||
| * Returns the file/location where this task was defined. | * Returns the file/location where this task was defined. | ||||
| @@ -60,17 +60,21 @@ package org.apache.tools.ant; | |||||
| * @author costin@dnt.ro | * @author costin@dnt.ro | ||||
| * @author peter reilly | * @author peter reilly | ||||
| */ | */ | ||||
| public interface TypeAdapter { | |||||
| public interface TypeAdapter { | |||||
| /** | /** | ||||
| * Sets the project | * Sets the project | ||||
| * | |||||
| * @param p the project instance. | |||||
| */ | */ | ||||
| public void setProject(Project p); | |||||
| void setProject(Project p); | |||||
| /** | /** | ||||
| * Gets the project | * Gets the project | ||||
| * | |||||
| * @return the project instance. | |||||
| */ | */ | ||||
| public Project getProject(); | |||||
| Project getProject(); | |||||
| /** | /** | ||||
| * Sets the proxy object, whose methods are going to be | * Sets the proxy object, whose methods are going to be | ||||
| @@ -81,17 +85,20 @@ public interface TypeAdapter { | |||||
| * | * | ||||
| * @param o The target object. Must not be <code>null</code>. | * @param o The target object. Must not be <code>null</code>. | ||||
| */ | */ | ||||
| public void setProxy(Object o); | |||||
| void setProxy(Object o); | |||||
| /** | /** | ||||
| * Returns the proxy object. | * Returns the proxy object. | ||||
| * | * | ||||
| * @return the target proxy object | * @return the target proxy object | ||||
| */ | */ | ||||
| public Object getProxy(); | |||||
| Object getProxy(); | |||||
| /** | /** | ||||
| * Check if the proxy class matchs the criteria | |||||
| * Check if the proxy class is compatible with this adapter - i.e. | |||||
| * the adapter will be able to adapt instances of the give class. | |||||
| * | |||||
| * @patam proxyClass the class to be checked. | |||||
| */ | */ | ||||
| public void checkProxyClass(Class proxyClass); | |||||
| void checkProxyClass(Class proxyClass); | |||||
| } | } | ||||
| @@ -439,8 +439,9 @@ public class UnknownElement extends Task { | |||||
| */ | */ | ||||
| public String getTaskName() { | public String getTaskName() { | ||||
| //return elementName; | //return elementName; | ||||
| return realThing == null || !(realThing instanceof Task) ? | |||||
| super.getTaskName() : ((Task) realThing).getTaskName(); | |||||
| return realThing == null | |||||
| || !(realThing instanceof Task) ? super.getTaskName() | |||||
| : ((Task) realThing).getTaskName(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -481,6 +482,4 @@ public class UnknownElement extends Task { | |||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| }// UnknownElement | |||||
| } | |||||
| @@ -92,7 +92,7 @@ public class XmlLogger implements BuildLogger { | |||||
| private PrintStream outStream; | private PrintStream outStream; | ||||
| /** DocumentBuilder to use when creating the document to start with. */ | /** DocumentBuilder to use when creating the document to start with. */ | ||||
| private static final DocumentBuilder builder = getDocumentBuilder(); | |||||
| private static DocumentBuilder builder = getDocumentBuilder(); | |||||
| /** | /** | ||||
| * Returns a default DocumentBuilder instance or throws an | * Returns a default DocumentBuilder instance or throws an | ||||
| @@ -230,6 +230,7 @@ public class XmlLogger implements BuildLogger { | |||||
| try { | try { | ||||
| out.close(); | out.close(); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| // ignore | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -104,7 +104,7 @@ public class ProjectHelper2 extends ProjectHelper { | |||||
| public void parse(Project project, Object source) | public void parse(Project project, Object source) | ||||
| throws BuildException { | throws BuildException { | ||||
| this.getImportStack().addElement(source); | |||||
| getImportStack().addElement(source); | |||||
| //System.out.println("Adding " + source); | //System.out.println("Adding " + source); | ||||
| AntXMLContext context = null; | AntXMLContext context = null; | ||||
| context = (AntXMLContext) project.getReference("ant.parsing.context"); | context = (AntXMLContext) project.getReference("ant.parsing.context"); | ||||
| @@ -116,7 +116,7 @@ public class ProjectHelper2 extends ProjectHelper { | |||||
| project.addReference("ant.targets", context.getTargets()); | project.addReference("ant.targets", context.getTargets()); | ||||
| } | } | ||||
| if (this.getImportStack().size() > 1) { | |||||
| if (getImportStack().size() > 1) { | |||||
| // we are in an imported file. | // we are in an imported file. | ||||
| context.setIgnoreProjectTag(true); | context.setIgnoreProjectTag(true); | ||||
| context.getCurrentTarget().startImportedTasks(); | context.getCurrentTarget().startImportedTasks(); | ||||
| @@ -76,6 +76,12 @@ public class LogOutputStream extends OutputStream { | |||||
| /** Initial buffer size. */ | /** Initial buffer size. */ | ||||
| private static final int INTIAL_SIZE = 132; | private static final int INTIAL_SIZE = 132; | ||||
| /** Carriage return */ | |||||
| private static final int CR = 0x0d; | |||||
| /** Linefeed */ | |||||
| private static final int LF = 0x0a; | |||||
| private ByteArrayOutputStream buffer | private ByteArrayOutputStream buffer | ||||
| = new ByteArrayOutputStream(INTIAL_SIZE); | = new ByteArrayOutputStream(INTIAL_SIZE); | ||||
| private boolean skip = false; | private boolean skip = false; | ||||
| @@ -162,13 +168,22 @@ public class LogOutputStream extends OutputStream { | |||||
| return level; | return level; | ||||
| } | } | ||||
| public void write(byte b[], int off, int len) throws IOException { | |||||
| /** | |||||
| * Write a block of characters to the output stream | |||||
| * | |||||
| * @param b the array containg the data | |||||
| * @param off the offset into the array where data starts | |||||
| * @param len the length of block | |||||
| * | |||||
| * @throws IOException if the data cannot be written into the stream. | |||||
| */ | |||||
| public void write(byte[] b, int off, int len) throws IOException { | |||||
| // find the line breaks and pass other chars through in blocks | // find the line breaks and pass other chars through in blocks | ||||
| int offset = off; | int offset = off; | ||||
| int blockStartOffset = offset; | int blockStartOffset = offset; | ||||
| int remaining = len; | int remaining = len; | ||||
| while (remaining > 0) { | while (remaining > 0) { | ||||
| while (remaining > 0 && b[offset] != 0x0a && b[offset] != 0x0d) { | |||||
| while (remaining > 0 && b[offset] != LF && b[offset] != CR) { | |||||
| offset++; | offset++; | ||||
| remaining--; | remaining--; | ||||
| } | } | ||||
| @@ -177,7 +192,7 @@ public class LogOutputStream extends OutputStream { | |||||
| if (blockLength > 0) { | if (blockLength > 0) { | ||||
| buffer.write(b, blockStartOffset, blockLength); | buffer.write(b, blockStartOffset, blockLength); | ||||
| } | } | ||||
| while (remaining > 0 && (b[offset] == 0x0a || b[offset] == 0x0d)) { | |||||
| while (remaining > 0 && (b[offset] == LF || b[offset] == CR)) { | |||||
| write(b[offset]); | write(b[offset]); | ||||
| offset++; | offset++; | ||||
| remaining--; | remaining--; | ||||
| @@ -298,6 +298,7 @@ public class ANTLR extends Task { | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| validateAttributes(); | validateAttributes(); | ||||
| //TODO: use ANTLR to parse the grammar file to do this. | //TODO: use ANTLR to parse the grammar file to do this. | ||||
| File generatedFile = getGeneratedFile(); | File generatedFile = getGeneratedFile(); | ||||
| boolean targetIsOutOfDate = | boolean targetIsOutOfDate = | ||||
| @@ -437,6 +438,7 @@ public class ANTLR extends Task { | |||||
| /** | /** | ||||
| * Whether the antlr version is 2.7.2 (or higher). | * Whether the antlr version is 2.7.2 (or higher). | ||||
| * | * | ||||
| * @return true if the version of Antlr present is 2.7.2 or later. | |||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| */ | */ | ||||
| protected boolean is272() { | protected boolean is272() { | ||||
| @@ -177,8 +177,8 @@ public class Cab extends MatchingTask { | |||||
| boolean upToDate = true; | boolean upToDate = true; | ||||
| for (int i = 0; i < files.size() && upToDate; i++) { | for (int i = 0; i < files.size() && upToDate; i++) { | ||||
| String file = files.elementAt(i).toString(); | String file = files.elementAt(i).toString(); | ||||
| if (fileUtils.resolveFile(baseDir, file).lastModified() > | |||||
| cabFile.lastModified()) { | |||||
| if (fileUtils.resolveFile(baseDir, file).lastModified() | |||||
| > cabFile.lastModified()) { | |||||
| upToDate = false; | upToDate = false; | ||||
| } | } | ||||
| } | } | ||||
| @@ -296,7 +296,9 @@ public class EchoProperties extends Task { | |||||
| if (null != in) { | if (null != in) { | ||||
| in.close(); | in.close(); | ||||
| } | } | ||||
| } catch (IOException ioe) {} | |||||
| } catch (IOException ioe) { | |||||
| //ignore | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -347,6 +349,7 @@ public class EchoProperties extends Task { | |||||
| try { | try { | ||||
| os.close(); | os.close(); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| //ignore | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -390,7 +393,7 @@ public class EchoProperties extends Task { | |||||
| String name; | String name; | ||||
| Enumeration e = props.propertyNames(); | Enumeration e = props.propertyNames(); | ||||
| while (e.hasMoreElements()) { | while (e.hasMoreElements()) { | ||||
| name = (String)e.nextElement(); | |||||
| name = (String) e.nextElement(); | |||||
| Element propElement = doc.createElement(PROPERTY); | Element propElement = doc.createElement(PROPERTY); | ||||
| propElement.setAttribute(ATTR_NAME, name); | propElement.setAttribute(ATTR_NAME, name); | ||||
| propElement.setAttribute(ATTR_VALUE, props.getProperty(name)); | propElement.setAttribute(ATTR_VALUE, props.getProperty(name)); | ||||
| @@ -53,8 +53,6 @@ | |||||
| */ | */ | ||||
| package org.apache.tools.ant.taskdefs.optional; | package org.apache.tools.ant.taskdefs.optional; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.io.FileInputStream; | import java.io.FileInputStream; | ||||
| import java.io.FileOutputStream; | import java.io.FileOutputStream; | ||||
| @@ -84,7 +82,8 @@ import org.apache.tools.ant.types.Reference; | |||||
| * iControl generates a control file that you can refer to | * iControl generates a control file that you can refer to | ||||
| * from this task using the controlfile attribute. | * from this task using the controlfile attribute. | ||||
| * iContract is at | * iContract is at | ||||
| * <a href="http://www.reliable-systems.com/tools/">http://www.reliable-systems.com/tools/</a> | |||||
| * <a href="http://www.reliable-systems.com/tools/"> | |||||
| * http://www.reliable-systems.com/tools/</a> | |||||
| * <p/> | * <p/> | ||||
| * Thanks to Rainer Schmitz for enhancements and comments. | * Thanks to Rainer Schmitz for enhancements and comments. | ||||
| * | * | ||||
| @@ -104,55 +103,63 @@ import org.apache.tools.ant.types.Reference; | |||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">instrumentdir</td> | * <td valign="top">instrumentdir</td> | ||||
| * <td valign="top">Indicates where the instrumented source files should go.</td> | |||||
| * <td valign="top">Indicates where the instrumented source | |||||
| * files should go.</td> | |||||
| * <td valign="top" align="center">Yes</td> | * <td valign="top" align="center">Yes</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">repositorydir</td> | * <td valign="top">repositorydir</td> | ||||
| * <td valign="top">Indicates where the repository source files should go.</td> | |||||
| * <td valign="top">Indicates where the repository source | |||||
| * files should go.</td> | |||||
| * <td valign="top" align="center">Yes</td> | * <td valign="top" align="center">Yes</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">builddir</td> | * <td valign="top">builddir</td> | ||||
| * <td valign="top">Indicates where the compiled instrumented classes should go. | |||||
| * Defaults to the value of instrumentdir. | |||||
| * <td valign="top">Indicates where the compiled instrumented | |||||
| * classes should go. Defaults to the value of | |||||
| * instrumentdir. | |||||
| * </p> | * </p> | ||||
| * <em>NOTE:</em> Don't use the same directory for compiled instrumented classes | |||||
| * and uninstrumented classes. It will break the dependency checking. (Classes will | |||||
| * not be reinstrumented if you change them).</td> | |||||
| * <em>NOTE:</em> Don't use the same directory for compiled | |||||
| * instrumented classes and uninstrumented classes. It will break the | |||||
| * dependency checking. (Classes will not be reinstrumented if you | |||||
| * change them).</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">repbuilddir</td> | * <td valign="top">repbuilddir</td> | ||||
| * <td valign="top">Indicates where the compiled repository classes should go. | |||||
| * Defaults to the value of repositorydir.</td> | |||||
| * <td valign="top">Indicates where the compiled repository classes | |||||
| * should go. Defaults to the value of repositorydir.</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">pre</td> | * <td valign="top">pre</td> | ||||
| * <td valign="top">Indicates whether or not to instrument for preconditions. | |||||
| * Defaults to <code>true</code> unless controlfile is specified, in which case it | |||||
| * defaults to <code>false</code>.</td> | |||||
| * <td valign="top">Indicates whether or not to instrument for | |||||
| * preconditions. Defaults to <code>true</code> unless | |||||
| * controlfile is specified, in which case it defaults | |||||
| * to <code>false</code>.</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">post</td> | * <td valign="top">post</td> | ||||
| * <td valign="top">Indicates whether or not to instrument for postconditions. | |||||
| * Defaults to <code>true</code> unless controlfile is specified, in which case it | |||||
| * defaults to <code>false</code>.</td> | |||||
| * <td valign="top">Indicates whether or not to instrument for | |||||
| * postconditions. Defaults to <code>true</code> unless | |||||
| * controlfile is specified, in which case it defaults | |||||
| * to <code>false</code>.</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">invariant</td> | * <td valign="top">invariant</td> | ||||
| * <td valign="top">Indicates whether or not to instrument for invariants. | * <td valign="top">Indicates whether or not to instrument for invariants. | ||||
| * Defaults to <code>true</code> unless controlfile is specified, in which case it | |||||
| * defaults to <code>false</code>.</td> | |||||
| * Defaults to <code>true</code> unless controlfile is | |||||
| * specified, in which case it defaults to | |||||
| * <code>false</code>.</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">failthrowable</td> | * <td valign="top">failthrowable</td> | ||||
| * <td valign="top">The full name of the Throwable (Exception) that should be | |||||
| * thrown when an assertion is violated. Defaults to <code>java.lang.Error</code></td> | |||||
| * <td valign="top">The full name of the Throwable (Exception) that | |||||
| * should be thrown when an assertion is violated. | |||||
| * Defaults to <code>java.lang.Error</code></td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| @@ -180,22 +187,28 @@ import org.apache.tools.ant.types.Reference; | |||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">controlfile</td> | * <td valign="top">controlfile</td> | ||||
| * <td valign="top">The name of the control file to pass to iContract. Consider using iControl to generate the file. | |||||
| * Default is not to pass a file. </td> | |||||
| * <td valign="top" align="center">Only if <code>updateicontrol=true</code></td> | |||||
| * <td valign="top">The name of the control file to pass to iContract. | |||||
| * Consider using iControl to generate the file. | |||||
| * Default is not to pass a file. </td> | |||||
| * <td valign="top" align="center"> | |||||
| * Only if <code>updateicontrol=true</code></td> | |||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">classdir</td> | * <td valign="top">classdir</td> | ||||
| * <td valign="top">Indicates where compiled (unistrumented) classes are located. | |||||
| * This is required in order to properly update the icontrol.properties file, not | |||||
| * for instrumentation.</td> | |||||
| * <td valign="top" align="center">Only if <code>updateicontrol=true</code></td> | |||||
| * <td valign="top">Indicates where compiled (unistrumented) classes are | |||||
| * located. This is required in order to properly update | |||||
| * the icontrol.properties file, not for instrumentation. | |||||
| * </td> | |||||
| * <td valign="top" align="center">Only if | |||||
| * <code>updateicontrol=true</code></td> | |||||
| * </tr> | * </tr> | ||||
| * <tr> | * <tr> | ||||
| * <td valign="top">targets</td> | * <td valign="top">targets</td> | ||||
| * <td valign="top">Name of the file that will be generated by this task, which lists all the | |||||
| * classes that iContract will instrument. If specified, the file will not be deleted after execution. | |||||
| * If not specified, a file will still be created, but it will be deleted after execution.</td> | |||||
| * <td valign="top">Name of the file that will be generated by this task, | |||||
| * which lists all the classes that iContract will | |||||
| * instrument. If specified, the file will not be deleted | |||||
| * after execution. If not specified, a file will still | |||||
| * be created, but it will be deleted after execution.</td> | |||||
| * <td valign="top" align="center">No</td> | * <td valign="top" align="center">No</td> | ||||
| * </tr> | * </tr> | ||||
| * </table> | * </table> | ||||
| @@ -228,8 +241,9 @@ import org.apache.tools.ant.types.Reference; | |||||
| */ | */ | ||||
| public class IContract extends MatchingTask { | public class IContract extends MatchingTask { | ||||
| private static final String ICONTROL_PROPERTIES_HEADER = | |||||
| " You might want to set classRoot to point to your normal compilation class root directory."; | |||||
| private static final String ICONTROL_PROPERTIES_HEADER | |||||
| = "You might want to set classRoot to point to your normal " | |||||
| + "compilation class root directory."; | |||||
| /** compiler to use for instrumenation */ | /** compiler to use for instrumenation */ | ||||
| private String icCompiler = "javac"; | private String icCompiler = "javac"; | ||||
| @@ -288,8 +302,12 @@ public class IContract extends MatchingTask { | |||||
| private boolean invariant = true; | private boolean invariant = true; | ||||
| private boolean invariantModified = false; | private boolean invariantModified = false; | ||||
| /** Indicates whether or not to instrument all files regardless of timestamp */ | |||||
| // can't be explicitly set, is set if control file exists and is newer than any source file | |||||
| /** | |||||
| * Indicates whether or not to instrument all files regardless of timestamp | |||||
| * | |||||
| * Can't be explicitly set, is set if control file exists and is newer | |||||
| * than any source file | |||||
| */ | |||||
| private boolean instrumentall = false; | private boolean instrumentall = false; | ||||
| /** | /** | ||||
| @@ -534,13 +552,14 @@ public class IContract extends MatchingTask { | |||||
| } | } | ||||
| // We want to be notified if iContract jar is missing. This makes life easier for the user | |||||
| // who didn't understand that iContract is a separate library (duh!) | |||||
| // We want to be notified if iContract jar is missing. | |||||
| // This makes life easier for the user who didn't understand | |||||
| // that iContract is a separate library (duh!) | |||||
| getProject().addBuildListener(new IContractPresenceDetector()); | getProject().addBuildListener(new IContractPresenceDetector()); | ||||
| // Prepare the directories for iContract. iContract will make them if they | |||||
| // don't exist, but for some reason I don't know, it will complain about the REP files | |||||
| // afterwards | |||||
| // Prepare the directories for iContract. iContract will make | |||||
| // them if they don't exist, but for some reason I don't know, | |||||
| // it will complain about the REP files afterwards | |||||
| Mkdir mkdir = (Mkdir) getProject().createTask("mkdir"); | Mkdir mkdir = (Mkdir) getProject().createTask("mkdir"); | ||||
| mkdir.setDir(instrumentDir); | mkdir.setDir(instrumentDir); | ||||
| @@ -553,42 +572,60 @@ public class IContract extends MatchingTask { | |||||
| // Set the classpath that is needed for regular Javac compilation | // Set the classpath that is needed for regular Javac compilation | ||||
| Path baseClasspath = createClasspath(); | Path baseClasspath = createClasspath(); | ||||
| // Might need to add the core classes if we're not using Sun's Javac (like Jikes) | |||||
| // Might need to add the core classes if we're not using | |||||
| // Sun's Javac (like Jikes) | |||||
| String compiler = getProject().getProperty("build.compiler"); | String compiler = getProject().getProperty("build.compiler"); | ||||
| ClasspathHelper classpathHelper = new ClasspathHelper(compiler); | ClasspathHelper classpathHelper = new ClasspathHelper(compiler); | ||||
| classpathHelper.modify(baseClasspath); | classpathHelper.modify(baseClasspath); | ||||
| // Create the classpath required to compile the sourcefiles BEFORE instrumentation | |||||
| // Create the classpath required to compile the sourcefiles | |||||
| // BEFORE instrumentation | |||||
| Path beforeInstrumentationClasspath = ((Path) baseClasspath.clone()); | Path beforeInstrumentationClasspath = ((Path) baseClasspath.clone()); | ||||
| beforeInstrumentationClasspath.append(new Path(getProject(), | beforeInstrumentationClasspath.append(new Path(getProject(), | ||||
| srcDir.getAbsolutePath())); | srcDir.getAbsolutePath())); | ||||
| // Create the classpath required to compile the sourcefiles AFTER instrumentation | |||||
| // Create the classpath required to compile the sourcefiles | |||||
| // AFTER instrumentation | |||||
| Path afterInstrumentationClasspath = ((Path) baseClasspath.clone()); | Path afterInstrumentationClasspath = ((Path) baseClasspath.clone()); | ||||
| afterInstrumentationClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), srcDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), buildDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), | |||||
| instrumentDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), | |||||
| repositoryDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), | |||||
| srcDir.getAbsolutePath())); | |||||
| afterInstrumentationClasspath.append(new Path(getProject(), | |||||
| buildDir.getAbsolutePath())); | |||||
| // Create the classpath required to automatically compile the repository files | |||||
| // Create the classpath required to automatically compile the | |||||
| // repository files | |||||
| Path repositoryClasspath = ((Path) baseClasspath.clone()); | Path repositoryClasspath = ((Path) baseClasspath.clone()); | ||||
| repositoryClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), srcDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), buildDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), | |||||
| instrumentDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), | |||||
| srcDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), | |||||
| repositoryDir.getAbsolutePath())); | |||||
| repositoryClasspath.append(new Path(getProject(), | |||||
| buildDir.getAbsolutePath())); | |||||
| // Create the classpath required for iContract itself | // Create the classpath required for iContract itself | ||||
| Path iContractClasspath = ((Path) baseClasspath.clone()); | Path iContractClasspath = ((Path) baseClasspath.clone()); | ||||
| iContractClasspath.append(new Path(getProject(), System.getProperty("java.home") + File.separator + ".." + File.separator + "lib" + File.separator + "tools.jar")); | |||||
| iContractClasspath.append(new Path(getProject(), srcDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), repositoryDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), instrumentDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), buildDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), | |||||
| System.getProperty("java.home") + File.separator + ".." | |||||
| + File.separator + "lib" + File.separator + "tools.jar")); | |||||
| iContractClasspath.append(new Path(getProject(), | |||||
| srcDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), | |||||
| repositoryDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), | |||||
| instrumentDir.getAbsolutePath())); | |||||
| iContractClasspath.append(new Path(getProject(), | |||||
| buildDir.getAbsolutePath())); | |||||
| // Create a forked java process | // Create a forked java process | ||||
| Java iContract = (Java) getProject().createTask("java"); | Java iContract = (Java) getProject().createTask("java"); | ||||
| @@ -603,18 +640,36 @@ public class IContract extends MatchingTask { | |||||
| args.append(directiveString()); | args.append(directiveString()); | ||||
| args.append("-v").append(verbosity).append(" "); | args.append("-v").append(verbosity).append(" "); | ||||
| args.append("-b").append("\"").append(icCompiler).append(" -classpath ").append(beforeInstrumentationClasspath).append("\" "); | |||||
| args.append("-c").append("\"").append(icCompiler).append(" -classpath ").append(afterInstrumentationClasspath).append(" -d ").append(buildDir).append("\" "); | |||||
| args.append("-n").append("\"").append(icCompiler).append(" -classpath ").append(repositoryClasspath).append("\" "); | |||||
| args.append("-b").append("\"").append(icCompiler); | |||||
| args.append(" -classpath ").append(beforeInstrumentationClasspath); | |||||
| args.append("\" "); | |||||
| args.append("-c").append("\"").append(icCompiler); | |||||
| args.append(" -classpath ").append(afterInstrumentationClasspath); | |||||
| args.append(" -d ").append(buildDir).append("\" "); | |||||
| args.append("-n").append("\"").append(icCompiler); | |||||
| args.append(" -classpath ").append(repositoryClasspath); | |||||
| args.append("\" "); | |||||
| args.append("-d").append(failThrowable).append(" "); | args.append("-d").append(failThrowable).append(" "); | ||||
| args.append("-o").append(instrumentDir).append(File.separator).append("@p").append(File.separator).append("@f.@e "); | |||||
| args.append("-k").append(repositoryDir).append(File.separator).append("@p "); | |||||
| args.append("-o").append(instrumentDir).append(File.separator); | |||||
| args.append("@p").append(File.separator).append("@f.@e "); | |||||
| args.append("-k").append(repositoryDir).append(File.separator); | |||||
| args.append("@p "); | |||||
| args.append(quiet ? "-q " : ""); | args.append(quiet ? "-q " : ""); | ||||
| args.append(instrumentall ? "-a " : "");// reinstrument everything if controlFile exists and is newer than any class | |||||
| // reinstrument everything if controlFile exists and is newer | |||||
| // than any class | |||||
| args.append(instrumentall ? "-a " : ""); | |||||
| args.append("@").append(targets.getAbsolutePath()); | args.append("@").append(targets.getAbsolutePath()); | ||||
| iContract.createArg().setLine(args.toString()); | iContract.createArg().setLine(args.toString()); | ||||
| //System.out.println( "JAVA -classpath " + iContractClasspath + " com.reliablesystems.iContract.Tool " + args.toString() ); | |||||
| //System.out.println( "JAVA -classpath " + iContractClasspath | |||||
| // + " com.reliablesystems.iContract.Tool " + args.toString() ); | |||||
| // update iControlProperties if it's set. | // update iControlProperties if it's set. | ||||
| if (updateIcontrol) { | if (updateIcontrol) { | ||||
| @@ -624,17 +679,24 @@ public class IContract extends MatchingTask { | |||||
| // to read existing propertiesfile | // to read existing propertiesfile | ||||
| iControlProps.load(new FileInputStream("icontrol.properties")); | iControlProps.load(new FileInputStream("icontrol.properties")); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| log("File icontrol.properties not found. That's ok. Writing a default one."); | |||||
| log("File icontrol.properties not found. That's ok. " | |||||
| + "Writing a default one."); | |||||
| } | } | ||||
| iControlProps.setProperty("sourceRoot", srcDir.getAbsolutePath()); | |||||
| iControlProps.setProperty("classRoot", classDir.getAbsolutePath()); | |||||
| iControlProps.setProperty("classpath", afterInstrumentationClasspath.toString()); | |||||
| iControlProps.setProperty("controlFile", controlFile.getAbsolutePath()); | |||||
| iControlProps.setProperty("targetsFile", targets.getAbsolutePath()); | |||||
| iControlProps.setProperty("sourceRoot", | |||||
| srcDir.getAbsolutePath()); | |||||
| iControlProps.setProperty("classRoot", | |||||
| classDir.getAbsolutePath()); | |||||
| iControlProps.setProperty("classpath", | |||||
| afterInstrumentationClasspath.toString()); | |||||
| iControlProps.setProperty("controlFile", | |||||
| controlFile.getAbsolutePath()); | |||||
| iControlProps.setProperty("targetsFile", | |||||
| targets.getAbsolutePath()); | |||||
| try { | try { | ||||
| // to read existing propertiesfile | // to read existing propertiesfile | ||||
| iControlProps.store(new FileOutputStream("icontrol.properties"), ICONTROL_PROPERTIES_HEADER); | |||||
| iControlProps.store(new FileOutputStream("icontrol.properties"), | |||||
| ICONTROL_PROPERTIES_HEADER); | |||||
| log("Updated icontrol.properties"); | log("Updated icontrol.properties"); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| log("Couldn't write icontrol.properties."); | log("Couldn't write icontrol.properties."); | ||||
| @@ -646,11 +708,14 @@ public class IContract extends MatchingTask { | |||||
| if (result != 0) { | if (result != 0) { | ||||
| if (iContractMissing) { | if (iContractMissing) { | ||||
| log("iContract can't be found on your classpath. Your classpath is:"); | |||||
| log("iContract can't be found on your classpath. " | |||||
| + "Your classpath is:"); | |||||
| log(classpath.toString()); | log(classpath.toString()); | ||||
| log("If you don't have the iContract jar, go get it at http://www.reliable-systems.com/tools/"); | |||||
| log("If you don't have the iContract jar, go get it at " | |||||
| + "http://www.reliable-systems.com/tools/"); | |||||
| } | } | ||||
| throw new BuildException("iContract instrumentation failed. Code=" + result); | |||||
| throw new BuildException("iContract instrumentation failed. " | |||||
| + "Code = " + result); | |||||
| } | } | ||||
| } else { | } else { | ||||
| // not dirty | // not dirty | ||||
| @@ -662,22 +727,28 @@ public class IContract extends MatchingTask { | |||||
| /** Checks that the required attributes are set. */ | /** Checks that the required attributes are set. */ | ||||
| private void preconditions() throws BuildException { | private void preconditions() throws BuildException { | ||||
| if (srcDir == null) { | if (srcDir == null) { | ||||
| throw new BuildException("srcdir attribute must be set!", getLocation()); | |||||
| throw new BuildException("srcdir attribute must be set!", | |||||
| getLocation()); | |||||
| } | } | ||||
| if (!srcDir.exists()) { | if (!srcDir.exists()) { | ||||
| throw new BuildException("srcdir \"" + srcDir.getPath() + "\" does not exist!", getLocation()); | |||||
| throw new BuildException("srcdir \"" + srcDir.getPath() | |||||
| + "\" does not exist!", getLocation()); | |||||
| } | } | ||||
| if (instrumentDir == null) { | if (instrumentDir == null) { | ||||
| throw new BuildException("instrumentdir attribute must be set!", getLocation()); | |||||
| throw new BuildException("instrumentdir attribute must be set!", | |||||
| getLocation()); | |||||
| } | } | ||||
| if (repositoryDir == null) { | if (repositoryDir == null) { | ||||
| throw new BuildException("repositorydir attribute must be set!", getLocation()); | |||||
| throw new BuildException("repositorydir attribute must be set!", | |||||
| getLocation()); | |||||
| } | } | ||||
| if (updateIcontrol && classDir == null) { | if (updateIcontrol && classDir == null) { | ||||
| throw new BuildException("classdir attribute must be specified when updateicontrol=true!", getLocation()); | |||||
| throw new BuildException("classdir attribute must be specified " | |||||
| + "when updateicontrol=true!", getLocation()); | |||||
| } | } | ||||
| if (updateIcontrol && controlFile == null) { | if (updateIcontrol && controlFile == null) { | ||||
| throw new BuildException("controlfile attribute must be specified when updateicontrol=true!", getLocation()); | |||||
| throw new BuildException("controlfile attribute must be specified " | |||||
| + "when updateicontrol=true!", getLocation()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -706,10 +777,12 @@ public class IContract extends MatchingTask { | |||||
| try { | try { | ||||
| if (targets == null) { | if (targets == null) { | ||||
| targets = new File("targets"); | targets = new File("targets"); | ||||
| log("Warning: targets file not specified. generating file: " + targets.getName()); | |||||
| log("Warning: targets file not specified. generating file: " | |||||
| + targets.getName()); | |||||
| writeTargets = true; | writeTargets = true; | ||||
| } else if (!targets.exists()) { | } else if (!targets.exists()) { | ||||
| log("Specified targets file doesn't exist. generating file: " + targets.getName()); | |||||
| log("Specified targets file doesn't exist. generating file: " | |||||
| + targets.getName()); | |||||
| writeTargets = true; | writeTargets = true; | ||||
| } | } | ||||
| if (writeTargets) { | if (writeTargets) { | ||||
| @@ -733,7 +806,9 @@ public class IContract extends MatchingTask { | |||||
| } | } | ||||
| if (!classFile.exists() || srcFile.lastModified() > classFile.lastModified()) { | if (!classFile.exists() || srcFile.lastModified() > classFile.lastModified()) { | ||||
| //log( "Found a file newer than the instrumentDir class file: " + srcFile.getPath() + " newer than " + classFile.getPath() + ". Running iContract again..." ); | |||||
| //log( "Found a file newer than the instrumentDir class file: " | |||||
| // + srcFile.getPath() + " newer than " + classFile.getPath() | |||||
| // + ". Running iContract again..." ); | |||||
| dirty = true; | dirty = true; | ||||
| } | } | ||||
| } | } | ||||
| @@ -761,7 +836,10 @@ public class IContract extends MatchingTask { | |||||
| if (files[i].endsWith(".class")) { | if (files[i].endsWith(".class")) { | ||||
| if (controlFileTime > srcFile.lastModified()) { | if (controlFileTime > srcFile.lastModified()) { | ||||
| if (!dirty) { | if (!dirty) { | ||||
| log("Control file " + controlFile.getAbsolutePath() + " has been updated. Instrumenting all files..."); | |||||
| log("Control file " | |||||
| + controlFile.getAbsolutePath() | |||||
| + " has been updated. " | |||||
| + "Instrumenting all files..."); | |||||
| } | } | ||||
| dirty = true; | dirty = true; | ||||
| instrumentall = true; | instrumentall = true; | ||||
| @@ -771,7 +849,8 @@ public class IContract extends MatchingTask { | |||||
| } | } | ||||
| } | } | ||||
| } catch (Throwable t) { | } catch (Throwable t) { | ||||
| throw new BuildException("Got an interesting exception:" + t.getMessage()); | |||||
| throw new BuildException("Got an interesting exception:" | |||||
| + t.getMessage()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -876,7 +955,8 @@ public class IContract extends MatchingTask { | |||||
| // make it public | // make it public | ||||
| public void modify(Path path) { | public void modify(Path path) { | ||||
| // depending on what compiler to use, set the includeJavaRuntime flag | |||||
| // depending on what compiler to use, set the | |||||
| // includeJavaRuntime flag | |||||
| if ("jikes".equals(compiler)) { | if ("jikes".equals(compiler)) { | ||||
| icCompiler = compiler; | icCompiler = compiler; | ||||
| includeJavaRuntime = true; | includeJavaRuntime = true; | ||||
| @@ -275,25 +275,31 @@ public class Javah extends Task { | |||||
| } | } | ||||
| /** | /** | ||||
| * Executes the task. | |||||
| * Execute the task | |||||
| * | |||||
| * @throws BuildException is there is a problem in the task execution. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| // first off, make sure that we've got a srcdir | // first off, make sure that we've got a srcdir | ||||
| if ((cls == null) && (classes.size() == 0)) { | if ((cls == null) && (classes.size() == 0)) { | ||||
| throw new BuildException("class attribute must be set!", getLocation()); | |||||
| throw new BuildException("class attribute must be set!", | |||||
| getLocation()); | |||||
| } | } | ||||
| if ((cls != null) && (classes.size() > 0)) { | if ((cls != null) && (classes.size() > 0)) { | ||||
| throw new BuildException("set class attribute or class element, not both.", getLocation()); | |||||
| throw new BuildException("set class attribute or class element, " | |||||
| + "not both.", getLocation()); | |||||
| } | } | ||||
| if (destDir != null) { | if (destDir != null) { | ||||
| if (!destDir.isDirectory()) { | if (!destDir.isDirectory()) { | ||||
| throw new BuildException("destination directory \"" + destDir + "\" does not exist or is not a directory", getLocation()); | |||||
| throw new BuildException("destination directory \"" + destDir | |||||
| + "\" does not exist or is not a directory", getLocation()); | |||||
| } | } | ||||
| if (outputFile != null) { | if (outputFile != null) { | ||||
| throw new BuildException("destdir and outputFile are mutually exclusive", getLocation()); | |||||
| throw new BuildException("destdir and outputFile are mutually " | |||||
| + "exclusive", getLocation()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -305,8 +311,8 @@ public class Javah extends Task { | |||||
| String compiler = getProject().getProperty("build.compiler"); | String compiler = getProject().getProperty("build.compiler"); | ||||
| if (compiler == null) { | if (compiler == null) { | ||||
| if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) && | |||||
| !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) { | |||||
| if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1) | |||||
| && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)) { | |||||
| compiler = "modern"; | compiler = "modern"; | ||||
| } else { | } else { | ||||
| compiler = "classic"; | compiler = "classic"; | ||||
| @@ -357,9 +363,9 @@ public class Javah extends Task { | |||||
| Object javahMain = constructor.newInstance(new Object[] {cmd.getArguments()}); | Object javahMain = constructor.newInstance(new Object[] {cmd.getArguments()}); | ||||
| // find the run method | // find the run method | ||||
| Method runMethod = javahMainClass.getMethod("run",new Class[0]); | |||||
| Method runMethod = javahMainClass.getMethod("run", new Class[0]); | |||||
| runMethod.invoke(javahMain,new Object[0]); | |||||
| runMethod.invoke(javahMain, new Object[0]); | |||||
| } catch (Exception ex) { | } catch (Exception ex) { | ||||
| if (ex instanceof BuildException) { | if (ex instanceof BuildException) { | ||||
| throw (BuildException) ex; | throw (BuildException) ex; | ||||
| @@ -135,6 +135,10 @@ public class Native2Ascii extends MatchingTask { | |||||
| /** | /** | ||||
| * Defines the FileNameMapper to use (nested mapper element). | * Defines the FileNameMapper to use (nested mapper element). | ||||
| * | |||||
| * @return the mapper to use for file name translations. | |||||
| * | |||||
| * @throws BuildException if more than one mapper is defined. | |||||
| */ | */ | ||||
| public Mapper createMapper() throws BuildException { | public Mapper createMapper() throws BuildException { | ||||
| if (mapper != null) { | if (mapper != null) { | ||||
| @@ -145,6 +149,11 @@ public class Native2Ascii extends MatchingTask { | |||||
| return mapper; | return mapper; | ||||
| } | } | ||||
| /** | |||||
| * Execute the task | |||||
| * | |||||
| * @throws BuildException is there is a problem in the task execution. | |||||
| */ | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| DirectoryScanner scanner = null; // Scanner to find our inputs | DirectoryScanner scanner = null; // Scanner to find our inputs | ||||
| @@ -252,8 +261,10 @@ public class Native2Ascii extends MatchingTask { | |||||
| private class ExtMapper implements FileNameMapper { | private class ExtMapper implements FileNameMapper { | ||||
| public void setFrom(String s) {} | |||||
| public void setTo(String s) {} | |||||
| public void setFrom(String s) { | |||||
| } | |||||
| public void setTo(String s) { | |||||
| } | |||||
| public String[] mapFileName(String fileName) { | public String[] mapFileName(String fileName) { | ||||
| int lastDot = fileName.lastIndexOf('.'); | int lastDot = fileName.lastIndexOf('.'); | ||||
| @@ -163,10 +163,14 @@ public class NetRexxC extends MatchingTask { | |||||
| private boolean suppressDeprecation = false; | private boolean suppressDeprecation = false; | ||||
| // constants for the messages to suppress by flags and their corresponding properties | // constants for the messages to suppress by flags and their corresponding properties | ||||
| static final String MSG_METHOD_ARGUMENT_NOT_USED = "Warning: Method argument is not used"; | |||||
| static final String MSG_PRIVATE_PROPERTY_NOT_USED = "Warning: Private property is defined but not used"; | |||||
| static final String MSG_VARIABLE_NOT_USED = "Warning: Variable is set but not used"; | |||||
| static final String MSG_EXCEPTION_NOT_SIGNALLED = "is in SIGNALS list but is not signalled within the method"; | |||||
| static final String MSG_METHOD_ARGUMENT_NOT_USED | |||||
| = "Warning: Method argument is not used"; | |||||
| static final String MSG_PRIVATE_PROPERTY_NOT_USED | |||||
| = "Warning: Private property is defined but not used"; | |||||
| static final String MSG_VARIABLE_NOT_USED | |||||
| = "Warning: Variable is set but not used"; | |||||
| static final String MSG_EXCEPTION_NOT_SIGNALLED | |||||
| = "is in SIGNALS list but is not signalled within the method"; | |||||
| static final String MSG_DEPRECATION = "has been deprecated"; | static final String MSG_DEPRECATION = "has been deprecated"; | ||||
| // other implementation variables | // other implementation variables | ||||
| @@ -290,7 +294,7 @@ public class NetRexxC extends MatchingTask { | |||||
| * false. | * false. | ||||
| */ | */ | ||||
| public void setJava(boolean java) { | public void setJava(boolean java) { | ||||
| log( "The attribute java is currently unused.", Project.MSG_WARN ); | |||||
| log("The attribute java is currently unused.", Project.MSG_WARN); | |||||
| } | } | ||||
| @@ -527,7 +531,6 @@ public class NetRexxC extends MatchingTask { | |||||
| * with arguments like -Dant.netrexxc.verbose=verbose5 one can easily take | * with arguments like -Dant.netrexxc.verbose=verbose5 one can easily take | ||||
| * control of all netrexxc-tasks. | * control of all netrexxc-tasks. | ||||
| */ | */ | ||||
| // Sorry for the formatting, but that way it's easier to keep in sync with the private properties (line by line). | |||||
| public void init() { | public void init() { | ||||
| String p; | String p; | ||||
| @@ -736,7 +739,7 @@ public class NetRexxC extends MatchingTask { | |||||
| j++; | j++; | ||||
| } | } | ||||
| // create a single array of arguments for the compiler | // create a single array of arguments for the compiler | ||||
| String compileArgs[] = new String[compileOptionsArray.length + fileListArray.length]; | |||||
| String[] compileArgs = new String[compileOptionsArray.length + fileListArray.length]; | |||||
| for (int i = 0; i < compileOptionsArray.length; i++) { | for (int i = 0; i < compileOptionsArray.length; i++) { | ||||
| compileArgs[i] = compileOptionsArray[i]; | compileArgs[i] = compileOptionsArray[i]; | ||||
| @@ -782,38 +785,48 @@ public class NetRexxC extends MatchingTask { | |||||
| String l; | String l; | ||||
| BufferedReader in = new BufferedReader(new StringReader(out.toString())); | BufferedReader in = new BufferedReader(new StringReader(out.toString())); | ||||
| log("replacing destdir '" + ddir + "' through sourcedir '" + sdir + "'", Project.MSG_VERBOSE); | |||||
| log("replacing destdir '" + ddir + "' through sourcedir '" | |||||
| + sdir + "'", Project.MSG_VERBOSE); | |||||
| while ((l = in.readLine()) != null) { | while ((l = in.readLine()) != null) { | ||||
| int idx; | int idx; | ||||
| while (doReplace && ((idx = l.indexOf(ddir)) != -1)) {// path is mentioned in the message | |||||
| while (doReplace && ((idx = l.indexOf(ddir)) != -1)) { | |||||
| // path is mentioned in the message | |||||
| l = (new StringBuffer(l)).replace(idx, idx + dlen, sdir).toString(); | l = (new StringBuffer(l)).replace(idx, idx + dlen, sdir).toString(); | ||||
| } | } | ||||
| // verbose level logging for suppressed messages | // verbose level logging for suppressed messages | ||||
| if (suppressMethodArgumentNotUsed && l.indexOf(MSG_METHOD_ARGUMENT_NOT_USED) != -1) { | |||||
| if (suppressMethodArgumentNotUsed | |||||
| && l.indexOf(MSG_METHOD_ARGUMENT_NOT_USED) != -1) { | |||||
| log(l, Project.MSG_VERBOSE); | log(l, Project.MSG_VERBOSE); | ||||
| } else if (suppressPrivatePropertyNotUsed && l.indexOf(MSG_PRIVATE_PROPERTY_NOT_USED) != -1) { | |||||
| } else if (suppressPrivatePropertyNotUsed | |||||
| && l.indexOf(MSG_PRIVATE_PROPERTY_NOT_USED) != -1) { | |||||
| log(l, Project.MSG_VERBOSE); | log(l, Project.MSG_VERBOSE); | ||||
| } else if (suppressVariableNotUsed && l.indexOf(MSG_VARIABLE_NOT_USED) != -1) { | |||||
| } else if (suppressVariableNotUsed | |||||
| && l.indexOf(MSG_VARIABLE_NOT_USED) != -1) { | |||||
| log(l, Project.MSG_VERBOSE); | log(l, Project.MSG_VERBOSE); | ||||
| } else if (suppressExceptionNotSignalled && l.indexOf(MSG_EXCEPTION_NOT_SIGNALLED) != -1) { | |||||
| } else if (suppressExceptionNotSignalled | |||||
| && l.indexOf(MSG_EXCEPTION_NOT_SIGNALLED) != -1) { | |||||
| log(l, Project.MSG_VERBOSE); | log(l, Project.MSG_VERBOSE); | ||||
| } else if (suppressDeprecation && l.indexOf(MSG_DEPRECATION) != -1) { | |||||
| } else if (suppressDeprecation | |||||
| && l.indexOf(MSG_DEPRECATION) != -1) { | |||||
| log(l, Project.MSG_VERBOSE); | log(l, Project.MSG_VERBOSE); | ||||
| } else if (l.indexOf("Error:") != -1) {// error level logging for compiler errors | |||||
| } else if (l.indexOf("Error:") != -1) { | |||||
| // error level logging for compiler errors | |||||
| log(l, Project.MSG_ERR); | log(l, Project.MSG_ERR); | ||||
| } else if (l.indexOf("Warning:") != -1) {// warning for all warning messages | |||||
| } else if (l.indexOf("Warning:") != -1) { | |||||
| // warning for all warning messages | |||||
| log(l, Project.MSG_WARN); | log(l, Project.MSG_WARN); | ||||
| } else { | } else { | ||||
| log(l, Project.MSG_INFO);// info level for the rest. | |||||
| log(l, Project.MSG_INFO); // info level for the rest. | |||||
| } | } | ||||
| } | } | ||||
| if (rc > 1) { | if (rc > 1) { | ||||
| throw new BuildException("Compile failed, messages should have been provided."); | |||||
| throw new BuildException("Compile failed, messages should " | |||||
| + "have been provided."); | |||||
| } | } | ||||
| } catch (IOException ioe) { | } catch (IOException ioe) { | ||||
| throw new BuildException("Unexpected IOException while playing with Strings", | |||||
| ioe); | |||||
| throw new BuildException("Unexpected IOException while " | |||||
| + "playing with Strings", ioe); | |||||
| } finally { | } finally { | ||||
| // need to reset java.class.path property | // need to reset java.class.path property | ||||
| // since the NetRexx compiler has no option for the classpath | // since the NetRexx compiler has no option for the classpath | ||||
| @@ -902,8 +915,8 @@ public class NetRexxC extends MatchingTask { | |||||
| target.append(File.pathSeparator); | target.append(File.pathSeparator); | ||||
| target.append(f.getAbsolutePath()); | target.append(f.getAbsolutePath()); | ||||
| } else { | } else { | ||||
| log("Dropping from classpath: " + | |||||
| f.getAbsolutePath(), Project.MSG_VERBOSE); | |||||
| log("Dropping from classpath: " | |||||
| + f.getAbsolutePath(), Project.MSG_VERBOSE); | |||||
| } | } | ||||
| } | } | ||||
| @@ -98,7 +98,8 @@ import org.apache.tools.ant.types.EnumeratedAttribute; | |||||
| *The <propertyfile> task must have:<br> | *The <propertyfile> task must have:<br> | ||||
| * <ul><li>file</li></ul> | * <ul><li>file</li></ul> | ||||
| *Other parameters are:<br> | *Other parameters are:<br> | ||||
| * <ul><li>comment, key, operation, type and value (the final four being eliminated shortly)</li></ul> | |||||
| * <ul><li>comment, key, operation, type and value (the final four being | |||||
| * eliminated shortly)</li></ul> | |||||
| * | * | ||||
| *The <entry> task must have:<br> | *The <entry> task must have:<br> | ||||
| * <ul><li>key</li></ul> | * <ul><li>key</li></ul> | ||||
| @@ -253,7 +254,9 @@ public class PropertyFile extends Task { | |||||
| if (bos != null) { | if (bos != null) { | ||||
| try { | try { | ||||
| bos.close(); | bos.close(); | ||||
| } catch (IOException ioex) {} | |||||
| } catch (IOException ioex) { | |||||
| // ignore | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -506,8 +509,8 @@ public class PropertyFile extends Task { | |||||
| * fields | * fields | ||||
| */ | */ | ||||
| private void checkParameters() throws BuildException { | private void checkParameters() throws BuildException { | ||||
| if (type == Type.STRING_TYPE && | |||||
| operation == Operation.DECREMENT_OPER) { | |||||
| if (type == Type.STRING_TYPE | |||||
| && operation == Operation.DECREMENT_OPER) { | |||||
| throw new BuildException("- is not suported for string " | throw new BuildException("- is not suported for string " | ||||
| + "properties (key:" + key + ")"); | + "properties (key:" + key + ")"); | ||||
| } | } | ||||
| @@ -518,8 +521,7 @@ public class PropertyFile extends Task { | |||||
| if (key == null) { | if (key == null) { | ||||
| throw new BuildException("key is mandatory"); | throw new BuildException("key is mandatory"); | ||||
| } | } | ||||
| if (type == Type.STRING_TYPE && | |||||
| pattern != null) { | |||||
| if (type == Type.STRING_TYPE && pattern != null) { | |||||
| throw new BuildException("pattern is not suported for string " | throw new BuildException("pattern is not suported for string " | ||||
| + "properties (key:" + key + ")"); | + "properties (key:" + key + ")"); | ||||
| } | } | ||||
| @@ -631,16 +633,9 @@ public class PropertyFile extends Task { | |||||
| private static final String MONTH = "month"; | private static final String MONTH = "month"; | ||||
| private static final String YEAR = "year"; | private static final String YEAR = "year"; | ||||
| private static final String[] units = { | |||||
| MILLISECOND, | |||||
| SECOND, | |||||
| MINUTE, | |||||
| HOUR, | |||||
| DAY, | |||||
| WEEK, | |||||
| MONTH, | |||||
| YEAR | |||||
| }; | |||||
| private static final String[] UNITS | |||||
| = {MILLISECOND, SECOND, MINUTE, HOUR, | |||||
| DAY, WEEK, MONTH, YEAR }; | |||||
| private Hashtable calendarFields = new Hashtable(); | private Hashtable calendarFields = new Hashtable(); | ||||
| @@ -663,7 +658,7 @@ public class PropertyFile extends Task { | |||||
| } | } | ||||
| public String[] getValues() { | public String[] getValues() { | ||||
| return units; | |||||
| return UNITS; | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -98,7 +98,9 @@ public class RenameExtensions extends MatchingTask { | |||||
| /** | /** | ||||
| * The string that files must end in to be renamed | * The string that files must end in to be renamed | ||||
| **/ | |||||
| * | |||||
| * @param from the extension of files being renamed. | |||||
| */ | |||||
| public void setFromExtension(String from) { | public void setFromExtension(String from) { | ||||
| fromExtension = from; | fromExtension = from; | ||||
| } | } | ||||
| @@ -106,6 +108,8 @@ public class RenameExtensions extends MatchingTask { | |||||
| /** | /** | ||||
| * The string that renamed files will end with on | * The string that renamed files will end with on | ||||
| * completion | * completion | ||||
| * | |||||
| * @param to the extension of the renamed files. | |||||
| */ | */ | ||||
| public void setToExtension(String to) { | public void setToExtension(String to) { | ||||
| toExtension = to; | toExtension = to; | ||||
| @@ -114,6 +118,8 @@ public class RenameExtensions extends MatchingTask { | |||||
| /** | /** | ||||
| * store replace attribute - this determines whether the target file | * store replace attribute - this determines whether the target file | ||||
| * should be overwritten if present | * should be overwritten if present | ||||
| * | |||||
| * @param replace if true overwrite any target files that exist. | |||||
| */ | */ | ||||
| public void setReplace(boolean replace) { | public void setReplace(boolean replace) { | ||||
| this.replace = replace; | this.replace = replace; | ||||
| @@ -121,6 +127,8 @@ public class RenameExtensions extends MatchingTask { | |||||
| /** | /** | ||||
| * Set the source dir to find the files to be renamed. | * Set the source dir to find the files to be renamed. | ||||
| * | |||||
| * @param srcDir the source directory. | |||||
| */ | */ | ||||
| public void setSrcDir(File srcDir) { | public void setSrcDir(File srcDir) { | ||||
| this.srcDir = srcDir; | this.srcDir = srcDir; | ||||
| @@ -128,6 +136,8 @@ public class RenameExtensions extends MatchingTask { | |||||
| /** | /** | ||||
| * Executes the task. | * Executes the task. | ||||
| * | |||||
| * @throws BuildException is there is a problem in the task execution. | |||||
| */ | */ | ||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| @@ -220,9 +220,11 @@ public class ReplaceRegExp extends Task { | |||||
| * <li>g : Global replacement. Replace all occurences found | * <li>g : Global replacement. Replace all occurences found | ||||
| * <li>i : Case Insensitive. Do not consider case in the match | * <li>i : Case Insensitive. Do not consider case in the match | ||||
| * <li>m : Multiline. Treat the string as multiple lines of input, | * <li>m : Multiline. Treat the string as multiple lines of input, | ||||
| * using "^" and "$" as the start or end of any line, respectively, rather than start or end of string. | |||||
| * using "^" and "$" as the start or end of any line, respectively, | |||||
| * rather than start or end of string. | |||||
| * <li> s : Singleline. Treat the string as a single line of input, using | * <li> s : Singleline. Treat the string as a single line of input, using | ||||
| * "." to match any character, including a newline, which normally, it would not match. | |||||
| * "." to match any character, including a newline, which normally, | |||||
| * it would not match. | |||||
| *</ul> | *</ul> | ||||
| */ | */ | ||||
| public void setFlags(String flags) { | public void setFlags(String flags) { | ||||
| @@ -334,13 +336,11 @@ public class ReplaceRegExp extends Task { | |||||
| boolean changes = false; | boolean changes = false; | ||||
| log("Replacing pattern '" + regex.getPattern(getProject()) + | |||||
| "' with '" + subs.getExpression(getProject()) + | |||||
| "' in '" + f.getPath() + "'" + | |||||
| (byline ? " by line" : "") + | |||||
| (flags.length() > 0 ? " with flags: '" + flags + "'" : "") + | |||||
| ".", | |||||
| Project.MSG_VERBOSE); | |||||
| log("Replacing pattern '" + regex.getPattern(getProject()) | |||||
| + "' with '" + subs.getExpression(getProject()) | |||||
| + "' in '" + f.getPath() + "'" + (byline ? " by line" : "") | |||||
| + (flags.length() > 0 ? " with flags: '" + flags + "'" : "") | |||||
| + ".", Project.MSG_VERBOSE); | |||||
| if (byline) { | if (byline) { | ||||
| StringBuffer linebuf = new StringBuffer(); | StringBuffer linebuf = new StringBuffer(); | ||||
| @@ -450,6 +450,7 @@ public class ReplaceRegExp extends Task { | |||||
| r.close(); | r.close(); | ||||
| } | } | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| // ignore any secondary exceptions | |||||
| } | } | ||||
| try { | try { | ||||
| @@ -457,6 +458,7 @@ public class ReplaceRegExp extends Task { | |||||
| w.close(); | w.close(); | ||||
| } | } | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| // ignore any secondary exceptions | |||||
| } | } | ||||
| if (temp != null) { | if (temp != null) { | ||||
| temp.delete(); | temp.delete(); | ||||
| @@ -465,8 +467,12 @@ public class ReplaceRegExp extends Task { | |||||
| } | } | ||||
| public void execute() | |||||
| throws BuildException { | |||||
| /** | |||||
| * Execute the task | |||||
| * | |||||
| * @throws BuildException is there is a problem in the task execution. | |||||
| */ | |||||
| public void execute() throws BuildException { | |||||
| if (regex == null) { | if (regex == null) { | ||||
| throw new BuildException("No expression to match."); | throw new BuildException("No expression to match."); | ||||
| } | } | ||||
| @@ -516,7 +522,7 @@ public class ReplaceRegExp extends Task { | |||||
| FileSet fs = (FileSet) (filesets.elementAt(i)); | FileSet fs = (FileSet) (filesets.elementAt(i)); | ||||
| DirectoryScanner ds = fs.getDirectoryScanner(getProject()); | DirectoryScanner ds = fs.getDirectoryScanner(getProject()); | ||||
| String files[] = ds.getIncludedFiles(); | |||||
| String[] files = ds.getIncludedFiles(); | |||||
| for (int j = 0; j < files.length; j++) { | for (int j = 0; j < files.length; j++) { | ||||
| File f = new File(fs.getDir(getProject()), files[j]); | File f = new File(fs.getDir(getProject()), files[j]); | ||||
| @@ -126,6 +126,11 @@ public class Rpm extends Task { | |||||
| */ | */ | ||||
| private File error; | private File error; | ||||
| /** | |||||
| * Execute the task | |||||
| * | |||||
| * @throws BuildException is there is a problem in the task execution. | |||||
| */ | |||||
| public void execute() throws BuildException { | public void execute() throws BuildException { | ||||
| Commandline toExecute = new Commandline(); | Commandline toExecute = new Commandline(); | ||||
| @@ -161,7 +166,9 @@ public class Rpm extends Task { | |||||
| } else { | } else { | ||||
| if (output != null) { | if (output != null) { | ||||
| try { | try { | ||||
| outputstream = new PrintStream(new BufferedOutputStream(new FileOutputStream(output))); | |||||
| BufferedOutputStream bos | |||||
| = new BufferedOutputStream(new FileOutputStream(output)); | |||||
| outputstream = new PrintStream(bos); | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| throw new BuildException(e, getLocation()); | throw new BuildException(e, getLocation()); | ||||
| } | } | ||||
| @@ -170,7 +177,9 @@ public class Rpm extends Task { | |||||
| } | } | ||||
| if (error != null) { | if (error != null) { | ||||
| try { | try { | ||||
| errorstream = new PrintStream(new BufferedOutputStream(new FileOutputStream(error))); | |||||
| BufferedOutputStream bos | |||||
| = new BufferedOutputStream(new FileOutputStream(error)); | |||||
| errorstream = new PrintStream(bos); | |||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| throw new BuildException(e, getLocation()); | throw new BuildException(e, getLocation()); | ||||
| } | } | ||||
| @@ -198,12 +207,16 @@ public class Rpm extends Task { | |||||
| if (output != null) { | if (output != null) { | ||||
| try { | try { | ||||
| outputstream.close(); | outputstream.close(); | ||||
| } catch (IOException e) {} | |||||
| } catch (IOException e) { | |||||
| // ignore any secondary error | |||||
| } | |||||
| } | } | ||||
| if (error != null) { | if (error != null) { | ||||
| try { | try { | ||||
| errorstream.close(); | errorstream.close(); | ||||
| } catch (IOException e) {} | |||||
| } catch (IOException e) { | |||||
| // ignore any secondary error | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -213,6 +226,8 @@ public class Rpm extends Task { | |||||
| * subdirectories, SPECS, SOURCES, BUILD, SRPMS ; optional. | * subdirectories, SPECS, SOURCES, BUILD, SRPMS ; optional. | ||||
| * If this isn't specified, | * If this isn't specified, | ||||
| * the <tt>baseDir</tt> value is used | * the <tt>baseDir</tt> value is used | ||||
| * | |||||
| * @param td the directory containing the normal RPM directories. | |||||
| */ | */ | ||||
| public void setTopDir(File td) { | public void setTopDir(File td) { | ||||
| this.topDir = td; | this.topDir = td; | ||||
| @@ -81,8 +81,8 @@ public class Script extends Task { | |||||
| for (Enumeration e = dictionary.keys(); e.hasMoreElements();) { | for (Enumeration e = dictionary.keys(); e.hasMoreElements();) { | ||||
| String key = (String) e.nextElement(); | String key = (String) e.nextElement(); | ||||
| boolean isValid = key.length() > 0 && | |||||
| Character.isJavaIdentifierStart(key.charAt(0)); | |||||
| boolean isValid = key.length() > 0 | |||||
| && Character.isJavaIdentifierStart(key.charAt(0)); | |||||
| for (int i = 1; isValid && i < key.length(); i++) { | for (int i = 1; isValid && i < key.length(); i++) { | ||||
| isValid = Character.isJavaIdentifierPart(key.charAt(i)); | isValid = Character.isJavaIdentifierPart(key.charAt(i)); | ||||
| @@ -112,7 +112,7 @@ public class Script extends Task { | |||||
| BSFManager manager = new BSFManager (); | BSFManager manager = new BSFManager (); | ||||
| for (Enumeration e = beans.keys() ; e.hasMoreElements() ;) { | |||||
| for (Enumeration e = beans.keys(); e.hasMoreElements();) { | |||||
| String key = (String) e.nextElement(); | String key = (String) e.nextElement(); | ||||
| Object value = beans.get(key); | Object value = beans.get(key); | ||||
| manager.declareBean(key, value, value.getClass()); | manager.declareBean(key, value, value.getClass()); | ||||
| @@ -137,7 +137,7 @@ public class Script extends Task { | |||||
| /** | /** | ||||
| * Defines the language (required). | * Defines the language (required). | ||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param language the scripting language name for the script. | |||||
| */ | */ | ||||
| public void setLanguage(String language) { | public void setLanguage(String language) { | ||||
| this.language = language; | this.language = language; | ||||
| @@ -146,7 +146,7 @@ public class Script extends Task { | |||||
| /** | /** | ||||
| * Load the script from an external file ; optional. | * Load the script from an external file ; optional. | ||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param fileName the name of the file containing the script source. | |||||
| */ | */ | ||||
| public void setSrc(String fileName) { | public void setSrc(String fileName) { | ||||
| File file = new File(fileName); | File file = new File(fileName); | ||||
| @@ -155,7 +155,7 @@ public class Script extends Task { | |||||
| } | } | ||||
| int count = (int) file.length(); | int count = (int) file.length(); | ||||
| byte data[] = new byte[count]; | |||||
| byte[] data = new byte[count]; | |||||
| try { | try { | ||||
| FileInputStream inStream = new FileInputStream(file); | FileInputStream inStream = new FileInputStream(file); | ||||
| @@ -169,9 +169,9 @@ public class Script extends Task { | |||||
| } | } | ||||
| /** | /** | ||||
| * The script text. | |||||
| * Set the script text. | |||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param text a component of the script text to be added. | |||||
| */ | */ | ||||
| public void addText(String text) { | public void addText(String text) { | ||||
| this.script += text; | this.script += text; | ||||
| @@ -70,8 +70,7 @@ import org.apache.tools.ant.taskdefs.Java; | |||||
| * @author <a href="mailto:marcus.boerger@post.rwth-aachen.de">Marcus | * @author <a href="mailto:marcus.boerger@post.rwth-aachen.de">Marcus | ||||
| * Börger</a> | * Börger</a> | ||||
| */ | */ | ||||
| public class StyleBook | |||||
| extends Java { | |||||
| public class StyleBook extends Java { | |||||
| protected File m_targetDirectory; | protected File m_targetDirectory; | ||||
| protected File m_skinDirectory; | protected File m_skinDirectory; | ||||
| protected String m_loaderConfig; | protected String m_loaderConfig; | ||||
| @@ -209,8 +209,8 @@ public class TraXLiaison implements XSLTLiaison, ErrorListener, XSLTLoggerAware | |||||
| reader.setEntityResolver(entityResolver); | reader.setEntityResolver(entityResolver); | ||||
| src = new SAXSource(reader, new InputSource(is)); | src = new SAXSource(reader, new InputSource(is)); | ||||
| } else { | } else { | ||||
| throw new IllegalStateException("xcatalog specified, but " + | |||||
| "parser doesn't support SAX"); | |||||
| throw new IllegalStateException("xcatalog specified, but " | |||||
| + "parser doesn't support SAX"); | |||||
| } | } | ||||
| } else { | } else { | ||||
| src = new StreamSource(is); | src = new StreamSource(is); | ||||
| @@ -305,8 +305,8 @@ public class TraXLiaison implements XSLTLiaison, ErrorListener, XSLTLoggerAware | |||||
| // specific attributes for the transformer | // specific attributes for the transformer | ||||
| for (int i = 0; i < attributes.size(); i++) { | for (int i = 0; i < attributes.size(); i++) { | ||||
| final Object[] pair = (Object[])attributes.elementAt(i); | |||||
| tfactory.setAttribute((String)pair[0], pair[1]); | |||||
| final Object[] pair = (Object[]) attributes.elementAt(i); | |||||
| tfactory.setAttribute((String) pair[0], pair[1]); | |||||
| } | } | ||||
| if (uriResolver != null) { | if (uriResolver != null) { | ||||
| @@ -87,8 +87,10 @@ import org.xml.sax.helpers.ParserAdapter; | |||||
| * Checks XML files are valid (or only well formed). The | * Checks XML files are valid (or only well formed). The | ||||
| * task uses the SAX2 parser implementation provided by JAXP by default | * task uses the SAX2 parser implementation provided by JAXP by default | ||||
| * (probably the one that is used by Ant itself), but one can specify any | * (probably the one that is used by Ant itself), but one can specify any | ||||
| * SAX1/2 parser if needed | |||||
| * @author Raphael Pierquin <a href="mailto:raphael.pierquin@agisphere.com">raphael.pierquin@agisphere.com</a> | |||||
| * SAX1/2 parser if needed. | |||||
| * | |||||
| * @author Raphael Pierquin <a href="mailto:raphael.pierquin@agisphere.com"> | |||||
| * raphael.pierquin@agisphere.com</a> | |||||
| * @author Nick Pellow <a href="mailto:nick@svana.org">nick@svana.org</a> | * @author Nick Pellow <a href="mailto:nick@svana.org">nick@svana.org</a> | ||||
| */ | */ | ||||
| public class XMLValidateTask extends Task { | public class XMLValidateTask extends Task { | ||||
| @@ -98,7 +100,7 @@ public class XMLValidateTask extends Task { | |||||
| */ | */ | ||||
| private static FileUtils fu = FileUtils.newFileUtils(); | private static FileUtils fu = FileUtils.newFileUtils(); | ||||
| protected static String INIT_FAILED_MSG = | |||||
| protected static final String INIT_FAILED_MSG = | |||||
| "Could not start xml validation: "; | "Could not start xml validation: "; | ||||
| // ant task properties | // ant task properties | ||||
| @@ -108,8 +110,10 @@ public class XMLValidateTask extends Task { | |||||
| protected boolean lenient = false; | protected boolean lenient = false; | ||||
| protected String readerClassName = null; | protected String readerClassName = null; | ||||
| protected File file = null; // file to be validated | |||||
| protected Vector filesets = new Vector(); // sets of file to be validated | |||||
| /** file to be validated */ | |||||
| protected File file = null; | |||||
| /** sets of file to be validated */ | |||||
| protected Vector filesets = new Vector(); | |||||
| protected Path classpath; | protected Path classpath; | ||||
| @@ -137,7 +141,6 @@ public class XMLValidateTask extends Task { | |||||
| * parser yields an error. | * parser yields an error. | ||||
| */ | */ | ||||
| public void setFailOnError(boolean fail) { | public void setFailOnError(boolean fail) { | ||||
| failOnError = fail; | failOnError = fail; | ||||
| } | } | ||||
| @@ -147,35 +150,35 @@ public class XMLValidateTask extends Task { | |||||
| * If set to <code>true</true> (default), log a warn message for each SAX warn event. | * If set to <code>true</true> (default), log a warn message for each SAX warn event. | ||||
| */ | */ | ||||
| public void setWarn(boolean bool) { | public void setWarn(boolean bool) { | ||||
| warn = bool; | warn = bool; | ||||
| } | } | ||||
| /** | /** | ||||
| * Specify whether the parser should be validating. Default is <code>true</code>. | |||||
| * Specify whether the parser should be validating. Default | |||||
| * is <code>true</code>. | |||||
| * <p> | * <p> | ||||
| * If set to false, the validation will fail only if the parsed document is not well formed XML. | |||||
| * If set to false, the validation will fail only if the parsed document | |||||
| * is not well formed XML. | |||||
| * <p> | * <p> | ||||
| * this option is ignored if the specified class with {@link #setClassName(String)} is not a SAX2 | |||||
| * XMLReader. | |||||
| * this option is ignored if the specified class | |||||
| * with {@link #setClassName(String)} is not a SAX2 XMLReader. | |||||
| */ | */ | ||||
| public void setLenient(boolean bool) { | public void setLenient(boolean bool) { | ||||
| lenient = bool; | lenient = bool; | ||||
| } | } | ||||
| /** | /** | ||||
| * Specify the class name of the SAX parser to be used. (optional) | * Specify the class name of the SAX parser to be used. (optional) | ||||
| * @param className should be an implementation of SAX2 <code>org.xml.sax.XMLReader</code> | |||||
| * or SAX2 <code>org.xml.sax.Parser</code>. | |||||
| * <p> if className is an implementation of <code>org.xml.sax.Parser</code>, {@link #setLenient(boolean)}, | |||||
| * @param className should be an implementation of SAX2 | |||||
| * <code>org.xml.sax.XMLReader</code> or SAX2 <code>org.xml.sax.Parser</code>. | |||||
| * <p> if className is an implementation of | |||||
| * <code>org.xml.sax.Parser</code>, {@link #setLenient(boolean)}, | |||||
| * will be ignored. | * will be ignored. | ||||
| * <p> if not set, the default will be used. | * <p> if not set, the default will be used. | ||||
| * @see org.xml.sax.XMLReader | * @see org.xml.sax.XMLReader | ||||
| * @see org.xml.sax.Parser | * @see org.xml.sax.Parser | ||||
| */ | */ | ||||
| public void setClassName(String className) { | public void setClassName(String className) { | ||||
| readerClassName = className; | readerClassName = className; | ||||
| } | } | ||||
| @@ -184,7 +187,6 @@ public class XMLValidateTask extends Task { | |||||
| * Specify the classpath to be searched to load the parser (optional) | * Specify the classpath to be searched to load the parser (optional) | ||||
| */ | */ | ||||
| public void setClasspath(Path classpath) { | public void setClasspath(Path classpath) { | ||||
| if (this.classpath == null) { | if (this.classpath == null) { | ||||
| this.classpath = classpath; | this.classpath = classpath; | ||||
| } else { | } else { | ||||
| @@ -268,7 +270,8 @@ public class XMLValidateTask extends Task { | |||||
| int fileProcessed = 0; | int fileProcessed = 0; | ||||
| if (file == null && (filesets.size() == 0)) { | if (file == null && (filesets.size() == 0)) { | ||||
| throw new BuildException("Specify at least one source - a file or a fileset."); | |||||
| throw new BuildException("Specify at least one source - " | |||||
| + "a file or a fileset."); | |||||
| } | } | ||||
| initValidator(); | initValidator(); | ||||
| @@ -293,7 +296,7 @@ public class XMLValidateTask extends Task { | |||||
| DirectoryScanner ds = fs.getDirectoryScanner(getProject()); | DirectoryScanner ds = fs.getDirectoryScanner(getProject()); | ||||
| String[] files = ds.getIncludedFiles(); | String[] files = ds.getIncludedFiles(); | ||||
| for (int j = 0; j < files.length ; j++) { | |||||
| for (int j = 0; j < files.length; j++) { | |||||
| File srcFile = new File(fs.getDir(getProject()), files[j]); | File srcFile = new File(fs.getDir(getProject()), files[j]); | ||||
| doValidate(srcFile); | doValidate(srcFile); | ||||
| fileProcessed++; | fileProcessed++; | ||||
| @@ -352,8 +355,8 @@ public class XMLValidateTask extends Task { | |||||
| Project.MSG_VERBOSE); | Project.MSG_VERBOSE); | ||||
| } else { | } else { | ||||
| throw new BuildException(INIT_FAILED_MSG | throw new BuildException(INIT_FAILED_MSG | ||||
| + reader.getClass().getName() | |||||
| + " implements nor SAX1 Parser nor SAX2 XMLReader."); | |||||
| + reader.getClass().getName() | |||||
| + " implements nor SAX1 Parser nor SAX2 XMLReader."); | |||||
| } | } | ||||
| } | } | ||||
| @@ -420,7 +423,8 @@ public class XMLValidateTask extends Task { | |||||
| if (errorHandler.getFailure()) { | if (errorHandler.getFailure()) { | ||||
| if (failOnError) { | if (failOnError) { | ||||
| throw new BuildException(afile + " is not a valid XML document."); | |||||
| throw new BuildException(afile | |||||
| + " is not a valid XML document."); | |||||
| } else { | } else { | ||||
| log(afile + " is not a valid XML document", Project.MSG_ERR); | log(afile + " is not a valid XML document", Project.MSG_ERR); | ||||
| } | } | ||||
| @@ -480,11 +484,12 @@ public class XMLValidateTask extends Task { | |||||
| try { | try { | ||||
| int line = e.getLineNumber(); | int line = e.getLineNumber(); | ||||
| int col = e.getColumnNumber(); | int col = e.getColumnNumber(); | ||||
| return new URL(sysID).getFile() + | |||||
| (line == -1 ? "" : (":" + line + | |||||
| (col == -1 ? "" : (":" + col)))) + | |||||
| ": " + e.getMessage(); | |||||
| return new URL(sysID).getFile() | |||||
| + (line == -1 ? "" : (":" + line | |||||
| + (col == -1 ? "" : (":" + col)))) | |||||
| + ": " + e.getMessage(); | |||||
| } catch (MalformedURLException mfue) { | } catch (MalformedURLException mfue) { | ||||
| // ignore and just return exception message | |||||
| } | } | ||||
| } | } | ||||
| return e.getMessage(); | return e.getMessage(); | ||||
| @@ -499,7 +504,7 @@ public class XMLValidateTask extends Task { | |||||
| public class Attribute { | public class Attribute { | ||||
| /** The name of the attribute to set. | /** The name of the attribute to set. | ||||
| * | * | ||||
| * Valid attributes <a href=http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description">include.</a> | |||||
| * Valid attributes <a href="http://www.saxproject.org/apidoc/org/xml/sax/package-summary.html#package_description">include.</a> | |||||
| */ | */ | ||||
| private String attributeName = null; | private String attributeName = null; | ||||
| @@ -108,17 +108,23 @@ public class XalanLiaison implements XSLTLiaison { | |||||
| if (xslStream != null) { | if (xslStream != null) { | ||||
| xslStream.close(); | xslStream.close(); | ||||
| } | } | ||||
| } catch (IOException ignored) {} | |||||
| } catch (IOException ignored) { | |||||
| //ignore | |||||
| } | |||||
| try { | try { | ||||
| if (fis != null) { | if (fis != null) { | ||||
| fis.close(); | fis.close(); | ||||
| } | } | ||||
| } catch (IOException ignored) {} | |||||
| } catch (IOException ignored) { | |||||
| //ignore | |||||
| } | |||||
| try { | try { | ||||
| if (fos != null) { | if (fos != null) { | ||||
| fos.close(); | fos.close(); | ||||
| } | } | ||||
| } catch (IOException ignored) {} | |||||
| } catch (IOException ignored) { | |||||
| //ignore | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -72,6 +72,8 @@ import org.apache.tools.ant.BuildException; | |||||
| * to a script. | * to a script. | ||||
| * The script is meant to use get self.token and | * The script is meant to use get self.token and | ||||
| * set self.token in the reply. | * set self.token in the reply. | ||||
| * | |||||
| * @author Not Specified. | |||||
| */ | */ | ||||
| public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | ||||
| /** The language - attribute of element */ | /** The language - attribute of element */ | ||||
| @@ -90,7 +92,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| /** | /** | ||||
| * Defines the language (required). | * Defines the language (required). | ||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param language the scripting language name for the script. | |||||
| */ | */ | ||||
| public void setLanguage(String language) { | public void setLanguage(String language) { | ||||
| this.language = language; | this.language = language; | ||||
| @@ -105,8 +107,8 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| for (Enumeration e = dictionary.keys(); e.hasMoreElements();) { | for (Enumeration e = dictionary.keys(); e.hasMoreElements();) { | ||||
| String key = (String) e.nextElement(); | String key = (String) e.nextElement(); | ||||
| boolean isValid = key.length() > 0 && | |||||
| Character.isJavaIdentifierStart(key.charAt(0)); | |||||
| boolean isValid = key.length() > 0 | |||||
| && Character.isJavaIdentifierStart(key.charAt(0)); | |||||
| for (int i = 1; isValid && i < key.length(); i++) { | for (int i = 1; isValid && i < key.length(); i++) { | ||||
| isValid = Character.isJavaIdentifierPart(key.charAt(i)); | isValid = Character.isJavaIdentifierPart(key.charAt(i)); | ||||
| @@ -116,8 +118,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| if (isValid) { | if (isValid) { | ||||
| beans.put(key, dictionary.get(key)); | beans.put(key, dictionary.get(key)); | ||||
| } | } | ||||
| } | |||||
| catch (Throwable t) { | |||||
| } catch (Throwable t) { | |||||
| throw new BuildException(t); | throw new BuildException(t); | ||||
| //System.err.println("What the helll"); | //System.err.println("What the helll"); | ||||
| } | } | ||||
| @@ -203,8 +204,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| try { | try { | ||||
| manager.exec(language, "<ANT>", 0, 0, script); | manager.exec(language, "<ANT>", 0, 0, script); | ||||
| return getToken(); | return getToken(); | ||||
| } | |||||
| catch (BSFException be) { | |||||
| } catch (BSFException be) { | |||||
| Throwable t = be; | Throwable t = be; | ||||
| Throwable te = be.getTargetException(); | Throwable te = be.getTargetException(); | ||||
| if (te != null) { | if (te != null) { | ||||
| @@ -220,7 +220,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| /** | /** | ||||
| * Load the script from an external file ; optional. | * Load the script from an external file ; optional. | ||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param fileName the name of the file containing the script source. | |||||
| */ | */ | ||||
| public void setSrc(String fileName) { | public void setSrc(String fileName) { | ||||
| File file = new File(fileName); | File file = new File(fileName); | ||||
| @@ -229,7 +229,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| } | } | ||||
| int count = (int) file.length(); | int count = (int) file.length(); | ||||
| byte data[] = new byte[count]; | |||||
| byte[] data = new byte[count]; | |||||
| try { | try { | ||||
| FileInputStream inStream = new FileInputStream(file); | FileInputStream inStream = new FileInputStream(file); | ||||
| @@ -245,7 +245,7 @@ public class ScriptFilter extends TokenFilter.ChainableReaderFilter { | |||||
| /** | /** | ||||
| * The script text. | * The script text. | ||||
| * | * | ||||
| * @param msg Sets the value for the script variable. | |||||
| * @param text a component of the script text to be added. | |||||
| */ | */ | ||||
| public void addText(String text) { | public void addText(String text) { | ||||
| this.script += text; | this.script += text; | ||||
| @@ -61,6 +61,8 @@ import java.lang.ref.WeakReference; | |||||
| /** | /** | ||||
| * This is a reference that really is is Weak, as it uses the | * This is a reference that really is is Weak, as it uses the | ||||
| * appropriate java.lang.ref class. | * appropriate java.lang.ref class. | ||||
| * | |||||
| * @author Not Specified. | |||||
| */ | */ | ||||
| public class WeakishReference12 extends WeakishReference { | public class WeakishReference12 extends WeakishReference { | ||||
| @@ -78,6 +80,8 @@ public class WeakishReference12 extends WeakishReference { | |||||
| /** | /** | ||||
| * Returns this reference object's referent. | * Returns this reference object's referent. | ||||
| * | |||||
| * @return referent. | |||||
| */ | */ | ||||
| public Object get() { | public Object get() { | ||||
| return weakref.get(); | return weakref.get(); | ||||