mbenson 2004/08/31 15:32:53
Modified: . WHATSNEW
src/main/org/apache/tools/ant Project.java
docs/manual running.html
src/main/org/apache/tools/ant/taskdefs Ant.java
Added: src/main/org/apache/tools/ant Executor.java
src/main/org/apache/tools/ant/helper DefaultExecutor.java
KeepGoingExecutor.java SingleCheckExecutor.java
Log:
Refactored Target invocation into org.apache.tools.ant.Executor
implementations.
PR: 21421, 29248
Revision Changes Path
1.656 +3 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.655
retrieving revision 1.656
diff -u -r1.655 -r1.656
--- WHATSNEW 31 Aug 2004 22:24:39 -0000 1.655
+++ WHATSNEW 31 Aug 2004 22:32:51 -0000 1.656
@@ -44,6 +44,9 @@
Compilers can be selected using the compiler attribute, which defaults
to "microsoft" on windows, and "mono" on everything else.
+* Refactored Target invocation into org.apache.tools.ant.Executor
+ implementations. Bugzilla Reports 21421, 29248.
+
Changes from Ant 1.6.2 to current Ant 1.6 CVS version
=====================================================
1.173 +37 -12 ant/src/main/org/apache/tools/ant/Project.java
Index: Project.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/Project.java,v
retrieving revision 1.172
retrieving revision 1.173
diff -u -r1.172 -r1.173
--- Project.java 23 Jul 2004 20:16:29 -0000 1.172
+++ Project.java 31 Aug 2004 22:32:52 -0000 1.173
@@ -33,6 +33,8 @@
import java.util.HashSet;
import org.apache.tools.ant.input.DefaultInputHandler;
import org.apache.tools.ant.input.InputHandler;
+import org.apache.tools.ant.helper.DefaultExecutor;
+import org.apache.tools.ant.helper.KeepGoingExecutor;
import org.apache.tools.ant.types.FilterSet;
import org.apache.tools.ant.types.FilterSetCollection;
import org.apache.tools.ant.types.Description;
@@ -764,7 +766,9 @@
/**
* Sets "keep-going" mode. In this mode ANT will try to execute
* as many targets as possible. All targets that do not depend
- * on failed target(s) will be executed.
+ * on failed target(s) will be executed. If the keepGoing settor/getter
+ * methods are used in conjunction with the
<code>ant.executor.class</code>
+ * property, they will have no effect.
* @param keepGoingMode "keep-going" mode
* @since Ant 1.6
*/
@@ -773,7 +777,9 @@
}
/**
- * Returns the keep-going mode.
+ * Returns the keep-going mode. If the keepGoing settor/getter
+ * methods are used in conjunction with the
<code>ant.executor.class</code>
+ * property, they will have no effect.
* @return "keep-going" mode
* @since Ant 1.6
*/
@@ -1054,19 +1060,38 @@
*/
public void executeTargets(Vector targetNames) throws BuildException {
- BuildException thrownException = null;
- for (int i = 0; i < targetNames.size(); i++) {
+ Object o = getReference("ant.executor");
+ if (o == null) {
+ String classname = getProperty("ant.executor.class");
+ if (classname == null) {
+ classname = (keepGoingMode)
+ ? KeepGoingExecutor.class.getName()
+ : DefaultExecutor.class.getName();
+ }
+ log("Attempting to create object of type " + classname,
MSG_DEBUG);
try {
- executeTarget((String) targetNames.elementAt(i));
- } catch (BuildException ex) {
- if (!(keepGoingMode)) {
- throw ex; // Throw further
+ o = Class.forName(classname, true, coreLoader).newInstance();
+ } catch (ClassNotFoundException seaEnEfEx) {
+ //try the current classloader
+ try {
+ o = Class.forName(classname).newInstance();
+ } catch (Exception ex) {
+ log(ex.toString(), MSG_ERR);
}
- thrownException = ex;
+ } catch (Exception ex) {
+ log(ex.toString(), MSG_ERR);
+ }
+ if (o != null) {
+ addReference("ant.executor", o);
}
}
- if (thrownException != null) {
- throw thrownException;
+
+ if (o == null) {
+ throw new BuildException("Unable to obtain a Target Executor
instance.");
+ } else {
+ String[] targetNameArray = (String[])(targetNames.toArray(
+ new String[targetNames.size()]));
+ ((Executor)o).executeTargets(this, targetNameArray);
}
}
1.1 ant/src/main/org/apache/tools/ant/Executor.java
Index: Executor.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant;
/**
* Target executor abstraction.
* @since Ant 1.6.3
*/
public interface Executor {
/**
* Execute the specified Targets for the specified Project.
* @param project the Ant Project.
* @param targetNames String[] of Target names.
* @throws BuildException.
*/
void executeTargets(Project project, String[] targetNames)
throws BuildException;
}
1.27 +8 -1 ant/docs/manual/running.html
Index: running.html
===================================================================
RCS file: /home/cvs/ant/docs/manual/running.html,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- running.html 9 Feb 2004 21:50:05 -0000 1.26
+++ running.html 31 Aug 2004 22:32:53 -0000 1.27
@@ -230,6 +230,13 @@
<th>description</th>
</tr>
<tr>
+ <td><code>ant.executor.class</code></td>
+ <td>classname; default is org.apache.tools.ant.helper.DefaultExecutor</td>
+ <td><b>Since Ant 1.6.3</b> Ant will delegate Target invocation to the
+org.apache.tools.ant.Executor implementation specified here.
+ </td>
+</tr>
+<tr>
<td><code>ant.input.properties</code></td>
<td>filename (required)</td>
<td>Name of the file holding the values for the
@@ -473,4 +480,4 @@
Reserved.</p>
</body>
-</html>
\ No newline at end of file
+</html>
1.106 +6 -5 ant/src/main/org/apache/tools/ant/taskdefs/Ant.java
Index: Ant.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Ant.java,v
retrieving revision 1.105
retrieving revision 1.106
diff -u -r1.105 -r1.106
--- Ant.java 23 Jul 2004 20:16:29 -0000 1.105
+++ Ant.java 31 Aug 2004 22:32:53 -0000 1.106
@@ -36,6 +36,7 @@
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.Task;
+import org.apache.tools.ant.helper.SingleCheckExecutor;
import org.apache.tools.ant.types.PropertySet;
import org.apache.tools.ant.util.FileUtils;
@@ -62,6 +63,9 @@
*/
public class Ant extends Task {
+ /** Target Executor */
+ private static SingleCheckExecutor executor = new SingleCheckExecutor();
+
/** the basedir where is executed the build file */
private File dir = null;
@@ -394,11 +398,8 @@
try {
log("Entering " + antFile + "...", Project.MSG_VERBOSE);
newProject.fireSubBuildStarted();
- String[] nameArray =
- (String[])(locals.toArray(new
String[locals.size()]));
-
- newProject.executeSortedTargets(newProject.topoSort(
- nameArray, newProject.getTargets(), false));
+ executor.executeTargets(newProject,
+ (String[])(locals.toArray(new
String[locals.size()])));
} catch (BuildException ex) {
t = ProjectHelper
1.1
ant/src/main/org/apache/tools/ant/helper/DefaultExecutor.java
Index: DefaultExecutor.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.helper;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Executor;
import org.apache.tools.ant.BuildException;
/**
* Default Target executor implementation.
* @since Ant 1.6.3
*/
public class DefaultExecutor implements Executor {
//inherit doc
public void executeTargets(Project project, String[] targetNames)
throws BuildException {
for (int i = 0; i < targetNames.length; i++) {
project.executeTarget(targetNames[i]);
}
}
}
1.1
ant/src/main/org/apache/tools/ant/helper/KeepGoingExecutor.java
Index: KeepGoingExecutor.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.helper;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Executor;
import org.apache.tools.ant.BuildException;
/**
* "Keep-going" Target executor implementation.
* @since Ant 1.6.3
*/
public class KeepGoingExecutor implements Executor {
//inherit doc
public void executeTargets(Project project, String[] targetNames)
throws BuildException {
BuildException thrownException = null;
for (int i = 0; i < targetNames.length; i++) {
try {
project.executeTarget(targetNames[i]);
} catch (BuildException ex) {
thrownException = ex;
}
}
if (thrownException != null) {
throw thrownException;
}
}
}
1.1
ant/src/main/org/apache/tools/ant/helper/SingleCheckExecutor.java
Index: SingleCheckExecutor.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant.helper;
import java.util.Vector;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Executor;
import org.apache.tools.ant.BuildException;
/**
* "Single-check" Target executor implementation.
* @since Ant 1.6.3
*/
public class SingleCheckExecutor implements Executor {
//inherit doc
public void executeTargets(Project project, String[] targetNames)
throws BuildException {
project.executeSortedTargets(
project.topoSort(targetNames, project.getTargets(), false));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]