You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2008/09/16 15:21:02 UTC

svn commit: r695865 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/ProjectHelper.java src/main/org/apache/tools/ant/helper/ProjectHelper2.java src/main/org/apache/tools/ant/taskdefs/Antlib.java

Author: bodewig
Date: Tue Sep 16 06:21:01 2008
New Revision: 695865

URL: http://svn.apache.org/viewvc?rev=695865&view=rev
Log:
use the configured ProjectHelper to parse antlib descriptors, if possible,  PR 42208.

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java
    ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Antlib.java

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=695865&r1=695864&r2=695865&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Tue Sep 16 06:21:01 2008
@@ -364,6 +364,13 @@
  * <patch> has a new optional failOnError attribute.
    Bugzilla Report 44772.
 
+ * Antlib descriptors will now be parsed by the configured
+   ProjectHelper if the implementation overrides the new
+   canParseAntlibDescriptor and parseAntlibDescriptor methods.  If the
+   configured helper doesn't override the methods, a new instance of
+   ProjectHelper2 will be used just like in ant 1.7.1.
+   Bugzilla Report 42208.
+
 Changes from Ant 1.7.0 TO Ant 1.7.1
 =============================================
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java?rev=695865&r1=695864&r2=695865&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/ProjectHelper.java Tue Sep 16 06:21:01 2008
@@ -21,6 +21,7 @@
 import java.io.File;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.URL;
 import java.util.Hashtable;
 import java.util.Locale;
 import java.util.Vector;
@@ -507,4 +508,37 @@
         }
         return new BuildException(errorMessage, ex, newLocation);
     }
+
+    /**
+     * Whether this instance of ProjectHelper can parse an Antlib
+     * descriptor given by the URL and return its content as an
+     * UnknownElement ready to be turned into an Antlib task.
+     *
+     * <p>This method should not try to parse the content of the
+     * descriptor, the URL is only given as an argument to allow
+     * subclasses to decide whether they can support a given URL
+     * scheme or not.</p>
+     *
+     * <p>Subclasses that return true in this method must also
+     * override {@link #parseAntlibDescriptor
+     * parseAntlibDescriptor}.</p>
+     *
+     * <p>This implementation returns false.</p>
+     *
+     * @since Ant 1.8.0
+     */
+    public boolean canParseAntlibDescriptor(URL url) {
+        return false;
+    }
+
+    /**
+     * Parse the given URL as an antlib descriptor an return the
+     * content as something that can be turned into an Antlib task.
+     *
+     * @since ant 1.8.0
+     */
+    public UnknownElement parseAntlibDescriptor(Project containingProject,
+                                                URL source) {
+        throw new BuildException("can't parse antlib descriptors");
+    }
 }

Modified: ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java?rev=695865&r1=695864&r2=695865&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java Tue Sep 16 06:21:01 2008
@@ -73,6 +73,33 @@
     private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
 
     /**
+     * Whether this instance of ProjectHelper can parse an Antlib
+     * descriptor given by the URL and return its content as an
+     * UnknownElement ready to be turned into an Antlib task.
+     *
+     * <p>This implementation returns true.</p>
+     *
+     * @since Ant 1.8.0
+     */
+    public boolean canParseAntlibDescriptor(URL url) {
+        return true;
+    }
+
+    /**
+     * Parse the given URL as an antlib descriptor an return the
+     * content as something that can be turned into an Antlib task.
+     *
+     * <p>simply delegates to {@link #parseUnknownElement
+     * parseUnknownElement}.</p>
+     *
+     * @since ant 1.8.0
+     */
+    public UnknownElement parseAntlibDescriptor(Project containingProject,
+                                                URL source) {
+        return parseUnknownElement(containingProject, source);
+    }
+
+    /**
      * Parse an unknown element from a url
      *
      * @param project the current project
@@ -80,7 +107,8 @@
      * @return a configured task
      * @exception BuildException if an error occurs
      */
-    public UnknownElement parseUnknownElement(Project project, URL source) throws BuildException {
+    public UnknownElement parseUnknownElement(Project project, URL source)
+        throws BuildException {
         Target dummyTarget = new Target();
         dummyTarget.setProject(project);
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Antlib.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Antlib.java?rev=695865&r1=695864&r2=695865&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Antlib.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Antlib.java Tue Sep 16 06:21:01 2008
@@ -24,13 +24,14 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.apache.tools.ant.TaskContainer;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.ComponentHelper;
 import org.apache.tools.ant.Project;
+import org.apache.tools.ant.ProjectHelper;
 import org.apache.tools.ant.Task;
-import org.apache.tools.ant.helper.ProjectHelper2;
+import org.apache.tools.ant.TaskContainer;
 import org.apache.tools.ant.UnknownElement;
+import org.apache.tools.ant.helper.ProjectHelper2;
 
 
 /**
@@ -71,9 +72,23 @@
         helper.enterAntLib(uri);
         try {
             // Should be safe to parse
-            ProjectHelper2 parser = new ProjectHelper2();
+            ProjectHelper parser = null;
+            Object p =
+                project.getReference(ProjectHelper.PROJECTHELPER_REFERENCE);
+            if (p instanceof ProjectHelper) {
+                parser = (ProjectHelper) p;
+                if (!parser.canParseAntlibDescriptor(antlibUrl)) {
+                    project.log("ProjectHelper class " + p.getClass().getName()
+                                + " can't parse Antlib descriptors, falling back"
+                                + " to ProjectHelper2.");
+                    parser = null;
+                }
+            }
+            if (parser == null) {
+                parser = new ProjectHelper2();
+            }
             UnknownElement ue =
-                parser.parseUnknownElement(project, antlibUrl);
+                parser.parseAntlibDescriptor(project, antlibUrl);
             // Check name is "antlib"
             if (!(ue.getTag().equals(TAG))) {
                 throw new BuildException(