EXTVAL-145 cache for renderer-interceptors - thx to Thomas Andraschko

git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk@1359915 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
index 9b4b62b..e19b493 100644
--- a/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
+++ b/core/src/main/java/org/apache/myfaces/extensions/validator/core/ExtValContext.java
@@ -76,6 +76,8 @@
 
     private SkipValidationEvaluator skipValidationEvaluator;
 
+    private List<RendererInterceptor> rendererInterceptorCache = null;
+
     private Map<String, Object> globalProperties = new HashMap<String, Object>();
 
     /**
@@ -249,7 +251,12 @@
      */
     public List<RendererInterceptor> getRendererInterceptors()
     {
-        return new ArrayList<RendererInterceptor>(this.rendererInterceptors.values());
+        if (this.rendererInterceptorCache == null)
+        {
+            this.rendererInterceptorCache = new ArrayList<RendererInterceptor>(this.rendererInterceptors.values());
+        }
+
+        return this.rendererInterceptorCache;
     }
 
     public boolean registerRendererInterceptor(RendererInterceptor rendererInterceptor)
@@ -262,6 +269,7 @@
             }
 
             this.rendererInterceptors.put(rendererInterceptor.getInterceptorId(), rendererInterceptor);
+            this.rendererInterceptorCache = new ArrayList<RendererInterceptor>(this.rendererInterceptors.values());
         }
         return true;
     }
@@ -273,6 +281,7 @@
         synchronized (ExtValContext.class)
         {
             this.rendererInterceptors.remove(rendererInterceptor.getInterceptorId());
+            this.rendererInterceptorCache = new ArrayList<RendererInterceptor>(this.rendererInterceptors.values());
         }
     }