DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17883>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17883 Custom task containers don't share property state across subtasks ------- Additional Comments From [EMAIL PROTECTED] 2003-03-12 16:58 ------- I agree with Pat... a new subclass to handle this for users would be nice. Here's my contribution to how I worked around the problem. I think you could create a subclass of TaskContainer to hold this stuff that Sequential could override. BTW... I wonder why Bugzilla hasn't yet made it possible to edit existing comments - would allow folks to clean up typos or sensitive information that should never have been posted. --- code below --- //-------------------------------------------------------------------- /** * Use reflection to find any public or protected method in * the hierarchy of <CODE>starterClass</CODE>. */ public static Method findMethod(Class starterClass, String methodName, Class[] definedArgTypes) { Class currentClass = starterClass; while ((currentClass != null)) { try { return currentClass.getDeclaredMethod(methodName, definedArgTypes); } catch (NoSuchMethodException e) { currentClass = currentClass.getSuperclass(); } } return null; } //-------------------------------------------------------------------- /** * Convenience method for the other findMethod() so that callers don't need * to send getClass(). */ public static Method findMethod(Object receiver, String methodName, Class[] definedArgTypes) { return findMethod(receiver.getClass(), methodName, definedArgTypes); } //-------------------------------------------------------------------- /** * Workaround for design change in Ant 1.5.2 with preserving property state * between contained tasks. In Ant 1.4.1, it won't find the isInvalid() * method, and will end up just calling the parent class maybeConfigure(), * so this approach is backward compatible. */ public void maybeConfigure() throws BuildException { Method isInvalidMethod = findMethod(this, "isInvalid", null); if (isInvalidMethod == null) { super.maybeConfigure(); return; } Object isInvalidResult = null; try { isInvalidResult = isInvalidMethod.invoke(this, new Object[] {}); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } if (((Boolean) isInvalidResult).booleanValue()) { super.maybeConfigure(); } else { Method maybeConfigureTwoArgMethod = null; maybeConfigureTwoArgMethod = findMethod(getRuntimeConfigurableWrapper(), "maybeConfigure", new Class[] { Project.class, boolean.class }); if (maybeConfigureTwoArgMethod == null) { // should not occur, since we already found isInvalid(), // which was made available in the same Ant version as // the 2-arg maybeConfigure() System.out.println("couldn't find method maybeConfigure"); return; } try { maybeConfigureTwoArgMethod.invoke (getRuntimeConfigurableWrapper(), new Object[] {getProject(), Boolean.FALSE}); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } } }