Updated Branches: refs/heads/markup-driven-component-tree 24d0041d4 -> 13d501d98
Markup driven tree - Add a setting that enables the markup-driven tree construction Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/13d501d9 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/13d501d9 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/13d501d9 Branch: refs/heads/markup-driven-component-tree Commit: 13d501d98f8a5670a157187e98667820793ff400 Parents: 24d0041 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Thu Jan 23 18:02:04 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Thu Jan 23 18:02:04 2014 +0200 ---------------------------------------------------------------------- .../java/org/apache/wicket/MarkupContainer.java | 19 +++++++++++++++++-- .../src/main/java/org/apache/wicket/Page.java | 6 ++++++ .../org/apache/wicket/settings/PageSettings.java | 17 +++++++++++++++++ .../markupdriventree/MarkupDrivenTreeTest.java | 17 +++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/13d501d9/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java index ad8fb7e..3bf8c17 100644 --- a/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java +++ b/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java @@ -1898,8 +1898,23 @@ public abstract class MarkupContainer extends Component implements Iterable<Comp @Override final void buildComponentTree() { - ComponentTreeBuilder builder = new ComponentTreeBuilder(); - builder.rebuild(this); + if (isMarkupDrivenComponentTreeEnabled()) + { + ComponentTreeBuilder builder = new ComponentTreeBuilder(); + builder.rebuild(this); + } + } + + protected boolean isMarkupDrivenComponentTreeEnabled() + { + // TODO this method is called once per MarkupContainer's life + // Check whether this traversal to the parent is causing perf regression + MarkupContainer parent = getParent(); + if (parent != null) + { + return parent.isMarkupDrivenComponentTreeEnabled(); + } + return false; } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/13d501d9/wicket-core/src/main/java/org/apache/wicket/Page.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Page.java b/wicket-core/src/main/java/org/apache/wicket/Page.java index 4a1f9ad..9791d8f 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Page.java +++ b/wicket-core/src/main/java/org/apache/wicket/Page.java @@ -1042,4 +1042,10 @@ public abstract class Page extends MarkupContainer implements IRedirectListener, { return renderedComponents != null && renderedComponents.contains(component); } + + @Override + protected boolean isMarkupDrivenComponentTreeEnabled() + { + return getApplication().getPageSettings().isMarkupDrivenComponentTreeEnabled(); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/13d501d9/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java index aa8a351..9d5dabf 100644 --- a/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java +++ b/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java @@ -51,6 +51,12 @@ public class PageSettings private boolean callListenerInterfaceAfterExpiry = false; /** + * determines whether Wicket should (re)construct the Java component + * tree by reading the markup before {@link org.apache.wicket.Component#onInitialize()} + */ + private boolean markupDrivenComponentTreeEnabled = false; + + /** * Adds a component resolver to the list. * * @param resolver @@ -146,4 +152,15 @@ public class PageSettings { this.callListenerInterfaceAfterExpiry = callListenerInterfaceAfterExpiry; } + + public boolean isMarkupDrivenComponentTreeEnabled() + { + return markupDrivenComponentTreeEnabled; + } + + public void setMarkupDrivenComponentTreeEnabled(boolean markupDrivenComponentTreeEnabled) + { + this.markupDrivenComponentTreeEnabled = markupDrivenComponentTreeEnabled; + } + } http://git-wip-us.apache.org/repos/asf/wicket/blob/13d501d9/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java index 7244584..413fa45 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markupdriventree/MarkupDrivenTreeTest.java @@ -24,6 +24,8 @@ import org.apache.wicket.markupdriventree.components.ComponentA; import org.apache.wicket.markupdriventree.components.ComponentB; import org.apache.wicket.markupdriventree.components.ComponentC; import org.apache.wicket.markupdriventree.components.PanelA; +import org.apache.wicket.mock.MockApplication; +import org.apache.wicket.protocol.http.WebApplication; import org.hamcrest.Matchers; import org.junit.Test; @@ -32,6 +34,21 @@ import org.junit.Test; */ public class MarkupDrivenTreeTest extends WicketTestCase { + @Override + protected WebApplication newApplication() + { + WebApplication application = new MockApplication() + { + @Override + protected void init() + { + super.init(); + getPageSettings().setMarkupDrivenComponentTreeEnabled(true); + } + }; + return application; + } + @Test public void page1() {
