From 0c9788b8a7fc7ac0827a4a8dfff988deb8ccfc20 Mon Sep 17 00:00:00 2001 From: Costin Manolache Date: Fri, 11 Oct 2002 18:09:19 +0000 Subject: [PATCH] Few changes, added few enhancements I proposed in the past. Again - this is a proposal and an experiment, all features will eventually get to a majority vote and removed or moved out of ant if it doesn't pass. git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273437 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/tools/ant/helper/TaskAdapter2.java | 72 ++++++------------- 1 file changed, 20 insertions(+), 52 deletions(-) diff --git a/proposal/embed/src/java/org/apache/tools/ant/helper/TaskAdapter2.java b/proposal/embed/src/java/org/apache/tools/ant/helper/TaskAdapter2.java index 0f419090f..8bf43f3e0 100644 --- a/proposal/embed/src/java/org/apache/tools/ant/helper/TaskAdapter2.java +++ b/proposal/embed/src/java/org/apache/tools/ant/helper/TaskAdapter2.java @@ -67,72 +67,40 @@ import org.apache.tools.ant.*; * * @author Costin Manolache */ -public class TaskAdapter2 extends Task { - +public class TaskAdapter2 extends Task { // implements DynamicConfigurator { + /* Need to support DynamicConfigurator so that adapted tasks can + support that too. + */ + /** Object to act as a proxy for. */ private Object proxy; private String methodName="execute"; - /** - * Checks whether or not a class is suitable to be adapted by TaskAdapter. - * - * This only checks conditions which are additionally required for - * tasks adapted by TaskAdapter. Thus, this method should be called by - * Project.checkTaskClass. - * - * Throws a BuildException and logs as Project.MSG_ERR for - * conditions that will cause the task execution to fail. - * Logs other suspicious conditions with Project.MSG_WARN. - * - * @param taskClass Class to test for suitability. - * Must not be null. - * @param project Project to log warnings/errors to. - * Must not be null. - * - * @see Project#checkTaskClass(Class) - */ - public static void checkTaskClass(final Class taskClass, final Project project) { - // Any task can be used via adapter. If it doesn't have any execute() - // method, no problem - it will do nothing, but still get an 'id' - // and be registered in the project reference table and useable by other - // tasks. - - if( true ) - return; - - // don't have to check for interface, since then - // taskClass would be abstract too. - try { - final Method executeM = taskClass.getMethod( "execute", null ); - // don't have to check for public, since - // getMethod finds public method only. - // don't have to check for abstract, since then - // taskClass would be abstract too. - if(!Void.TYPE.equals(executeM.getReturnType())) { - final String message = - "return type of execute() should be void but was \""+ - executeM.getReturnType()+"\" in " + taskClass; - project.log(message, Project.MSG_WARN); - } - } catch(NoSuchMethodException e) { - final String message = "No public execute() in " + taskClass; - project.log(message, Project.MSG_ERR); - throw new BuildException(message); - } - } - private IntrospectionHelper ih; void setIntrospectionHelper( IntrospectionHelper ih ) { this.ih=ih; } - IntrospectionHelper getIntrospectionHelper() { + IntrospectionHelper getIntrospectionHelper() + { if( ih==null ) { ih = IntrospectionHelper.getHelper(target.getClass()); } return ih; } + + public void setDynamicAttribute(String name, String value) + throws BuildException + { + setAttribute( name, value ); + } + + public Object createDynamicElement(String name) throws BuildException + { + return null; + } + /** Experimental, non-public method for better 'adaptation' * @@ -174,7 +142,7 @@ public class TaskAdapter2 extends Task { setProjectM.invoke(proxy, new Object[] {project}); } } catch (NoSuchMethodException e) { - // ignore this if the class being used as a task does not have + // ignore this if the class being used as a task does not have // a set project method. } catch( Exception ex ) { log("Error setting project in " + proxy.getClass(),