Browse Source

Provide more descriptive error messages whenunknown attributes and elements are encountered in the build file.Bugzilla: 1722

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269269 13f79535-47bb-0310-9956-ffa450edef68
master
glennm 24 years ago
parent
commit
84b68cc945
4 changed files with 54 additions and 20 deletions
  1. +44
    -10
      src/main/org/apache/tools/ant/IntrospectionHelper.java
  2. +8
    -8
      src/main/org/apache/tools/ant/ProjectHelper.java
  3. +1
    -1
      src/main/org/apache/tools/ant/RuntimeConfigurable.java
  4. +1
    -1
      src/main/org/apache/tools/ant/UnknownElement.java

+ 44
- 10
src/main/org/apache/tools/ant/IntrospectionHelper.java View File

@@ -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.


+ 8
- 8
src/main/org/apache/tools/ant/ProjectHelper.java View File

@@ -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);
}




+ 1
- 1
src/main/org/apache/tools/ant/RuntimeConfigurable.java View File

@@ -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();


+ 1
- 1
src/main/org/apache/tools/ant/UnknownElement.java View File

@@ -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);


Loading…
Cancel
Save