umagesh     2003/04/15 10:23:16

  Modified:    src/main/org/apache/tools/ant ComponentHelper.java
                        IntrospectionHelper.java Main.java Project.java
               src/main/org/apache/tools/ant/filters/util
                        ChainReaderHelper.java
               src/main/org/apache/tools/ant/types Mapper.java
               src/main/org/apache/tools/ant/types/selectors
                        ExtendSelector.java
  Log:
  Refactor static method into a non-static version.
  
  Revision  Changes    Path
  1.5       +11 -5     ant/src/main/org/apache/tools/ant/ComponentHelper.java
  
  Index: ComponentHelper.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/ComponentHelper.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ComponentHelper.java      14 Apr 2003 17:21:25 -0000      1.4
  +++ ComponentHelper.java      15 Apr 2003 17:23:15 -0000      1.5
  @@ -65,12 +65,12 @@
   import java.io.IOException;
   import java.lang.reflect.Modifier;
   
  -/** 
  +/**
    * Component creation and configuration.
    *
    * This is cut&paste from Project.java of everything related to
    * task/type management. Project will just delegate.
  - * 
  + *
    * A very simple hook mechnism is provided that allows users to plug
    * in custom code. It is also possible to replace the default behavior
    * ( for example in an app embeding ant )
  @@ -407,7 +407,9 @@
   
           try {
               Object o = c.newInstance();
  -            Project.setProjectOnObject(project, o);
  +            if ( project != null ) {
  +                project.setProjectReference( o );
  +            }
               Task task = null;
               if (o instanceof Task) {
                   task = (Task) o;
  @@ -416,7 +418,9 @@
                   // and an Adapter
                   TaskAdapter taskA = new TaskAdapter();
                   taskA.setProxy(o);
  -                Project.setProjectOnObject(project, taskA);
  +                if ( project != null ) {
  +                    project.setProjectReference( taskA );
  +                }
                   task = taskA;
               }
               task.setTaskType(taskType);
  @@ -521,7 +525,9 @@
               } else {
                   o = ctor.newInstance(new Object[] {this});
               }
  -            Project.setProjectOnObject(project, o);
  +            if ( project != null ) {
  +                project.setProjectReference( o );
  +            }
               String msg = "   +DataType: " + typeName;
               project.log(msg, Project.MSG_DEBUG);
               return o;
  
  
  
  1.55      +125 -119  
ant/src/main/org/apache/tools/ant/IntrospectionHelper.java
  
  Index: IntrospectionHelper.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/IntrospectionHelper.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- IntrospectionHelper.java  14 Apr 2003 17:21:25 -0000      1.54
  +++ IntrospectionHelper.java  15 Apr 2003 17:23:15 -0000      1.55
  @@ -74,31 +74,31 @@
   public class IntrospectionHelper implements BuildListener {
   
       /**
  -     * Map from attribute names to attribute types 
  +     * Map from attribute names to attribute types
        * (String to Class).
        */
       private Hashtable attributeTypes;
   
       /**
  -     * Map from attribute names to attribute setter methods 
  +     * Map from attribute names to attribute setter methods
        * (String to AttributeSetter).
        */
       private Hashtable attributeSetters;
   
       /**
  -     * Map from attribute names to nested types 
  +     * Map from attribute names to nested types
        * (String to Class).
        */
       private Hashtable nestedTypes;
   
       /**
  -     * Map from attribute names to methods to create nested types 
  +     * Map from attribute names to methods to create nested types
        * (String to NestedCreator).
        */
       private Hashtable nestedCreators;
   
       /**
  -     * Map from attribute names to methods to store configured nested types 
  +     * Map from attribute names to methods to store configured nested types
        * (String to NestedStorer).
        */
       private Hashtable nestedStorers;
  @@ -118,9 +118,9 @@
        */
       private static Hashtable helpers = new Hashtable();
   
  -    /** 
  -     * Map from primitive types to wrapper classes for use in 
  -     * createAttributeSetter (Class to Class). Note that char 
  +    /**
  +     * Map from primitive types to wrapper classes for use in
  +     * createAttributeSetter (Class to Class). Note that char
        * and boolean are in here even though they get special treatment
        * - this way we only need to test for the wrapper class.
        */
  @@ -128,18 +128,18 @@
   
       // Set up PRIMITIVE_TYPE_MAP
       static {
  -        Class[] primitives = {Boolean.TYPE, Byte.TYPE, Character.TYPE, 
  -                              Short.TYPE, Integer.TYPE, Long.TYPE, 
  +        Class[] primitives = {Boolean.TYPE, Byte.TYPE, Character.TYPE,
  +                              Short.TYPE, Integer.TYPE, Long.TYPE,
                                 Float.TYPE, Double.TYPE};
  -        Class[] wrappers = {Boolean.class, Byte.class, Character.class, 
  -                            Short.class, Integer.class, Long.class, 
  +        Class[] wrappers = {Boolean.class, Byte.class, Character.class,
  +                            Short.class, Integer.class, Long.class,
                               Float.class, Double.class};
           for (int i = 0; i < primitives.length; i++) {
               PRIMITIVE_TYPE_MAP.put (primitives[i], wrappers[i]);
           }
       }
   
  -    // XXX: (Jon Skeet) The documentation below doesn't draw a clear 
  +    // XXX: (Jon Skeet) The documentation below doesn't draw a clear
       // distinction between addConfigured and add. It's obvious what the
       // code *here* does (addConfigured sets both a creator method which
       // calls a no-arg constructor and a storer method which calls the
  @@ -148,49 +148,49 @@
       // obvious what the difference in actual *effect* will be later
       // on. I can't see any mention of addConfiguredXXX in "Developing
       // with Ant" (at least in the version on the web site). Someone
  -    // who understands should update this documentation 
  +    // who understands should update this documentation
       // (and preferably the manual too) at some stage.
       /**
  -     * Sole constructor, which is private to ensure that all 
  +     * Sole constructor, which is private to ensure that all
        * IntrospectionHelpers are created via [EMAIL PROTECTED] 
#getHelper(Class) getHelper}.
        * Introspects the given class for bean-like methods.
        * Each method is examined in turn, and the following rules are applied:
        * <p>
        * <ul>
  -     * <li>If the method is <code>Task.setLocation(Location)</code>, 
  +     * <li>If the method is <code>Task.setLocation(Location)</code>,
        * <code>Task.setTaskType(String)</code>
  -     * or <code>TaskContainer.addTask(Task)</code>, it is ignored. These 
  +     * or <code>TaskContainer.addTask(Task)</code>, it is ignored. These
        * methods are handled differently elsewhere.
        * <li><code>void addText(String)</code> is recognised as the method for
        * adding PCDATA to a bean.
  -     * <li><code>void setFoo(Bar)</code> is recognised as a method for 
  -     * setting the value of attribute <code>foo</code>, so long as 
  -     * <code>Bar</code> is non-void and is not an array type. Non-String 
  +     * <li><code>void setFoo(Bar)</code> is recognised as a method for
  +     * setting the value of attribute <code>foo</code>, so long as
  +     * <code>Bar</code> is non-void and is not an array type. Non-String
        * parameter types always overload String parameter types, but that is
        * the only guarantee made in terms of priority.
        * <li><code>Foo createBar()</code> is recognised as a method for
  -     * creating a nested element called <code>bar</code> of type 
  +     * creating a nested element called <code>bar</code> of type
        * <code>Foo</code>, so long as <code>Foo</code> is not a primitive or
        * array type.
        * <li><code>void addConfiguredFoo(Bar)</code> is recognised as a
  -     * method for storing a pre-configured element called 
  +     * method for storing a pre-configured element called
        * <code>foo</code> and of type <code>Bar</code>, so long as
  -     * <code>Bar</code> is not an array, primitive or String type. 
  -     * <code>Bar</code> must have an accessible constructor taking no 
  +     * <code>Bar</code> is not an array, primitive or String type.
  +     * <code>Bar</code> must have an accessible constructor taking no
        * arguments.
        * <li><code>void addFoo(Bar)</code> is recognised as a
  -     * method for storing an element called <code>foobar</code> 
  +     * method for storing an element called <code>foobar</code>
        * and of type <code>Baz</code>, so long as
  -     * <code>Baz</code> is not an array, primitive or String type. 
  -     * <code>Baz</code> must have an accessible constructor taking no 
  +     * <code>Baz</code> is not an array, primitive or String type.
  +     * <code>Baz</code> must have an accessible constructor taking no
        * arguments.
        * </ul>
  -     * Note that only one method is retained to create/set/addConfigured/add 
  +     * Note that only one method is retained to create/set/addConfigured/add
        * any element or attribute.
  -     * 
  -     * @param bean The bean type to introspect. 
  +     *
  +     * @param bean The bean type to introspect.
        *             Must not be <code>null</code>.
  -     * 
  +     *
        * @see #getHelper(Class)
        */
       private IntrospectionHelper(final Class bean) {
  @@ -257,7 +257,7 @@
                           particular order.
                       */
                   }
  -                AttributeSetter as 
  +                AttributeSetter as
                       = createAttributeSetter(m, args[0], propName);
                   if (as != null) {
                       attributeTypes.put(propName, args[0]);
  @@ -346,35 +346,35 @@
           }
       }
   
  -    /** 
  -     * Certain set methods are part of the Ant core interface to tasks and 
  +    /**
  +     * Certain set methods are part of the Ant core interface to tasks and
        * therefore not to be considered for introspection
        *
        * @param name the name of the set method
  -     * @param type the type of the set method's parameter 
  +     * @param type the type of the set method's parameter
        * @return true if the given set method is to be hidden.
        */
       private boolean isHiddenSetMethod(String name, Class type) {
  -        if ("setLocation".equals(name) 
  +        if ("setLocation".equals(name)
                && org.apache.tools.ant.Location.class.equals(type)) {
               return true;
           }
  -        
  -        if  ("setTaskType".equals(name) 
  +
  +        if  ("setTaskType".equals(name)
                && java.lang.String.class.equals(type)) {
               return true;
           }
  -        
  +
           return false;
       }
  -    
  +
       /**
        * Returns a helper for the given class, either from the cache
        * or by creating a new instance.
  -     * 
  +     *
        * @param c The class for which a helper is required.
        *          Must not be <code>null</code>.
  -     * 
  +     *
        * @return a helper for the specified class
        */
       public static synchronized IntrospectionHelper getHelper(Class c) {
  @@ -411,21 +411,21 @@
       }
   
       /**
  -     * Sets the named attribute in the given element, which is part of the 
  +     * Sets the named attribute in the given element, which is part of the
        * given project.
  -     * 
  -     * @param p The project containing the element. This is used when files 
  +     *
  +     * @param p The project containing the element. This is used when files
        *          need to be resolved. Must not be <code>null</code>.
  -     * @param element The element to set the attribute in. Must not be 
  +     * @param element The element to set the attribute in. Must not be
        *                <code>null</code>.
        * @param attributeName The name of the attribute to set. Must not be
        *                      <code>null</code>.
        * @param value The value to set the attribute to. This may be 
interpreted
        *              or converted to the necessary type if the setter method
        *              doesn't just take a string. Must not be 
<code>null</code>.
  -     * 
  -     * @exception BuildException if the introspected class doesn't support 
  -     *                           the given attribute, or if the setting 
  +     *
  +     * @exception BuildException if the introspected class doesn't support
  +     *                           the given attribute, or if the setting
        *                           method fails.
        */
       public void setAttribute(Project p, Object element, String attributeName,
  @@ -459,23 +459,23 @@
       }
   
       /**
  -     * Adds PCDATA to an element, using the element's 
  +     * Adds PCDATA to an element, using the element's
        * <code>void addText(String)</code> method, if it has one. If no
  -     * such method is present, a BuildException is thrown if the 
  +     * such method is present, a BuildException is thrown if the
        * given text contains non-whitespace.
  -     * 
  -     * @param project The project which the element is part of. 
  +     *
  +     * @param project The project which the element is part of.
        *                Must not be <code>null</code>.
  -     * @param element The element to add the text to. 
  +     * @param element The element to add the text to.
        *                Must not be <code>null</code>.
        * @param text    The text to add.
        *                Must not be <code>null</code>.
  -     * 
  +     *
        * @exception BuildException if non-whitespace text is provided and no
        *                           method is available to handle it, or if
        *                           the handling method fails.
        */
  -    public void addText(Project project, Object element, String text) 
  +    public void addText(Project project, Object element, String text)
           throws BuildException {
           if (addText == null) {
               // Element doesn't handle text content
  @@ -503,19 +503,19 @@
           }
       }
   
  -    public void throwNotSupported(Project project, Object parent, 
  +    public void throwNotSupported(Project project, Object parent,
           String elementName) {
           String msg = project.getElementName(parent) +
               " doesn't support the nested \"" + elementName + "\" element.";
           throw new BuildException(msg);
  -    }        
  -    
  +    }
  +
       /**
        * Creates a named nested element. Depending on the results of the
        * initial introspection, either a method in the given parent instance
        * or a simple no-arg constructor is used to create an instance of the
        * specified element type.
  -     * 
  +     *
        * @param project Project to which the parent object belongs.
        *                Must not be <code>null</code>. If the resulting
        *                object is an instance of ProjectComponent, its
  @@ -524,21 +524,23 @@
        *                Must not be <code>null</code>.
        * @param elementName Name of the element to create an instance of.
        *                    Must not be <code>null</code>.
  -     * 
  +     *
        * @return an instance of the specified element type
  -     * 
  +     *
        * @exception BuildException if no method is available to create the
        *                           element instance, or if the creating method
        *                           fails.
        */
  -    public Object createElement(Project project, Object parent, 
  +    public Object createElement(Project project, Object parent,
           String elementName) throws BuildException {
           NestedCreator nc = (NestedCreator) nestedCreators.get(elementName);
           if (nc == null && parent instanceof DynamicConfigurator) {
               DynamicConfigurator dc = (DynamicConfigurator) parent;
               Object nestedElement = dc.createDynamicElement(elementName);
               if (nestedElement != null) {
  -                Project.setProjectOnObject(project, nestedElement);
  +                if ( project != null ) {
  +                    project.setProjectReference( nestedElement );
  +                }
                   return nestedElement;
               }
           }
  @@ -547,7 +549,9 @@
           }
           try {
               Object nestedElement = nc.create(parent);
  -            Project.setProjectOnObject(project, nestedElement);
  +            if ( project != null ) {
  +                project.setProjectReference( nestedElement );
  +            }
               return nestedElement;
           } catch (IllegalAccessException ie) {
               // impossible as getMethods should only return public methods
  @@ -565,7 +569,7 @@
       }
   
       /**
  -     * Indicate if this element supports a nested element of the 
  +     * Indicate if this element supports a nested element of the
        * given name.
        *
        * @param elementName the name of the nested element being checked
  @@ -576,28 +580,28 @@
           return nestedCreators.containsKey(elementName) ||
               DynamicConfigurator.class.isAssignableFrom(bean);
       }
  -    
  +
       /**
        * Stores a named nested element using a storage method determined
        * by the initial introspection. If no appropriate storage method
        * is available, this method returns immediately.
  -     * 
  -     * @param project Ignored in this implementation. 
  +     *
  +     * @param project Ignored in this implementation.
        *                May be <code>null</code>.
  -     * 
  -     * @param parent  Parent instance to store the child in. 
  +     *
  +     * @param parent  Parent instance to store the child in.
        *                Must not be <code>null</code>.
  -     * 
  +     *
        * @param child   Child instance to store in the parent.
        *                Should not be <code>null</code>.
  -     * 
  -     * @param elementName  Name of the child element to store. 
  +     *
  +     * @param elementName  Name of the child element to store.
        *                     May be <code>null</code>, in which case
        *                     this method returns immediately.
  -     * 
  +     *
        * @exception BuildException if the storage method fails.
        */
  -    public void storeElement(Project project, Object parent, Object child, 
  +    public void storeElement(Project project, Object parent, Object child,
           String elementName) throws BuildException {
           if (elementName == null) {
               return;
  @@ -625,13 +629,13 @@
   
       /**
        * Returns the type of a named nested element.
  -     * 
  +     *
        * @param elementName The name of the element to find the type of.
        *                    Must not be <code>null</code>.
  -     * 
  +     *
        * @return the type of the nested element with the specified name.
        *         This will never be <code>null</code>.
  -     * 
  +     *
        * @exception BuildException if the introspected class does not
        *                           support the named nested element.
        */
  @@ -648,13 +652,13 @@
   
       /**
        * Returns the type of a named attribute.
  -     * 
  +     *
        * @param attributeName The name of the attribute to find the type of.
        *                      Must not be <code>null</code>.
  -     * 
  +     *
        * @return the type of the attribute with the specified name.
        *         This will never be <code>null</code>.
  -     * 
  +     *
        * @exception BuildException if the introspected class does not
        *                           support the named attribute.
        */
  @@ -671,7 +675,7 @@
   
       /**
        * Returns whether or not the introspected class supports PCDATA.
  -     * 
  +     *
        * @return whether or not the introspected class supports PCDATA.
        */
       public boolean supportsCharacters() {
  @@ -679,9 +683,9 @@
       }
   
       /**
  -     * Returns an enumeration of the names of the attributes supported 
  +     * Returns an enumeration of the names of the attributes supported
        * by the introspected class.
  -     * 
  +     *
        * @return an enumeration of the names of the attributes supported
        *         by the introspected class.
        */
  @@ -690,9 +694,9 @@
       }
   
       /**
  -     * Returns an enumeration of the names of the nested elements supported 
  +     * Returns an enumeration of the names of the nested elements supported
        * by the introspected class.
  -     * 
  +     *
        * @return an enumeration of the names of the nested elements supported
        *         by the introspected class.
        */
  @@ -707,36 +711,36 @@
        * <ul>
        * <li>String (left as it is)
        * <li>Character/char (first character is used)
  -     * <li>Boolean/boolean 
  +     * <li>Boolean/boolean
        * ([EMAIL PROTECTED] Project#toBoolean(String) 
Project.toBoolean(String)} is used)
        * <li>Class (Class.forName is used)
        * <li>File (resolved relative to the appropriate project)
        * <li>Path (resolve relative to the appropriate project)
  -     * <li>EnumeratedAttribute (uses its own 
  +     * <li>EnumeratedAttribute (uses its own
        * [EMAIL PROTECTED] EnumeratedAttribute#setValue(String) setValue} 
method)
  -     * <li>Other primitive types (wrapper classes are used with constructors 
  +     * <li>Other primitive types (wrapper classes are used with constructors
        * taking String)
        * </ul>
  -     * 
  -     * If none of the above covers the given parameters, a constructor for 
the 
  +     *
  +     * If none of the above covers the given parameters, a constructor for 
the
        * appropriate class taking a String parameter is used if it is 
available.
  -     * 
  +     *
        * @param m The method to invoke on the bean when the setter is invoked.
        *          Must not be <code>null</code>.
        * @param arg The type of the single argument of the bean's method.
        *            Must not be <code>null</code>.
        * @param attrName the name of the attribute for which the setter is 
being
        *                 created.
  -     * 
  +     *
        * @return an appropriate AttributeSetter instance, or <code>null</code>
        *         if no appropriate conversion is available.
        */
       private AttributeSetter createAttributeSetter(final Method m,
  -                                                  Class arg, 
  +                                                  Class arg,
                                                     final String attrName) {
  -        // use wrappers for primitive classes, e.g. int and 
  +        // use wrappers for primitive classes, e.g. int and
           // Integer are treated identically
  -        final Class reflectedArg = PRIMITIVE_TYPE_MAP.containsKey (arg) 
  +        final Class reflectedArg = PRIMITIVE_TYPE_MAP.containsKey (arg)
               ? (Class) PRIMITIVE_TYPE_MAP.get(arg) : arg;
   
           // simplest case - setAttribute expects String
  @@ -754,15 +758,15 @@
                       public void set(Project p, Object parent, String value)
                           throws InvocationTargetException, 
IllegalAccessException {
                           if (value.length() == 0) {
  -                            throw new BuildException("The value \"\" is not 
a " 
  -                                + "legal value for attribute \"" 
  +                            throw new BuildException("The value \"\" is not 
a "
  +                                + "legal value for attribute \""
                                   + attrName + "\"");
                           }
                           m.invoke(parent, new Character[] {new 
Character(value.charAt(0))});
                       }
   
                   };
  -        // boolean and Boolean get special treatment because we 
  +        // boolean and Boolean get special treatment because we
           // have a nice method in Project
           } else if (java.lang.Boolean.class.equals(reflectedArg)) {
               return new AttributeSetter() {
  @@ -813,7 +817,7 @@
                       public void set(Project p, Object parent, String value)
                           throws InvocationTargetException, 
IllegalAccessException, BuildException {
                           try {
  -                            org.apache.tools.ant.types.EnumeratedAttribute 
ea = 
  +                            org.apache.tools.ant.types.EnumeratedAttribute 
ea =
                                   
(org.apache.tools.ant.types.EnumeratedAttribute) reflectedArg.newInstance();
                               ea.setValue(value);
                               m.invoke(parent, new EnumeratedAttribute[] {ea});
  @@ -824,7 +828,7 @@
                   };
   
           // worst case. look for a public String constructor and use it
  -        // This is used (deliberately) for all primitives/wrappers other 
than 
  +        // This is used (deliberately) for all primitives/wrappers other than
           // char and boolean
           } else {
   
  @@ -838,7 +842,9 @@
                               throws InvocationTargetException, 
IllegalAccessException, BuildException {
                               try {
                                   Object attribute = c.newInstance(new 
String[] {value});
  -                                Project.setProjectOnObject(p, attribute);
  +                                if ( p != null ) {
  +                                    p.setProjectReference( attribute );
  +                                }
                                   m.invoke(parent, new Object[] {attribute});
                               } catch (InstantiationException ie) {
                                   throw new BuildException(ie);
  @@ -858,13 +864,13 @@
        * relation to a given project. This is used for logging purposes
        * when the element is asked to cope with some data it has no
        * way of handling.
  -     * 
  -     * @param project The project the element is defined in. 
  +     *
  +     * @param project The project the element is defined in.
        *                Must not be <code>null</code>.
  -     * 
  +     *
        * @param element The element to describe.
        *                Must not be <code>null</code>.
  -     * 
  +     *
        * @return a description of the element type
        */
       protected String getElementName(Project project, Object element) {
  @@ -876,12 +882,12 @@
        * a given prefix and converting into lower case. It is up to calling
        * code to make sure the method name does actually begin with the
        * specified prefix - no checking is done in this method.
  -     * 
  +     *
        * @param methodName The name of the method in question.
        *                   Must not be <code>null</code>.
        * @param prefix     The prefix to remove.
        *                   Must not be <code>null</code>.
  -     * 
  +     *
        * @return the lower-cased method name with the prefix removed.
        */
       private String getPropertyName(String methodName, String prefix) {
  @@ -890,7 +896,7 @@
       }
   
       /**
  -     * Internal interface used to create nested elements. Not documented 
  +     * Internal interface used to create nested elements. Not documented
        * in detail for reasons of source code readability.
        */
       private interface NestedCreator {
  @@ -899,7 +905,7 @@
       }
   
       /**
  -     * Internal interface used to storing nested elements. Not documented 
  +     * Internal interface used to storing nested elements. Not documented
        * in detail for reasons of source code readability.
        */
       private interface NestedStorer {
  @@ -908,7 +914,7 @@
       }
   
       /**
  -     * Internal interface used to setting element attributes. Not documented 
  +     * Internal interface used to setting element attributes. Not documented
        * in detail for reasons of source code readability.
        */
       private interface AttributeSetter {
  @@ -918,9 +924,9 @@
       }
   
       /**
  -     * Clears all storage used by this class, including the static cache of 
  +     * Clears all storage used by this class, including the static cache of
        * helpers.
  -     * 
  +     *
        * @param event Ignored in this implementation.
        */
       public void buildFinished(BuildEvent event) {
  @@ -937,35 +943,35 @@
        * @param event Ignored in this implementation.
        */
       public void buildStarted(BuildEvent event) {}
  -    
  +
       /**
        * Empty implementation to satisfy the BuildListener interface.
        *
        * @param event Ignored in this implementation.
        */
       public void targetStarted(BuildEvent event) {}
  -    
  +
       /**
        * Empty implementation to satisfy the BuildListener interface.
        *
        * @param event Ignored in this implementation.
        */
       public void targetFinished(BuildEvent event) {}
  -    
  +
       /**
        * Empty implementation to satisfy the BuildListener interface.
        *
        * @param event Ignored in this implementation.
        */
       public void taskStarted(BuildEvent event) {}
  -    
  +
       /**
        * Empty implementation to satisfy the BuildListener interface.
        *
        * @param event Ignored in this implementation.
        */
       public void taskFinished(BuildEvent event) {}
  -    
  +
       /**
        * Empty implementation to satisfy the BuildListener interface.
        *
  
  
  
  1.82      +7 -3      ant/src/main/org/apache/tools/ant/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/Main.java,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- Main.java 14 Apr 2003 17:21:25 -0000      1.81
  +++ Main.java 15 Apr 2003 17:23:15 -0000      1.82
  @@ -182,7 +182,7 @@
               printMessage(exc);
               System.exit(1);
           }
  -        
  +
           if (additionalUserProperties != null) {
               for (Enumeration e = additionalUserProperties.keys();
                       e.hasMoreElements();) {
  @@ -649,7 +649,9 @@
               try {
                   BuildListener listener =
                       (BuildListener) Class.forName(className).newInstance();
  -                Project.setProjectOnObject(project, listener);
  +                if ( project != null ) {
  +                    project.setProjectReference( listener );
  +                }
                   project.addBuildListener(listener);
               } catch (Throwable exc) {
                   throw new BuildException("Unable to instantiate listener "
  @@ -672,7 +674,9 @@
               try {
                   handler = (InputHandler)
                       (Class.forName(inputHandlerClassname).newInstance());
  -                Project.setProjectOnObject(project, handler);
  +                if ( project != null ) {
  +                    project.setProjectReference( handler );
  +                }
               } catch (ClassCastException e) {
                   String msg = "The specified input handler class "
                       + inputHandlerClassname
  
  
  
  1.136     +45 -49    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.135
  retrieving revision 1.136
  diff -u -r1.135 -r1.136
  --- Project.java      14 Apr 2003 17:21:25 -0000      1.135
  +++ Project.java      15 Apr 2003 17:23:15 -0000      1.136
  @@ -115,12 +115,12 @@
       private static final String VISITED = "VISITED";
   
       /**
  -     * The class name of the Ant class loader to use for 
  +     * The class name of the Ant class loader to use for
        * JDK 1.2 and above
        */
       private static final String ANTCLASSLOADER_JDK12
           = "org.apache.tools.ant.loader.AntClassLoader2";
  -    
  +
       /**
        * Version constant for Java 1.0
        *
  @@ -219,10 +219,10 @@
        * The default input stream used to read any input
        */
       private InputStream defaultInputStream = null;
  -    
  +
       /**
        * Sets the input handler
  -     * 
  +     *
        * @param handler the InputHandler instance to use for gathering input.
        */
       public void setInputHandler(InputHandler handler) {
  @@ -230,11 +230,11 @@
       }
   
       /**
  -     * Set the default System input stream. Normally this stream is set to 
  +     * Set the default System input stream. Normally this stream is set to
        * System.in. This inputStream is used when no task inptu redirection is
        * being performed.
        *
  -     * @param defaultInputStream the default input stream to use when input 
  +     * @param defaultInputStream the default input stream to use when input
        *        is reuested.
        * @since Ant 1.6
        */
  @@ -245,17 +245,17 @@
       /**
        * Get this project's input stream
        *
  -     * @return the InputStream instance in use by this Porject instance to 
  +     * @return the InputStream instance in use by this Porject instance to
        * read input
        */
       public InputStream getDefaultInputStream() {
           return defaultInputStream;
       }
  -    
  +
       /**
        * Retrieves the current input handler.
        *
  -     * @return the InputHandler instance currently in place for the project 
  +     * @return the InputHandler instance currently in place for the project
        *         instance.
        */
       public InputHandler getInputHandler() {
  @@ -265,11 +265,11 @@
       /** Instance of a utility class to use for file operations. */
       private FileUtils fileUtils;
   
  -    /** 
  -     * Flag which catches Listeners which try to use System.out or 
System.err 
  +    /**
  +     * Flag which catches Listeners which try to use System.out or System.err
        */
       private boolean loggingMessage = false;
  -    
  +
       /**
        * Creates a new Ant project.
        */
  @@ -359,7 +359,7 @@
        * a given path
        *
        * @param path the path from whcih clases are to be loaded.
  -     * 
  +     *
        * @return an appropriate classloader
        */
       public AntClassLoader createClassLoader(Path path) {
  @@ -496,7 +496,7 @@
        * @since 1.5
        */
       public synchronized void setNewProperty(String name, String value) {
  -        PropertyHelper.getPropertyHelper(this).setNewProperty(null, name, 
  +        PropertyHelper.getPropertyHelper(this).setNewProperty(null, name,
                                                                 value);
       }
   
  @@ -510,7 +510,7 @@
        * @see #setProperty(String,String)
        */
       public synchronized void setUserProperty(String name, String value) {
  -        PropertyHelper.getPropertyHelper(this).setUserProperty(null, name, 
  +        PropertyHelper.getPropertyHelper(this).setUserProperty(null, name,
                                                                  value);
       }
   
  @@ -1134,7 +1134,7 @@
   
           try {
               Object o = c.newInstance();
  -            setProjectOnObject(this, o);
  +            setProjectReference( o );
               Task task = null;
               if (o instanceof Task) {
                  task = (Task) o;
  @@ -1247,7 +1247,7 @@
               } else {
                    o = ctor.newInstance(new Object[] {this});
               }
  -            setProjectOnObject(this, o);
  +            setProjectReference( o );
               String msg = "   +DataType: " + typeName;
               log (msg, MSG_DEBUG);
               return o;
  @@ -1302,19 +1302,19 @@
       }
   
       /**
  -     * Read data from the default input stream. If no default has been 
  -     * specified, System.in is used. 
  +     * Read data from the default input stream. If no default has been
  +     * specified, System.in is used.
        *
        * @param buffer the buffer into which data is to be read.
        * @param offset the offset into the buffer at which data is stored.
        * @param length the amount of data to read
        *
        * @return the number of bytes read
  -     * 
  +     *
        * @exception IOException if the data cannot be read
        * @since Ant 1.6
        */
  -    public int defaultInput(byte[] buffer, int offset, int length) 
  +    public int defaultInput(byte[] buffer, int offset, int length)
           throws IOException {
           if (defaultInputStream != null) {
               return defaultInputStream.read(buffer, offset, length);
  @@ -1322,7 +1322,7 @@
               throw new EOFException("No input provided for project");
           }
       }
  -    
  +
       /**
        * Demux an input request to the correct task.
        *
  @@ -1331,11 +1331,11 @@
        * @param length the amount of data to read
        *
        * @return the number of bytes read
  -     * 
  +     *
        * @exception IOException if the data cannot be read
        * @since Ant 1.6
  -     */     
  -    public int demuxInput(byte[] buffer, int offset, int length) 
  +     */
  +    public int demuxInput(byte[] buffer, int offset, int length)
           throws IOException {
           Task task = getThreadTask(Thread.currentThread());
           if (task == null) {
  @@ -1344,7 +1344,7 @@
               return task.handleInput(buffer, offset, length);
           }
       }
  -    
  +
       /**
        * Demultiplexes flush operation so that each task receives the 
appropriate
        * messages. If the current thread is not currently executing a task,
  @@ -1369,8 +1369,8 @@
           }
       }
   
  -    
  -    
  +
  +
       /**
        * Executes the specified target and any targets it depends on.
        *
  @@ -2072,11 +2072,11 @@
           Vector listeners = getBuildListeners();
           synchronized (this) {
               if (loggingMessage) {
  -                throw new BuildException("Listener attempted to access " 
  -                    + (priority == MSG_ERR ? "System.err" : "System.out") 
  +                throw new BuildException("Listener attempted to access "
  +                    + (priority == MSG_ERR ? "System.err" : "System.out")
                       + " - infinite loop terminated");
               }
  -            loggingMessage = true;                
  +            loggingMessage = true;
               for (int i = 0; i < listeners.size(); i++) {
                   BuildListener listener = (BuildListener) 
listeners.elementAt(i);
                   listener.messageLogged(event);
  @@ -2166,7 +2166,7 @@
           return task;
       }
   
  -    
  +
       // Should move to a separate public class - and have API to add
       // listeners, etc.
       private static class AntRefTable extends Hashtable {
  @@ -2274,7 +2274,7 @@
                   return taskClass;
               } catch (NoClassDefFoundError ncdfe) {
                   project.log("Could not load a dependent class ("
  -                        + ncdfe.getMessage() + ") for task " 
  +                        + ncdfe.getMessage() + ") for task "
                           + key, Project.MSG_DEBUG);
               } catch (ClassNotFoundException cnfe) {
                   project.log("Could not load class (" + value
  @@ -2292,7 +2292,7 @@
               if (!(key instanceof String)) {
                   return null;
               }
  -            
  +
               project.log("Get task " + key, Project.MSG_DEBUG);
               Object taskClass = getTask((String) key);
               if (taskClass != null) {
  @@ -2305,27 +2305,24 @@
               return get(key) != null;
           }
       }
  -    
  +
       /**
  -     * set the project on a created object using object.setProject(project).
  +     * Set a reference to this Project on the parameterized object.
        * Need to set the project before other set/add elements
        * are called
  -     * @param project the project object
  -     * @param obj the object to invoke setProject(project) on
  +     * @param obj the object to invoke setProject(this) on
        */
  -    public static void setProjectOnObject(Project project, Object obj) {
  -        if (project == null)
  -            return;
  -        if (obj instanceof ProjectComponent) {
  -            ((ProjectComponent) obj).setProject(project);
  +    public final void setProjectReference( final Object obj ) {
  +        if ( obj instanceof ProjectComponent ) {
  +            ( (ProjectComponent) obj ).setProject( this );
               return;
           }
           try {
  -            Method method = 
  +            Method method =
                   obj.getClass().getMethod(
  -                    "setProject", new Class[] {Project.class});
  -            if (method != null) {
  -                method.invoke(obj, new Object[] {project});
  +                    "setProject", new Class[] {Project.class} );
  +            if ( method != null ) {
  +                method.invoke( obj, new Object[] { this } );
               }
           } catch (Throwable e) {
               // ignore this if the object does not have
  @@ -2333,5 +2330,4 @@
               // is private/protected.
           }
       }
  -
   }
  
  
  
  1.13      +3 -3      
ant/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java
  
  Index: ChainReaderHelper.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/filters/util/ChainReaderHelper.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ChainReaderHelper.java    14 Apr 2003 17:21:26 -0000      1.12
  +++ ChainReaderHelper.java    15 Apr 2003 17:23:16 -0000      1.13
  @@ -161,7 +161,7 @@
                   Object o = finalFilters.elementAt(i);
   
                   if (o instanceof AntFilterReader) {
  -                    final AntFilterReader filter 
  +                    final AntFilterReader filter
                           = (AntFilterReader) finalFilters.elementAt(i);
                       final String className = filter.getClassName();
                       final Path classpath = filter.getClasspath();
  @@ -235,9 +235,9 @@
               ((BaseFilterReader) obj).setProject(project);
               return;
           }
  -        Project.setProjectOnObject(project, obj);
  +        project.setProjectReference( obj );
       }
  -    
  +
       /**
        * Read data from the reader and return the
        * contents as a string.
  
  
  
  1.18      +4 -1      ant/src/main/org/apache/tools/ant/types/Mapper.java
  
  Index: Mapper.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/types/Mapper.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Mapper.java       14 Apr 2003 17:21:27 -0000      1.17
  +++ Mapper.java       15 Apr 2003 17:23:16 -0000      1.18
  @@ -204,7 +204,10 @@
               }
   
               FileNameMapper m = (FileNameMapper) c.newInstance();
  -            Project.setProjectOnObject(getProject(), m);
  +            final Project project = getProject();
  +            if ( project != null ) {
  +                project.setProjectReference( m );
  +            }
               m.setFrom(from);
               m.setTo(to);
               return m;
  
  
  
  1.8       +4 -1      
ant/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java
  
  Index: ExtendSelector.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/types/selectors/ExtendSelector.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ExtendSelector.java       14 Apr 2003 17:21:27 -0000      1.7
  +++ ExtendSelector.java       15 Apr 2003 17:23:16 -0000      1.8
  @@ -107,7 +107,10 @@
                       AntClassLoader.initializeClass(c);
                   }
                   dynselector = (FileSelector) c.newInstance();
  -                Project.setProjectOnObject(getProject(), dynselector);
  +                final Project project = getProject();
  +                if ( project != null ) {
  +                    project.setProjectReference( dynselector );
  +                }
               }
               catch (ClassNotFoundException cnfexcept) {
                   setError("Selector " + classname +
  
  
  

Reply via email to