Author: markt
Date: Fri Jul 12 12:00:26 2013
New Revision: 1502522

URL: http://svn.apache.org/r1502522
Log:
More updates for the new method FunctionMapper#mapFunction
- null method should remove an entry from the map
- ensure implementations that need to override new method do so
- fix concurrency issues in FunctionMapperImpl
- align methods that add to the map to new signature

Modified:
    tomcat/trunk/java/javax/el/StandardELContext.java
    tomcat/trunk/java/org/apache/el/lang/FunctionMapperFactory.java
    tomcat/trunk/java/org/apache/el/lang/FunctionMapperImpl.java
    tomcat/trunk/java/org/apache/jasper/compiler/Validator.java

Modified: tomcat/trunk/java/javax/el/StandardELContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/StandardELContext.java?rev=1502522&r1=1502521&r2=1502522&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/StandardELContext.java (original)
+++ tomcat/trunk/java/javax/el/StandardELContext.java Fri Jul 12 12:00:26 2013
@@ -200,7 +200,11 @@ public class StandardELContext extends E
         public void mapFunction(String prefix, String localName,
                 Method method) {
             String key = prefix + ':' + localName;
-            methods.put(key, method);
+            if (method == null) {
+                methods.remove(key);
+            } else {
+                methods.put(key, method);
+            }
         }
     }
 }

Modified: tomcat/trunk/java/org/apache/el/lang/FunctionMapperFactory.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/FunctionMapperFactory.java?rev=1502522&r1=1502521&r2=1502522&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/FunctionMapperFactory.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/FunctionMapperFactory.java Fri Jul 12 
12:00:26 2013
@@ -48,11 +48,21 @@ public class FunctionMapperFactory exten
         }
         Method m = this.target.resolveFunction(prefix, localName);
         if (m != null) {
-            this.memento.addFunction(prefix, localName, m);
+            this.memento.mapFunction(prefix, localName, m);
         }
         return m;
     }
 
+
+    @Override
+    public void mapFunction(String prefix, String localName, Method method) {
+        if (this.memento == null) {
+            this.memento = new FunctionMapperImpl();
+        }
+        memento.mapFunction(prefix, localName, method);
+    }
+
+
     public FunctionMapper create() {
         return this.memento;
     }

Modified: tomcat/trunk/java/org/apache/el/lang/FunctionMapperImpl.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/FunctionMapperImpl.java?rev=1502522&r1=1502521&r2=1502522&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/FunctionMapperImpl.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/FunctionMapperImpl.java Fri Jul 12 
12:00:26 2013
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.el.lang;
 
 import java.io.Externalizable;
@@ -22,8 +21,8 @@ import java.io.IOException;
 import java.io.ObjectInput;
 import java.io.ObjectOutput;
 import java.lang.reflect.Method;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.el.FunctionMapper;
 
@@ -32,14 +31,13 @@ import org.apache.el.util.ReflectionUtil
 
 /**
  * @author Jacob Hookom [ja...@hookom.net]
- * @version $Id$
  */
 public class FunctionMapperImpl extends FunctionMapper implements
         Externalizable {
 
     private static final long serialVersionUID = 1L;
 
-    protected Map<String, Function> functions = null;
+    protected Map<String, Function> functions = new ConcurrentHashMap<>();
 
     /*
      * (non-Javadoc)
@@ -49,20 +47,21 @@ public class FunctionMapperImpl extends 
      */
     @Override
     public Method resolveFunction(String prefix, String localName) {
-        if (this.functions != null) {
-            Function f = this.functions.get(prefix + ":" + localName);
-            return f.getMethod();
+        Function f = this.functions.get(prefix + ":" + localName);
+        if (f == null) {
+            return null;
         }
-        return null;
+        return f.getMethod();
     }
 
-    public void addFunction(String prefix, String localName, Method m) {
-        if (this.functions == null) {
-            this.functions = new HashMap<>();
-        }
-        Function f = new Function(prefix, localName, m);
-        synchronized (this) {
-            this.functions.put(prefix+":"+localName, f);
+    @Override
+    public void mapFunction(String prefix, String localName, Method m) {
+        String key = prefix + ":" + localName;
+        if (m == null) {
+            functions.remove(key);
+        } else {
+            Function f = new Function(prefix, localName, m);
+            functions.put(key, f);
         }
     }
 

Modified: tomcat/trunk/java/org/apache/jasper/compiler/Validator.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Validator.java?rev=1502522&r1=1502521&r2=1502522&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Validator.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Validator.java Fri Jul 12 
12:00:26 2013
@@ -1645,8 +1645,10 @@ class Validator {
 
                 private HashMap<String, Method> fnmap = new HashMap<>();
 
-                public void mapFunction(String fnQName, Method method) {
-                    fnmap.put(fnQName, method);
+                @Override
+                public void mapFunction(String prefix, String localName,
+                        Method method) {
+                    fnmap.put(prefix + ":" + localName, method);
                 }
 
                 @Override
@@ -1694,7 +1696,7 @@ class Validator {
                         err.jspError("jsp.error.noFunctionMethod", n
                                 .getMethodName(), n.getName(), c.getName());
                     }
-                    fmapper.mapFunction(n.getPrefix() + ':' + n.getName(),
+                    fmapper.mapFunction(n.getPrefix(), n.getName(),
                             method);
                 }
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to