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