You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ta...@apache.org on 2018/12/05 17:22:15 UTC

[myfaces] 01/02: MYFACES-4272 [perf] avoid FormInfo instances

This is an automated email from the ASF dual-hosted git repository.

tandraschko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/myfaces.git

commit 5704e80bf22c156e2364c2bb50606e93e92ab4cd
Author: Thomas Andraschko <ta...@apache.org>
AuthorDate: Wed Dec 5 17:47:33 2018 +0100

    MYFACES-4272 [perf] avoid FormInfo instances
---
 .../apache/myfaces/renderkit/RendererUtils.java    | 26 ----------------------
 .../renderkit/html/HtmlCommandScriptRenderer.java  |  5 +++--
 .../html/base/HtmlButtonRendererBase.java          | 15 +++++++------
 .../html/base/HtmlInputFileRendererBase.java       |  5 +++--
 .../renderkit/html/base/HtmlLinkRendererBase.java  | 12 +++++-----
 .../renderkit/html/base/HtmlRadioRendererBase.java |  5 +++--
 .../renderkit/html/base/HtmlRendererUtils.java     |  3 ++-
 .../facelets/component/JsfElementRenderer.java     |  5 +++++
 8 files changed, 30 insertions(+), 46 deletions(-)

diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
index d30b39c..50e7067 100755
--- a/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/RendererUtils.java
@@ -41,7 +41,6 @@ import javax.faces.application.Resource;
 import javax.faces.application.ResourceHandler;
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
-import javax.faces.component.UIForm;
 import javax.faces.component.UIOutput;
 import javax.faces.component.UISelectMany;
 import javax.faces.component.UISelectOne;
@@ -861,31 +860,6 @@ public final class RendererUtils
         return i != null ? i.intValue() : defaultValue;
     }
 
