[
https://issues.apache.org/jira/browse/TAP5-128?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12643346#action_12643346
]
Howard M. Lewis Ship commented on TAP5-128:
-------------------------------------------
I can see a problem in this code:
private void invoke(boolean reverse, ComponentCallback callback)
{
try
{ // Optimization: In the most general case (just the one component, no
mixins)
// invoke the callback on the component and be done ... no
iterators, no nothing.
if (components == null)
{
callback.run(coreComponent);
return;
}
Iterator<Component> i = reverse ?
InternalUtils.reverseIterator(components) : components.iterator();
while (i.hasNext()) callback.run(i.next());
}
catch (RuntimeException ex)
{
throw new TapestryException(ex.getMessage(), getLocation(), ex);
}
}
Looks like we work our way through the full components list (mixins plus the
component itself) even once the event is aborted (because a non-null/non-void
value was returned).
> Render phase short-circuiting is not implemented for methods of the same
> phase.
> -------------------------------------------------------------------------------
>
> Key: TAP5-128
> URL: https://issues.apache.org/jira/browse/TAP5-128
> Project: Tapestry 5
> Issue Type: Bug
> Reporter: Nick Westgate
> Priority: Critical
> Attachments: jira1662sample.tgz
>
>
> According to the docs on render phase short-circuiting for methods of the
> same phase:
> http://tapestry.apache.org/tapestry5/tapestry-core/guide/rendering.html
> "If a method returns a true or false value, this will short circuit
> processing.
> Other methods within the phase that would ordinarily be invoked will not be
> invoked."
> This is currently unimplemented. (Only other "inner" phases are
> short-circuited & not invoked.)
> Changes would primarily affect:
> org.apache.tapestry.internal.structure.ComponentCallback
> org.apache.tapestry.internal.structure.ComponentPageElementImpl
> In ComponentPageElementImpl.invoke(...), the loop:
> while (i.hasNext())
> callback.run(i.next());
> needs to implement the short circuiting, for example:
> while (i.hasNext())
> if (callback.run(i.next()))
> break;
> This change would cascade up to ComponentCallback and all its usage in
> ComponentPageElementImpl.
> Cheers,
> Nick.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]