To fix TRINIDAD-2078 SKIP_ITERATION forces visit of non-rendered
components
<https://issues.apache.org/jira/browse/TRINIDAD-2078?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13015621#comment-13015621>,
I proposed the following apis:
The proposed patch fixes the problem by reverting to delegating the
visiting of the children back to the components. We then:
1) Add to ComponentUtils:
/**
* @param visitContext
* @return <code>true</code> if this is a non-iterating visit.
*/
public static boolean isSkipIterationVisit(VisitContext visitContext)
So that Components can determine whether they should iterate when tree
visiting
And modify the behavior of UIXCollection since it is the base class of
all of the iterating components in Trinidad to switch inside it's
override of visitChildren and call a new protected method:
/**
* Performs a non-iterating visit of the children. The default
implementation visits all
* of the children. If the UIXCollection subclass doesn't visit some
of its children in
* certain cases, it needs to override this method.
* @param visitContext
* @param callback
* @return
*/
protected boolean visitChildrenWithoutIterating(
instead of the normal data visiting code if we are in a skip iteration
visit.
For convenience, I also made the following method on UIXComponent public:
/**
* Default implementation of visiting children that visits all
children without iterating
* @param visitContext the <code>VisitContext</code> for this visit
* @param callback the <code>VisitCallback</code> instance
* @return <code>true</code> if the visit is complete.
*/
protected final boolean visitAllChildren(
VisitContext visitContext,
VisitCallback callback)
And made it the default implementation of
visitChildrenWithoutIterating(), which should be sufficient for all of
the subclasses of UIXCollection that ship with Trinidad. It also happens
to be precisely the same behavior as the old code we are fixing.
-- Blake Sullivan