git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274441 13f79535-47bb-0310-9956-ffa450edef68master
@@ -1,20 +1,20 @@ | |||
<project default="checkstyle" name="CheckAnt"> | |||
<property name="java.dir" value="src/main"/> | |||
<property name="tocheck" value="**/*.java"/> | |||
<property name="tocheck" value="**/*.java"/> | |||
<property name="javadoc.scope" value="public"/> | |||
<target name="checkstyle"> | |||
<taskdef name="checkstyle" | |||
classname="com.puppycrawl.tools.checkstyle.CheckStyleTask"/> | |||
<checkstyle> | |||
<property key="checkstyle.header.file" file="src/etc/RequiredHeader.txt"/> | |||
<property key="checkstyle.header.ignoreline" value="4"/> | |||
<property key="checkstyle.javadoc.scope" value="${javadoc.scope}"/> | |||
<checkstyle headerFile="src/etc/RequiredHeader.txt" | |||
headerIgnoreLine="4" | |||
allowProtected="true" | |||
javadocScope="${javadoc.scope}"> | |||
<fileset dir="${java.dir}"> | |||
<include name="${tocheck}"/> | |||
</fileset> | |||
</checkstyle> | |||
</target> | |||
</project> | |||
@@ -436,8 +436,7 @@ public class IntrospectionHelper implements BuildListener { | |||
DynamicConfigurator dc = (DynamicConfigurator) element; | |||
dc.setDynamicAttribute(attributeName, value); | |||
return; | |||
} | |||
else { | |||
} else { | |||
String msg = getElementName(p, element) + | |||
" doesn't support the \"" + attributeName + | |||
"\" attribute."; | |||
@@ -903,8 +903,7 @@ public class Project { | |||
&& oldLoader instanceof AntClassLoader | |||
&& newLoader instanceof AntClassLoader | |||
&& ((AntClassLoader) oldLoader).getClasspath() | |||
.equals(((AntClassLoader) newLoader).getClasspath()) | |||
) { | |||
.equals(((AntClassLoader) newLoader).getClasspath())) { | |||
// same classname loaded from the same | |||
// classpath components | |||
logLevel = MSG_VERBOSE; | |||
@@ -2071,7 +2070,7 @@ public class Project { | |||
int priority) { | |||
event.setMessage(message, priority); | |||
Vector listeners = getBuildListeners(); | |||
synchronized(this) { | |||
synchronized (this) { | |||
if (loggingMessage) { | |||
throw new BuildException("Listener attempted to access " | |||
+ (priority == MSG_ERR ? "System.err" : "System.out") | |||
@@ -2171,7 +2170,7 @@ public class Project { | |||
// Should move to a separate public class - and have API to add | |||
// listeners, etc. | |||
private static class AntRefTable extends Hashtable { | |||
Project project; | |||
private Project project; | |||
public AntRefTable(Project project) { | |||
super(); | |||
this.project = project; | |||
@@ -2212,9 +2211,9 @@ public class Project { | |||
} | |||
private static class AntTaskTable extends LazyHashtable { | |||
Project project; | |||
Properties props; | |||
boolean tasks = false; | |||
private Project project; | |||
private Properties props; | |||
private boolean tasks = false; | |||
public AntTaskTable(Project p, boolean tasks) { | |||
this.project = p; | |||
@@ -2226,46 +2225,57 @@ public class Project { | |||
} | |||
protected void initAll() { | |||
if (initAllDone ) return; | |||
if (initAllDone) { | |||
return; | |||
} | |||
project.log("InitAll", Project.MSG_DEBUG); | |||
if (props==null ) return; | |||
if (props == null) { | |||
return; | |||
} | |||
Enumeration enum = props.propertyNames(); | |||
while (enum.hasMoreElements()) { | |||
String key = (String) enum.nextElement(); | |||
Class taskClass=getTask( key ); | |||
if (taskClass!=null ) { | |||
Class taskClass = getTask(key); | |||
if (taskClass != null) { | |||
// This will call a get() and a put() | |||
if (tasks ) | |||
if (tasks) { | |||
project.addTaskDefinition(key, taskClass); | |||
else | |||
project.addDataTypeDefinition(key, taskClass ); | |||
} else { | |||
project.addDataTypeDefinition(key, taskClass); | |||
} | |||
} | |||
} | |||
initAllDone=true; | |||
initAllDone = true; | |||
} | |||
protected Class getTask(String key) { | |||
if (props==null ) return null; // for tasks loaded before init() | |||
String value=props.getProperty(key); | |||
if (value==null) { | |||
//project.log( "No class name for " + key, Project.MSG_VERBOSE ); | |||
if (props == null) { | |||
return null; // for tasks loaded before init() | |||
} | |||
String value = props.getProperty(key); | |||
if (value == null) { | |||
//project.log( "No class name for " + key, Project.MSG_VERBOSE); | |||
return null; | |||
} | |||
try { | |||
Class taskClass=null; | |||
Class taskClass = null; | |||
if (project.getCoreLoader() != null && | |||
!("only".equals(project.getProperty("build.sysclasspath")))) { | |||
try { | |||
taskClass=project.getCoreLoader().loadClass(value); | |||
if (taskClass != null ) return taskClass; | |||
} catch( Exception ex ) { | |||
taskClass = project.getCoreLoader().loadClass(value); | |||
if (taskClass != null) { | |||
return taskClass; | |||
} | |||
} catch (Exception ex) { | |||
// ignore | |||
} | |||
} | |||
taskClass = Class.forName(value); | |||
return taskClass; | |||
} catch (NoClassDefFoundError ncdfe) { | |||
project.log("Could not load a dependent class (" | |||
+ ncdfe.getMessage() + ") for task " + key, Project.MSG_DEBUG); | |||
+ ncdfe.getMessage() + ") for task " | |||
+ key, Project.MSG_DEBUG); | |||
} catch (ClassNotFoundException cnfe) { | |||
project.log("Could not load class (" + value | |||
+ ") for task " + key, Project.MSG_DEBUG); | |||
@@ -2274,20 +2284,25 @@ public class Project { | |||
} | |||
// Hashtable implementation | |||
public Object get( Object key ) { | |||
Object orig=super.get( key ); | |||
if (orig!= null ) return orig; | |||
if (! (key instanceof String) ) return null; | |||
project.log("Get task " + key, Project.MSG_DEBUG ); | |||
Object taskClass=getTask( (String) key); | |||
if (taskClass != null) | |||
super.put( key, taskClass ); | |||
public Object get(Object key) { | |||
Object orig = super.get(key); | |||
if (orig != null) { | |||
return orig; | |||
} | |||
if (!(key instanceof String)) { | |||
return null; | |||
} | |||
project.log("Get task " + key, Project.MSG_DEBUG); | |||
Object taskClass = getTask((String) key); | |||
if (taskClass != null) { | |||
super.put(key, taskClass); | |||
} | |||
return taskClass; | |||
} | |||
public boolean containsKey(Object key) { | |||
return get(key) != null; | |||
} | |||
} | |||
} |
@@ -133,6 +133,12 @@ public class RuntimeConfigurable implements Serializable { | |||
proxyConfigured = false; | |||
} | |||
/** | |||
* Get the object for which this RuntimeConfigurable holds the configuration | |||
* information | |||
* | |||
* @return the object whose configure is held by this instance. | |||
*/ | |||
public Object getProxy() { | |||
return wrappedObject; | |||
} | |||
@@ -151,6 +157,12 @@ public class RuntimeConfigurable implements Serializable { | |||
} | |||
} | |||
/** | |||
* Set an attribute to a given value | |||
* | |||
* @param name the name of the attribute. | |||
* @param value the attribute's value. | |||
*/ | |||
public void setAttribute(String name, String value) { | |||
attributeNames.addElement(name); | |||
attributeMap.put(name, value); | |||
@@ -357,6 +369,8 @@ public class RuntimeConfigurable implements Serializable { | |||
/** | |||
* Reconfigure the element, even if it has already been configured. | |||
* | |||
* @param p the project instance for this configuration. | |||
*/ | |||
public void reconfigure(Project p) { | |||
proxyConfigured = false; | |||
@@ -143,7 +143,8 @@ public abstract class BaseFilterReader | |||
* @exception IllegalArgumentException If <code>n</code> is negative. | |||
* @exception IOException If an I/O error occurs | |||
*/ | |||
public final long skip(final long n) throws IOException { | |||
public final long skip(final long n) | |||
throws IOException, IllegalArgumentException { | |||
if (n < 0L) { | |||
throw new IllegalArgumentException("skip value is negative"); | |||
} | |||
@@ -66,8 +66,9 @@ import org.apache.tools.ant.types.Parameter; | |||
* | |||
* Or: | |||
* | |||
* <pre><filterreader classname="org.apache.tools.ant.filters.EscapeUnicode"/> | |||
* </pre> | |||
* <pre><filterreader | |||
classname="org.apache.tools.ant.filters.EscapeUnicode"/> | |||
* </pre> | |||
* | |||
* @author <a href="mailto:levylambert@tiscali-dsl.de">Antoine Levy-Lambert</a> | |||
* @since Ant 1.6 | |||
@@ -107,7 +108,7 @@ public class EscapeUnicode | |||
* @return the next character in the resulting stream, or -1 | |||
* if the end of the resulting stream has been reached | |||
* | |||
* @exception java.io.IOException if the underlying stream throws | |||
* @exception IOException if the underlying stream throws | |||
* an IOException during reading | |||
*/ | |||
public final int read() throws IOException { | |||
@@ -116,7 +117,7 @@ public class EscapeUnicode | |||
setInitialized(true); | |||
} | |||
int ch= - 1; | |||
int ch = -1; | |||
if (unicodeBuf.length() == 0) { | |||
ch = in.read(); | |||
if (ch != -1) { | |||
@@ -130,7 +131,7 @@ public class EscapeUnicode | |||
- s.length() + i, | |||
s.charAt(i)); | |||
} | |||
ch='\\'; | |||
ch = '\\'; | |||
} | |||
} | |||
} else { | |||
@@ -73,7 +73,8 @@ import org.apache.tools.ant.types.Parameter; | |||
* | |||
* Or: | |||
* | |||
* <pre><filterreader classname="org.apache.tools.ant.filters.StripLineComments"> | |||
* <pre><filterreader | |||
* classname="org.apache.tools.ant.filters.StripLineComments"> | |||
* <param type="comment" value="#"/> | |||
* <param type="comment" value="--"/> | |||
* <param type="comment" value="REM "/> | |||
@@ -161,7 +161,8 @@ public final class ChainReaderHelper { | |||
Object o = finalFilters.elementAt(i); | |||
if (o instanceof AntFilterReader) { | |||
final AntFilterReader filter = (AntFilterReader) finalFilters.elementAt(i); | |||
final AntFilterReader filter | |||
= (AntFilterReader) finalFilters.elementAt(i); | |||
final String className = filter.getClassName(); | |||
final Path classpath = filter.getClasspath(); | |||
final Project project = filter.getProject(); | |||
@@ -135,7 +135,8 @@ public class ProjectHelperImpl extends ProjectHelper { | |||
*/ | |||
public void parse(Project project, Object source) throws BuildException { | |||
if (!(source instanceof File)) { | |||
throw new BuildException("Only File source supported by default plugin"); | |||
throw new BuildException("Only File source supported by " | |||
+ "default plugin"); | |||
} | |||
File buildFile = (File) source; | |||
FileInputStream inputStream = null; | |||
@@ -92,19 +92,19 @@ public class Parallel extends Task | |||
private final Object semaphore = new Object(); | |||
/** Total number of threads to run */ | |||
int numThreads = 0; | |||
private int numThreads = 0; | |||
/** Total number of threads per processor to run. */ | |||
int numThreadsPerProcessor = 0; | |||
private int numThreadsPerProcessor = 0; | |||
/** Interval (in ms) to poll for finished threads. */ | |||
int pollInterval = 1000; // default is once a second | |||
private int pollInterval = 1000; // default is once a second | |||
/** | |||
* Add a nested task to execute in parallel. | |||
* @param nestedTask Nested task to be executed in parallel | |||
*/ | |||
public void addTask(Task nestedTask) throws BuildException { | |||
public void addTask(Task nestedTask) { | |||
nestedTasks.addElement(nestedTask); | |||
} | |||
@@ -128,7 +128,8 @@ public class Parallel extends Task | |||
* simultaneously. If there are less tasks than threads then all will be | |||
* executed at once, if there are more then only <code>threadCount</code> | |||
* tasks will be executed at one time. If <code>threadsPerProcessor</code> | |||
* is set and the JVM is at least a 1.4 VM then this value is ignormed.; optional | |||
* is set and the JVM is at least a 1.4 VM then this value is | |||
* ignored.; optional | |||
* | |||
* @param numThreads total number of therads. | |||
* | |||
@@ -147,6 +148,11 @@ public class Parallel extends Task | |||
this.pollInterval = pollInterval; | |||
} | |||
/** | |||
* Execute the parallel tasks | |||
* | |||
* @exception BuildException if any of the threads failed. | |||
*/ | |||
public void execute() throws BuildException { | |||
updateThreadCounts(); | |||
if (numThreads == 0) { | |||
@@ -155,6 +161,9 @@ public class Parallel extends Task | |||
spinThreads(); | |||
} | |||
/** | |||
* Determine the number of threads based on the number of processors | |||
*/ | |||
private void updateThreadCounts() { | |||
if (numThreadsPerProcessor != 0) { | |||
int numProcessors = getNumProcessors(); | |||
@@ -165,7 +174,9 @@ public class Parallel extends Task | |||
} | |||
/** | |||
* Spin up threadCount threads. | |||
* Spin up required threads with a maximum number active at any given time. | |||
* | |||
* @exception BuildException if any of the threads failed. | |||
*/ | |||
private void spinThreads() throws BuildException { | |||
final int numTasks = nestedTasks.size(); | |||
@@ -189,12 +200,13 @@ public class Parallel extends Task | |||
// now run them in limited numbers... | |||
outer: | |||
while (threadNumber < numTasks) { | |||
synchronized(semaphore) { | |||
synchronized (semaphore) { | |||
for (int i = 0; i < maxRunning; i++) { | |||
if (running[i] == null || !running[i].isAlive()) { | |||
running[i] = threads[threadNumber++]; | |||
running[i].start(); | |||
// countinue on outer while loop in case we used our last thread | |||
// countinue on outer while loop in case we | |||
// used our last thread | |||
continue outer; | |||
} | |||
} | |||
@@ -252,7 +264,12 @@ public class Parallel extends Task | |||
firstLocation); | |||
} | |||
} | |||
/** | |||
* Determine the number of processors. Only effective on later VMs | |||
* | |||
* @return the number of processors available or 0 if not determinable. | |||
*/ | |||
private int getNumProcessors() { | |||
try { | |||
Class[] paramTypes = {}; | |||