peterreilly 2003/12/30 05:05:50
Modified: src/main/org/apache/tools/ant Tag: ANT_16_BRANCH
IntrospectionHelper.java ProjectHelper.java
Log:
Sync with HEAD
Revision Changes Path
No revision
No revision
1.65.2.6 +38 -33
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.65.2.5
retrieving revision 1.65.2.6
diff -u -r1.65.2.5 -r1.65.2.6
--- IntrospectionHelper.java 17 Dec 2003 15:37:27 -0000 1.65.2.5
+++ IntrospectionHelper.java 30 Dec 2003 13:05:49 -0000 1.65.2.6
@@ -974,16 +974,6 @@
};
- // resolve relative paths through Project
- } else if
(org.apache.tools.ant.types.Path.class.equals(reflectedArg)) {
- return new AttributeSetter() {
- public void set(Project p, Object parent, String value)
- throws InvocationTargetException,
IllegalAccessException {
- m.invoke(parent, new Path[] {new Path(p, value)});
- }
-
- };
-
// EnumeratedAttributes have their own helper class
} else if (EnumeratedAttribute.class.isAssignableFrom(reflectedArg))
{
return new AttributeSetter() {
@@ -1001,37 +991,52 @@
};
// worst case. look for a public String constructor and use it
+ // also supports new Whatever(Project, String) as for Path or
Reference
// This is used (deliberately) for all primitives/wrappers other than
// char and boolean
} else {
+ boolean includeProject;
+ Constructor c;
try {
- final Constructor c =
- reflectedArg.getConstructor(new Class[]
{java.lang.String.class});
-
- return new AttributeSetter() {
- public void set(Project p, Object parent,
- String value)
- throws InvocationTargetException,
- IllegalAccessException, BuildException {
- try {
- Object attribute = c.newInstance(new
String[] {value});
- if (p != null) {
- p.setProjectReference(attribute);
- }
- m.invoke(parent, new Object[] {attribute});
- } catch (InstantiationException ie) {
- throw new BuildException(ie);
- }
- }
- };
-
+ // First try with Project.
+ c = reflectedArg.getConstructor(new Class[] {Project.class,
String.class});
+ includeProject = true;
} catch (NoSuchMethodException nme) {
- // ignore
+ // OK, try without.
+ try {
+ c = reflectedArg.getConstructor(new Class[]
{String.class});
+ includeProject = false;
+ } catch (NoSuchMethodException nme2) {
+ // Well, no matching constructor.
+ return null;
+ }
}
+ final boolean finalIncludeProject = includeProject;
+ final Constructor finalConstructor = c;
+
+ return new AttributeSetter() {
+ public void set(Project p, Object parent, String value)
+ throws InvocationTargetException,
IllegalAccessException, BuildException {
+ try {
+ Object[] args;
+ if (finalIncludeProject) {
+ args = new Object[] {p, value};
+ } else {
+ args = new Object[] {value};
+ }
+ Object attribute =
finalConstructor.newInstance(args);
+ if (p != null) {
+ p.setProjectReference(attribute);
+ }
+ m.invoke(parent, new Object[] {attribute});
+ } catch (InstantiationException ie) {
+ throw new BuildException(ie);
+ }
+ }
+ };
+
}
-
- return null;
}
/**
1.101.2.4 +2 -2 ant/src/main/org/apache/tools/ant/ProjectHelper.java
Index: ProjectHelper.java
===================================================================
RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/ProjectHelper.java,v
retrieving revision 1.101.2.3
retrieving revision 1.101.2.4
diff -u -r1.101.2.3 -r1.101.2.4
--- ProjectHelper.java 18 Nov 2003 11:29:06 -0000 1.101.2.3
+++ ProjectHelper.java 30 Dec 2003 13:05:49 -0000 1.101.2.4
@@ -569,10 +569,10 @@
+ ex.getLocation().toString()
+ ex.getMessage();
if (newLocation == null) {
- return new BuildException(errorMessage);
+ return new BuildException(errorMessage, ex);
} else {
return new BuildException(
- errorMessage, newLocation);
+ errorMessage, ex, newLocation);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]