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