-    /**
-     * Find the enclosing form of a component
-     * in the view-tree.
-     * All Subclasses of <code>UIForm</code> and all known
-     * form-families are searched for.
-     * <p>
-     * There might be additional form families
-     * which have to be explicitly entered here.</p>
-     *
-     * @param uiComponent
-     * @param facesContext
-     * @return FormInfo Information about the form - the form itself and its name.
-     */
-    public static UIComponent findNestingForm(UIComponent uiComponent,
-            FacesContext facesContext)
-    {
-        UIComponent parent = uiComponent.getParent();
-        while (parent != null && !(parent instanceof UIForm))
-        {
-            parent = parent.getParent();
-        }
-
-        return parent;
-    }
-
     public static boolean getBooleanValue(String attribute, Object value,
             boolean defaultValue)
     {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
index abb1ef1..0f047f7 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlCommandScriptRenderer.java
@@ -28,6 +28,7 @@ import java.util.Map;
 import java.util.RandomAccess;
 import java.util.Set;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIParameter;
 import javax.faces.component.behavior.AjaxBehavior;
 import javax.faces.component.behavior.ClientBehaviorContext;
@@ -40,13 +41,13 @@ import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 import javax.faces.event.ActionEvent;
 import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderer;
-import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.base.HtmlRenderer;
 import org.apache.myfaces.renderkit.html.base.HtmlRendererUtils;
 import org.apache.myfaces.renderkit.html.util.JavascriptContext;
 import org.apache.myfaces.renderkit.html.util.JavascriptUtils;
 import org.apache.myfaces.renderkit.html.util.ResourceUtils;
+import org.apache.myfaces.util.ComponentUtils;
 import org.apache.myfaces.util.SharedStringBuilder;
 import org.apache.myfaces.util.StringUtils;
 
@@ -179,7 +180,7 @@ public class HtmlCommandScriptRenderer extends HtmlRenderer
             if (component.getClientId(facesContext).equals(clientId))
             {
                 boolean disabled = HtmlRendererUtils.isDisabled(component);
-                UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+                UIForm form = ComponentUtils.closest(UIForm.class, component);
                 boolean activateActionEvent = false;
                 if (form != null && !disabled)
                 {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
index 37311a2..9c80bdb 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlButtonRendererBase.java
@@ -27,6 +27,7 @@ import java.util.Map;
 
 import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIParameter;
 import javax.faces.component.ValueHolder;
 import javax.faces.component.behavior.ClientBehavior;
@@ -44,6 +45,7 @@ import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.renderkit.html.util.JavascriptUtils;
 import org.apache.myfaces.renderkit.html.util.ResourceUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
+import org.apache.myfaces.util.ComponentUtils;
 
 public class HtmlButtonRendererBase
     extends HtmlRenderer
@@ -87,9 +89,9 @@ public class HtmlButtonRendererBase
     {
         String clientId = uiComponent.getClientId(facesContext);
         Map paramMap = facesContext.getExternalContext().getRequestParameterMap();
-        UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
         String hiddenLink = null;
-         
+
+        UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
         if (form != null)
         {
             hiddenLink = (String) facesContext.getExternalContext().getRequestParameterMap().get(
@@ -112,7 +114,7 @@ public class HtmlButtonRendererBase
         ResponseWriter writer = facesContext.getResponseWriter();
         
         // commandButton does not need to be nested in a form since JSF 2.0
-        UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+        UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
 
         boolean reset = isReset(uiComponent);
         boolean button = isButton(uiComponent);
@@ -276,7 +278,7 @@ public class HtmlButtonRendererBase
 
         writer.endElement(HTML.INPUT_ELEM);
         
-        UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+        UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
         if (form != null)
         {
             HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(
@@ -472,9 +474,8 @@ public class HtmlButtonRendererBase
             onClick.append(';');
             onClick.append("var oamSF = function(){");
         }
-        
-        UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
-        
+
+        UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);        
         if (form != null)
         {
             if (validParams != null && !validParams.isEmpty() )
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
index d8155f4..f25c3a0 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlInputFileRendererBase.java
@@ -37,17 +37,18 @@ import java.util.logging.Logger;
 import javax.faces.FacesException;
 import javax.faces.application.FacesMessage;
 import javax.faces.application.ProjectStage;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIViewRoot;
 import javax.faces.component.behavior.ClientBehavior;
 import javax.faces.component.behavior.ClientBehaviorHolder;
 import javax.faces.component.html.HtmlForm;
 import javax.faces.component.html.HtmlInputText;
 
-import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.renderkit.html.util.HttpPartWrapper;
 import org.apache.myfaces.renderkit.html.util.HTML;
 import org.apache.myfaces.renderkit.html.util.JSFAttr;
 import org.apache.myfaces.util.Assert;
+import org.apache.myfaces.util.ComponentUtils;
 
 public class HtmlInputFileRendererBase extends HtmlRenderer
 {
@@ -96,7 +97,7 @@ public class HtmlInputFileRendererBase extends HtmlRenderer
              (facesContext.getPartialViewContext().isPartialRequest() ||
               facesContext.getPartialViewContext().isAjaxRequest()))
         {
-            UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+            UIForm form = ComponentUtils.closest(UIForm.class, component);
             if (form != null && form instanceof HtmlForm)
             {
                 String content = ((HtmlForm) form).getEnctype();
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
index e5e53e4..0340b87 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlLinkRendererBase.java
@@ -31,6 +31,7 @@ import java.util.RandomAccess;
 
 import javax.faces.component.UICommand;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIOutcomeTarget;
 import javax.faces.component.UIOutput;
 import javax.faces.component.UIParameter;
@@ -50,6 +51,7 @@ import org.apache.myfaces.renderkit.html.util.JSFAttr;
 import org.apache.myfaces.renderkit.RendererUtils;
 import org.apache.myfaces.renderkit.html.util.ResourceUtils;
 import org.apache.myfaces.renderkit.html.util.HTML;
+import org.apache.myfaces.util.ComponentUtils;
 
 public abstract class HtmlLinkRendererBase
     extends HtmlRenderer
@@ -74,7 +76,7 @@ public abstract class HtmlLinkRendererBase
         if (component instanceof UICommand)
         {
             String clientId = component.getClientId(facesContext);
-            UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+            UIForm form = ComponentUtils.closest(UIForm.class, component);
             boolean disabled = HtmlRendererUtils.isDisabled(component);
             // MYFACES-3960 Decode, decode client behavior and queue action event at the end
             boolean activateActionEvent = false;
@@ -190,8 +192,7 @@ public abstract class HtmlLinkRendererBase
         {
             renderCommandLinkEnd(facesContext, component);
 
-            UIComponent form = RendererUtils.findNestingForm(component, facesContext);
-            
+            UIForm form = ComponentUtils.closest(UIForm.class, component);
             if (form != null)
             {
                 HtmlFormRendererBase.renderScrollHiddenInputIfNecessary(
@@ -223,7 +224,7 @@ public abstract class HtmlLinkRendererBase
         Map<String, List<ClientBehavior>> behaviors = null;
 
         // h:commandLink can be rendered outside a form, but with warning (jsf 2.0 TCK)
-        UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+        UIForm form = ComponentUtils.closest(UIForm.class, component);
         
         boolean disabled = HtmlRendererUtils.isDisabled(component);
         
@@ -1157,12 +1158,11 @@ public abstract class HtmlLinkRendererBase
     protected void renderCommandLinkEnd(FacesContext facesContext, UIComponent component)
             throws IOException
     {
-        UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+        UIForm form = ComponentUtils.closest(UIForm.class, component);
         
         ResponseWriter writer = facesContext.getResponseWriter();
         if (HtmlRendererUtils.isDisabled(component) || form == null)
         {
-
             writer.endElement(HTML.SPAN_ELEM);
         }
         else
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
index ccd786d..3ee5e68 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRadioRendererBase.java
@@ -32,6 +32,7 @@ import java.util.logging.Logger;
 import javax.faces.FacesException;
 
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIInput;
 import javax.faces.component.UISelectOne;
 import javax.faces.component.behavior.ClientBehavior;
@@ -142,7 +143,7 @@ public class HtmlRadioRendererBase
             else
             {
                 // Deferred case: find real component with attached selectItems
-                UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+                UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
                 GetSelectItemListCallback callback = new GetSelectItemListCallback(selectOne, group);
                 form.visitTree(
                         VisitContext.createVisitContext(facesContext, null, FIND_SELECT_LIST_HINTS),
@@ -409,7 +410,7 @@ public class HtmlRadioRendererBase
         String group = uiComponent instanceof HtmlSelectOneRadio ? ((HtmlSelectOneRadio) uiComponent).getGroup() : null;
         if (group != null && !group.isEmpty())
         {
-            UIComponent form = RendererUtils.findNestingForm(uiComponent, facesContext);
+            UIForm form = ComponentUtils.closest(UIForm.class, uiComponent);
             writer.writeAttribute(HTML.NAME_ATTR, form.getClientId(facesContext) +
                     facesContext.getNamingContainerSeparatorChar() + group, null);
         }
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
index 0fb054d..0db240a 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/base/HtmlRendererUtils.java
@@ -37,6 +37,7 @@ import java.util.logging.Logger;
 import javax.faces.FacesException;
 import javax.faces.component.EditableValueHolder;
 import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
 import javax.faces.component.UIInput;
 import javax.faces.component.UIOutcomeTarget;
 import javax.faces.component.UIOutput;
@@ -256,7 +257,7 @@ public final class HtmlRendererUtils
             String group = ((UISelectOne) component).getGroup();
             if (group != null && !group.isEmpty())
             {
-                UIComponent form = RendererUtils.findNestingForm(component, facesContext);
+                UIForm form = ComponentUtils.closest(UIForm.class, component);
                 String fullGroupId = form.getClientId(facesContext) +
                         facesContext.getNamingContainerSeparatorChar() + group;
                 if (paramMap.containsKey(fullGroupId))
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java b/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
index cdcb0c2..d3da6ed 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/component/JsfElementRenderer.java
@@ -62,6 +62,7 @@ public class JsfElementRenderer extends HtmlRenderer
         HtmlRendererUtils.decodeClientBehaviors(context, component);
     }
 
+    @Override
     public void encodeBegin(FacesContext facesContext, UIComponent component)
         throws IOException
     {
@@ -118,12 +119,14 @@ public class JsfElementRenderer extends HtmlRenderer
         
     }
 
+    @Override
     public void encodeChildren(FacesContext facesContext, UIComponent component)
         throws IOException
     {
         RendererUtils.renderChildren(facesContext, component);
     }
 
+    @Override
     public void encodeEnd(FacesContext facesContext, UIComponent component)
         throws IOException
     {
@@ -133,11 +136,13 @@ public class JsfElementRenderer extends HtmlRenderer
         writer.endElement(elementName);
     }
     
+    @Override
     protected boolean isCommonPropertiesOptimizationEnabled(FacesContext facesContext)
     {
         return true;
     }
     
+    @Override
     protected boolean isCommonEventsOptimizationEnabled(FacesContext facesContext)
     {
         return true;