git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@695865 13f79535-47bb-0310-9956-ffa450edef68master
@@ -364,6 +364,13 @@ Other changes: | |||
* <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 | |||
============================================= | |||
@@ -21,6 +21,7 @@ import java.io.BufferedReader; | |||
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 @@ public class ProjectHelper { | |||
} | |||
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"); | |||
} | |||
} |
@@ -72,6 +72,33 @@ public class ProjectHelper2 extends ProjectHelper { | |||
*/ | |||
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 | |||
* | |||
@@ -80,7 +107,8 @@ public class ProjectHelper2 extends ProjectHelper { | |||
* @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); | |||
@@ -24,13 +24,14 @@ import java.util.ArrayList; | |||
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 @@ public class Antlib extends Task implements TaskContainer { | |||
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( | |||