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 [[email protected]]
- * @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: [email protected]
For additional commands, e-mail: [email protected]