You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by de...@apache.org on 2017/04/08 07:30:30 UTC

svn commit: r1790661 - /myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java

Author: deki
Date: Sat Apr  8 07:30:30 2017
New Revision: 1790661

URL: http://svn.apache.org/viewvc?rev=1790661&view=rev
Log:
TRINIDAD-2434: fixed performance issue when retrieving node type method

Modified:
    myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java

Modified: myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java?rev=1790661&r1=1790660&r2=1790661&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java (original)
+++ myfaces/trinidad/trunk/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/renderkit/core/xhtml/TreeRenderer.java Sat Apr  8 07:30:30 2017
@@ -881,22 +881,39 @@ public class TreeRenderer extends XhtmlR
     String nodeType = null;
     Object rowData = tree.getRowData();
     Class rowClass = rowData.getClass();
-    Method method = null;
+    Method method;
 
     try
     {
-      method = rowClass.getMethod("getNodeType");
+      method = retrieveGetNodeTypeMethod(rowClass);
       if (method != null && method.getReturnType().equals(String.class))
       {
         nodeType = (String) method.invoke(rowData);
       }
     }
     catch (IllegalAccessException e) { ; }
-    catch (NoSuchMethodException e) { ; }
     catch (InvocationTargetException e) { ; }
     return nodeType;
   }
 
+  private Method retrieveGetNodeTypeMethod(Class rowClass)
+  {
+    try {
+      synchronized (NODE_TYPE_METHOD_CACHE) {
+        if (NODE_TYPE_METHOD_CACHE.containsKey(rowClass))
+        {
+          return NODE_TYPE_METHOD_CACHE.get(rowClass);
+        }
+
+        Method getNodeTypeMethod = rowClass.getMethod("getNodeType");
+        NODE_TYPE_METHOD_CACHE.put(rowClass, getNodeTypeMethod);
+        return getNodeTypeMethod;
+      }
+    } catch (Exception e)
+    { return null; }
+
+  }
+
   protected String getNodeIconSelector(
     String nodeType,
     int    expandedState)
@@ -1202,6 +1219,7 @@ public class TreeRenderer extends XhtmlR
   // Key used by StyledTextBean to query style class
   static final String _STYLE_CLASS_KEY = "_styleClass";
 
+  private final Map<Class<?>, Method> NODE_TYPE_METHOD_CACHE = new HashMap<Class<?>, Method>();
   private PropertyKey _immediateKey;
 
   // translation keys