From 39d7abbb4d22999bef7521a953ada14af7cdc76b Mon Sep 17 00:00:00 2001 From: Sam Ruby Date: Sun, 18 Jun 2000 12:24:47 +0000 Subject: [PATCH] Add a test which will compile and load a task definition. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@267683 13f79535-47bb-0310-9956-ffa450edef68 --- .../tools/ant/taskdefs/CompileTask.java | 112 ++++++++++++++++++ .../apache/tools/ant/taskdefs/Taskdef.java | 4 + .../tools/ant/taskdefs/defaults.properties | 1 + 3 files changed, 117 insertions(+) create mode 100644 src/main/org/apache/tools/ant/taskdefs/CompileTask.java diff --git a/src/main/org/apache/tools/ant/taskdefs/CompileTask.java b/src/main/org/apache/tools/ant/taskdefs/CompileTask.java new file mode 100644 index 000000000..02bebf324 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/CompileTask.java @@ -0,0 +1,112 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +package org.apache.tools.ant.taskdefs; + +import org.apache.tools.ant.*; + +import java.util.*; + +/** + * This task will compile and load a new taskdef all in one step. + * At times, this is useful for eliminating ordering dependencies + * which otherwise would require multiple executions of Ant. + * + * @author Sam Ruby rubys@us.ibm.com + */ + +public class CompileTask extends Javac { + + protected Vector taskList = new Vector(); + + /** + * add a new task entry on the task list + */ + public Taskdef createTaskdef() { + Taskdef task = new Taskdef(); + taskList.addElement(task); + return task; + } + + /** + * do all the real work in init + */ + public void init() { + + // create all the include entries from the task defs + for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) { + Taskdef task = (Taskdef)e.nextElement(); + String source = task.getClassname().replace('.','/') + ".java"; + MatchingTask.NameEntry include = super.createInclude(); + include.setName("**/" + source); + } + + // execute Javac + super.init(); + super.execute(); + + // now define all the new tasks + for (Enumeration e=taskList.elements(); e.hasMoreElements(); ) { + Taskdef task = (Taskdef)e.nextElement(); + task.init(); + } + + } + + /** + * have execute do nothing + */ + public void execute() { + } +} diff --git a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java index 4aec0ccfc..c33200603 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Taskdef.java +++ b/src/main/org/apache/tools/ant/taskdefs/Taskdef.java @@ -101,6 +101,10 @@ public class Taskdef extends Task { value = v; } + public String getClassname() { + return value; + } + public void setClassname(String v) { value = v; } diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 339460e56..83f84731a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -29,6 +29,7 @@ available=org.apache.tools.ant.taskdefs.Available filter=org.apache.tools.ant.taskdefs.Filter fixcrlf=org.apache.tools.ant.taskdefs.FixCRLF rename=org.apache.tools.ant.taskdefs.Rename +compileTask==org.apache.tools.ant.taskdefs.CompileTask # optional tasks script=org.apache.tools.ant.taskdefs.optional.Script