peterreilly 2004/09/24 01:45:50
Modified: . WHATSNEW
src/main/org/apache/tools/ant IntrospectionHelper.java
RuntimeConfigurable.java UnknownElement.java
src/etc/testcases/taskdefs presetdef.xml
src/testcases/org/apache/tools/ant/taskdefs
PreSetDefTest.java
Added: src/main/org/apache/tools/ant
UnsupportedAttributeException.java
UnsupportedElementException.java
Log:
Try to get the correct task/type name for an unsupported attribute/element
exception thrown by IntrospectionHelper
PR: 31389 and 29499
Reported by: Tamas Szeredi and Jesse Glick
Revision Changes Path
1.663 +3 -0 ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/ant/WHATSNEW,v
retrieving revision 1.662
retrieving revision 1.663
diff -u -r1.662 -r1.663
--- WHATSNEW 24 Sep 2004 08:13:25 -0000 1.662
+++ WHATSNEW 24 Sep 2004 08:45:49 -0000 1.663
@@ -23,6 +23,9 @@
<exec>, <apply>, or <java> tasks was always logged to System.out
instead of to the managing Task.
+* Incorrect task name with invalid "javac" task after a "presetdef.
+ Bugzilla reports 31389 and 29499.
+
Other changes:
--------------
1.90 +6 -6
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.89
retrieving revision 1.90
diff -u -r1.89 -r1.90
--- IntrospectionHelper.java 13 Sep 2004 09:11:47 -0000 1.89
+++ IntrospectionHelper.java 24 Sep 2004 08:45:49 -0000 1.90
@@ -490,7 +490,7 @@
String msg = getElementName(p, element)
+ " doesn't support the \"" + attributeName
+ "\" attribute.";
- throw new BuildException(msg);
+ throw new UnsupportedAttributeException(msg, attributeName);
}
}
try {
@@ -564,7 +564,7 @@
String elementName) {
String msg = project.getElementName(parent)
+ " doesn't support the nested \"" + elementName + "\" element.";
- throw new BuildException(msg);
+ throw new UnsupportedElementException(msg, elementName);
}
private NestedCreator getNestedCreator(
@@ -825,7 +825,7 @@
String msg = "Class " + bean.getName()
+ " doesn't support the nested \"" + elementName
+ "\" element.";
- throw new BuildException(msg);
+ throw new UnsupportedElementException(msg, elementName);
}
return nt;
}
@@ -848,7 +848,7 @@
if (at == null) {
String msg = "Class " + bean.getName()
+ " doesn't support the \"" + attributeName + "\"
attribute.";
- throw new BuildException(msg);
+ throw new UnsupportedAttributeException(msg, attributeName);
}
return at;
}
@@ -892,7 +892,7 @@
String msg = "Class " + bean.getName()
+ " doesn't support the nested \"" + elementName
+ "\" element.";
- throw new BuildException(msg);
+ throw new UnsupportedElementException(msg, elementName);
}
return ((NestedCreator) creator).method;
}
@@ -914,7 +914,7 @@
if (setter == null) {
String msg = "Class " + bean.getName()
+ " doesn't support the \"" + attributeName + "\"
attribute.";
- throw new BuildException(msg);
+ throw new UnsupportedAttributeException(msg, attributeName);
}
return ((AttributeSetter) setter).method;
}
1.53 +19 -2
ant/src/main/org/apache/tools/ant/RuntimeConfigurable.java
Index: RuntimeConfigurable.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/RuntimeConfigurable.java,v
retrieving revision 1.52
retrieving revision 1.53
diff -u -r1.52 -r1.53
--- RuntimeConfigurable.java 17 Jul 2004 16:31:40 -0000 1.52
+++ RuntimeConfigurable.java 24 Sep 2004 08:45:50 -0000 1.53
@@ -364,9 +364,26 @@
value = p.replaceProperties(value);
try {
ih.setAttribute(p, target, name, value);
- } catch (BuildException be) {
+ } catch (UnsupportedAttributeException be) {
// id attribute must be set externally
- if (!name.equals("id")) {
+ if (name.equals("id")) {
+ // Do nothing
+ } else if (getElementTag() == null) {
+ throw be;
+ } else {
+ be.setMessage(
+ getElementTag()
+ + " doesn't support the \""
+ + be.getAttribute()
+ + "\" attribute");
+ throw be;
+ }
+ } catch (BuildException be) {
+ if (name.equals("id")) {
+ // Assume that this is an not supported attribute
type
+ // thrown for example by a dymanic attribute task
+ // Do nothing
+ } else {
throw be;
}
}
1.82 +19 -11 ant/src/main/org/apache/tools/ant/UnknownElement.java
Index: UnknownElement.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/UnknownElement.java,v
retrieving revision 1.81
retrieving revision 1.82
diff -u -r1.81 -r1.82
--- UnknownElement.java 10 Jun 2004 18:01:47 -0000 1.81
+++ UnknownElement.java 24 Sep 2004 08:45:50 -0000 1.82
@@ -328,17 +328,25 @@
for (int i = 0; it.hasNext(); i++) {
RuntimeConfigurable childWrapper = parentWrapper.getChild(i);
UnknownElement child = (UnknownElement) it.next();
- if (!handleChild(
- parentUri, ih, parent, child, childWrapper)) {
- if (!(parent instanceof TaskContainer)) {
- ih.throwNotSupported(getProject(), parent,
- child.getTag());
- } else {
- // a task container - anything could happen - just
add the
- // child to the container
- TaskContainer container = (TaskContainer) parent;
- container.addTask(child);
+ try {
+ if (!handleChild(
+ parentUri, ih, parent, child, childWrapper)) {
+ if (!(parent instanceof TaskContainer)) {
+ ih.throwNotSupported(getProject(), parent,
+ child.getTag());
+ } else {
+ // a task container - anything could happen -
just add the
+ // child to the container
+ TaskContainer container = (TaskContainer) parent;
+ container.addTask(child);
+ }
}
+ } catch (UnsupportedElementException ex) {
+ ex.setMessage(
+ parentWrapper.getElementTag()
+ + " doesn't support the nested \"" + ex.getElement()
+ + "\" element.");
+ throw ex;
}
}
}
@@ -530,7 +538,7 @@
/**
* Set the configured object
- *
+ * @param realThing the configured object
* @since ant 1.7
*/
public void setRealThing(Object realThing) {
1.1
ant/src/main/org/apache/tools/ant/UnsupportedAttributeException.java
Index: UnsupportedAttributeException.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant;
/**
* Used to report attempts to set an unsupported attribute
*
* @since Ant 1.7
*/
public class UnsupportedAttributeException extends BuildException {
private String myMessage;
private String attribute;
/**
* Constructs an unsupport attribute exception
* @param msg The string containing the message
* @param attribute The unsupported attribute
*/
public UnsupportedAttributeException(String msg, String attribute) {
super(msg);
this.attribute = attribute;
this.myMessage = msg;
}
/**
* The attribute that is wrong
*
* @return the attribute name
*/
public String getAttribute() {
return attribute;
}
/**
* Override throwable#getMessage
* @return the message
*/
public String getMessage() {
return myMessage;
}
/**
* Set the message
* @param message a new message
*/
public void setMessage(String message) {
this.myMessage = message;
}
}
1.1
ant/src/main/org/apache/tools/ant/UnsupportedElementException.java
Index: UnsupportedElementException.java
===================================================================
/*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.tools.ant;
/**
* Used to report attempts to set an unsupported element
* When the attempt to set the element is made,
* the code does not not know the name of the task/type
* based on a mapping from the classname to the task/type.
* However one class may be used by a lot of task/types.
* This exception may be caught by code that does know
* the task/type and it will reset the message to the
* correct message.
* This will be done once (in the case of a recursive
* call to handlechildren).
*
* @since Ant 1.6.3 or Ant 1.7 ?
*/
public class UnsupportedElementException extends BuildException {
private String myMessage = null;
private String element;
/**
* Constructs an unsupport element exception
* @param msg The string containing the message
* @param element The name of the incorrect element
*/
public UnsupportedElementException(String msg, String element) {
super(msg);
this.element = element;
}
/**
* The element that is wrong
*
* @return the element name
*/
public String getElement() {
return element;
}
/**
* Override throwable#getMessage
* @return the message
*/
public String getMessage() {
if (myMessage == null) {
return super.getMessage();
} else {
return myMessage;
}
}
/**
* Set the message (If not set already)
* @param message a new message
*/
public void setMessage(String message) {
if (this.myMessage == null) {
this.myMessage = message;
}
}
}
1.4 +18 -0 ant/src/etc/testcases/taskdefs/presetdef.xml
Index: presetdef.xml
===================================================================
RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/presetdef.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- presetdef.xml 13 Jan 2004 10:39:54 -0000 1.3
+++ presetdef.xml 24 Sep 2004 08:45:50 -0000 1.4
@@ -100,4 +100,22 @@
</el.order2>
</target>
+ <target name="correct_taskname_badattr">
+ <presetdef name="mytask">
+ <javac srcdir="whatever"/>
+ </presetdef>
+
+ <javac srcdir="whatever" badattr="whatever"/>
+ </target>
+
+ <target name="correct_taskname_badel">
+ <presetdef name="mytask">
+ <javac srcdir="whatever"/>
+ </presetdef>
+
+ <javac srcdir="whatever">
+ <badel/>
+ </javac>
+ </target>
+
</project>
1.8 +11 -0
ant/src/testcases/org/apache/tools/ant/taskdefs/PreSetDefTest.java
Index: PreSetDefTest.java
===================================================================
RCS file:
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/PreSetDefTest.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- PreSetDefTest.java 9 Mar 2004 16:48:57 -0000 1.7
+++ PreSetDefTest.java 24 Sep 2004 08:45:50 -0000 1.8
@@ -70,6 +70,17 @@
expectLog("antTypeTest", "");
}
+ public void testCorrectTaskNameBadAttr() {
+ expectBuildExceptionContaining(
+ "correct_taskname_badattr", "attribute message", "javac doesn't
support the");
+ }
+
+ public void testCorrectTaskNameBadEl() {
+ expectBuildExceptionContaining(
+ "correct_taskname_badel", "element message", "javac doesn't
support the");
+ }
+
+
/**
* A test class to check default properties
*/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]