git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269269 13f79535-47bb-0310-9956-ffa450edef68master
@@ -219,8 +219,9 @@ public class IntrospectionHelper { | |||
throws BuildException { | |||
AttributeSetter as = (AttributeSetter) attributeSetters.get(attributeName); | |||
if (as == null) { | |||
String msg = "Class " + element.getClass().getName() + | |||
" doesn't support the \"" + attributeName + "\" attribute"; | |||
String msg = getElementName(p, element) + | |||
//String msg = "Class " + element.getClass().getName() + | |||
" doesn't support the \"" + attributeName + "\" attribute."; | |||
throw new BuildException(msg); | |||
} | |||
try { | |||
@@ -240,10 +241,11 @@ public class IntrospectionHelper { | |||
/** | |||
* Adds PCDATA areas. | |||
*/ | |||
public void addText(Object element, String text) { | |||
public void addText(Project project, Object element, String text) { | |||
if (addText == null) { | |||
String msg = "Class " + element.getClass().getName() + | |||
" doesn't support nested text elements"; | |||
String msg = getElementName(project, element) + | |||
//String msg = "Class " + element.getClass().getName() + | |||
" doesn't support nested text data."; | |||
throw new BuildException(msg); | |||
} | |||
try { | |||
@@ -263,12 +265,13 @@ public class IntrospectionHelper { | |||
/** | |||
* Creates a named nested element. | |||
*/ | |||
public Object createElement(Object element, String elementName) | |||
public Object createElement(Project project, Object element, String elementName) | |||
throws BuildException { | |||
NestedCreator nc = (NestedCreator) nestedCreators.get(elementName); | |||
if (nc == null) { | |||
String msg = "Class " + element.getClass().getName() + | |||
" doesn't support the nested \"" + elementName + "\" element"; | |||
String msg = getElementName(project, element) + | |||
//String msg = "Class " + element.getClass().getName() + | |||
" doesn't support the nested \"" + elementName + "\" element."; | |||
throw new BuildException(msg); | |||
} | |||
try { | |||
@@ -296,7 +299,7 @@ public class IntrospectionHelper { | |||
Class nt = (Class) nestedTypes.get(elementName); | |||
if (nt == null) { | |||
String msg = "Class " + bean.getName() + | |||
" doesn't support the nested \"" + elementName + "\" element"; | |||
" doesn't support the nested \"" + elementName + "\" element."; | |||
throw new BuildException(msg); | |||
} | |||
return nt; | |||
@@ -310,7 +313,7 @@ public class IntrospectionHelper { | |||
Class at = (Class) attributeTypes.get(attributeName); | |||
if (at == null) { | |||
String msg = "Class " + bean.getName() + | |||
" doesn't support the \"" + attributeName + "\" attribute"; | |||
" doesn't support the \"" + attributeName + "\" attribute."; | |||
throw new BuildException(msg); | |||
} | |||
return at; | |||
@@ -500,6 +503,37 @@ public class IntrospectionHelper { | |||
return null; | |||
} | |||
protected String getElementName(Project project, Object element) | |||
{ | |||
Hashtable elements = project.getTaskDefinitions(); | |||
String typeName = "task"; | |||
if (!elements.contains( element.getClass() )) | |||
{ | |||
elements = project.getDataTypeDefinitions(); | |||
typeName = "data type"; | |||
if (!elements.contains( element.getClass() )) | |||
{ | |||
elements = null; | |||
} | |||
} | |||
if (elements != null) | |||
{ | |||
Enumeration e = elements.keys(); | |||
while (e.hasMoreElements()) | |||
{ | |||
String elementName = (String) e.nextElement(); | |||
Class elementClass = (Class) elements.get( elementName ); | |||
if ( element.getClass().equals( elementClass ) ) | |||
{ | |||
return "The <" + elementName + "> " + typeName; | |||
} | |||
} | |||
} | |||
return "Class " + element.getClass().getName(); | |||
} | |||
/** | |||
* extract the name of a property from a method name - subtracting | |||
* a given prefix. | |||
@@ -490,7 +490,7 @@ public class ProjectHelper { | |||
public void characters(char[] buf, int start, int end) throws SAXParseException { | |||
if (wrapper == null) { | |||
try { | |||
addText(task, buf, start, end); | |||
addText(project, task, buf, start, end); | |||
} catch (BuildException exc) { | |||
throw new SAXParseException(exc.getMessage(), locator, exc); | |||
} | |||
@@ -536,7 +536,7 @@ public class ProjectHelper { | |||
child = new UnknownElement(propType.toLowerCase()); | |||
((UnknownElement) target).addChild((UnknownElement) child); | |||
} else { | |||
child = ih.createElement(target, propType.toLowerCase()); | |||
child = ih.createElement(project, target, propType.toLowerCase()); | |||
} | |||
configureId(child, attrs); | |||
@@ -556,7 +556,7 @@ public class ProjectHelper { | |||
public void characters(char[] buf, int start, int end) throws SAXParseException { | |||
if (parentWrapper == null) { | |||
try { | |||
addText(child, buf, start, end); | |||
addText(project, child, buf, start, end); | |||
} catch (BuildException exc) { | |||
throw new SAXParseException(exc.getMessage(), locator, exc); | |||
} | |||
@@ -609,7 +609,7 @@ public class ProjectHelper { | |||
public void characters(char[] buf, int start, int end) throws SAXParseException { | |||
try { | |||
addText(element, buf, start, end); | |||
addText(project, element, buf, start, end); | |||
} catch (BuildException exc) { | |||
throw new SAXParseException(exc.getMessage(), locator, exc); | |||
} | |||
@@ -648,15 +648,15 @@ public class ProjectHelper { | |||
/** | |||
* Adds the content of #PCDATA sections to an element. | |||
*/ | |||
public static void addText(Object target, char[] buf, int start, int end) | |||
public static void addText(Project project, Object target, char[] buf, int start, int end) | |||
throws BuildException { | |||
addText(target, new String(buf, start, end)); | |||
addText(project, target, new String(buf, start, end)); | |||
} | |||
/** | |||
* Adds the content of #PCDATA sections to an element. | |||
*/ | |||
public static void addText(Object target, String text) | |||
public static void addText(Project project, Object target, String text) | |||
throws BuildException { | |||
if (text == null || text.trim().length() == 0) { | |||
@@ -666,7 +666,7 @@ public class ProjectHelper { | |||
if(target instanceof TaskAdapter) | |||
target = ((TaskAdapter) target).getProxy(); | |||
IntrospectionHelper.getHelper(target.getClass()).addText(target, text); | |||
IntrospectionHelper.getHelper(target.getClass()).addText(project, target, text); | |||
} | |||
@@ -135,7 +135,7 @@ public class RuntimeConfigurable { | |||
attributes = null; | |||
} | |||
if (characters.length() != 0) { | |||
ProjectHelper.addText(wrappedObject, characters.toString()); | |||
ProjectHelper.addText(p, wrappedObject, characters.toString()); | |||
characters.setLength(0); | |||
} | |||
Enumeration enum = children.elements(); | |||
@@ -140,7 +140,7 @@ public class UnknownElement extends Task { | |||
for (int i=0; i<children.size(); i++) { | |||
UnknownElement child = (UnknownElement) children.elementAt(i); | |||
Object realChild = ih.createElement(parent, child.getTag()); | |||
Object realChild = ih.createElement(project, parent, child.getTag()); | |||
RuntimeConfigurable childWrapper = parentWrapper.getChild(i); | |||
childWrapper.setProxy(realChild); | |||
child.handleChildren(realChild, childWrapper); | |||