From 034bab6f42243c58fb75f38f67c2c8b203bbd4ea Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Sun, 18 Mar 2018 17:36:21 +0900 Subject: [PATCH 1/4] Support concurrent on DefaultClassResolver --- src/main/java/ognl/DefaultClassResolver.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/ognl/DefaultClassResolver.java b/src/main/java/ognl/DefaultClassResolver.java index a103877b..0952dc00 100644 --- a/src/main/java/ognl/DefaultClassResolver.java +++ b/src/main/java/ognl/DefaultClassResolver.java @@ -30,7 +30,8 @@ //-------------------------------------------------------------------------- package ognl; -import java.util.*; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * Default class resolution. Uses Class.forName() to look up classes by name. @@ -41,7 +42,7 @@ */ public class DefaultClassResolver extends Object implements ClassResolver { - private Map classes = new HashMap(101); + private Map classes = new ConcurrentHashMap(101); public DefaultClassResolver() { @@ -61,7 +62,9 @@ public Class classForName(String className, Map context) throws ClassNotFoundExc classes.put("java.lang." + className, result); } } - classes.put(className, result); + if (result != null) { + classes.put(className, result); + } } return result; } From 1a8b0030a6bd4a8b15613fc8d33d194ca3aefdbb Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Sun, 18 Mar 2018 17:37:15 +0900 Subject: [PATCH 2/4] Fix indent on DefaultClassResolver --- src/main/java/ognl/DefaultClassResolver.java | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/ognl/DefaultClassResolver.java b/src/main/java/ognl/DefaultClassResolver.java index 0952dc00..db593a37 100644 --- a/src/main/java/ognl/DefaultClassResolver.java +++ b/src/main/java/ognl/DefaultClassResolver.java @@ -49,23 +49,23 @@ public DefaultClassResolver() super(); } - public Class classForName(String className, Map context) throws ClassNotFoundException - { - Class result = null; + public Class classForName(String className, Map context) throws ClassNotFoundException + { + Class result = null; if ((result = (Class)classes.get(className)) == null) { - try { - result = Class.forName(className); - } catch (ClassNotFoundException ex) { - if (className.indexOf('.') == -1) { - result = Class.forName("java.lang." + className); - classes.put("java.lang." + className, result); - } - } + try { + result = Class.forName(className); + } catch (ClassNotFoundException ex) { + if (className.indexOf('.') == -1) { + result = Class.forName("java.lang." + className); + classes.put("java.lang." + className, result); + } + } if (result != null) { - classes.put(className, result); + classes.put(className, result); } - } - return result; - } + } + return result; + } } From 7265768ab713a4d8861b2270137c4f27f72dfdf9 Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Sun, 18 Mar 2018 20:43:40 +0900 Subject: [PATCH 3/4] Refactring #46 --- src/main/java/ognl/DefaultClassResolver.java | 27 +++++++++----------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/main/java/ognl/DefaultClassResolver.java b/src/main/java/ognl/DefaultClassResolver.java index db593a37..8fc3eac4 100644 --- a/src/main/java/ognl/DefaultClassResolver.java +++ b/src/main/java/ognl/DefaultClassResolver.java @@ -42,7 +42,7 @@ */ public class DefaultClassResolver extends Object implements ClassResolver { - private Map classes = new ConcurrentHashMap(101); + private final Map classes = new ConcurrentHashMap<>(101); public DefaultClassResolver() { @@ -51,21 +51,18 @@ public DefaultClassResolver() public Class classForName(String className, Map context) throws ClassNotFoundException { - Class result = null; - - if ((result = (Class)classes.get(className)) == null) { - try { - result = Class.forName(className); - } catch (ClassNotFoundException ex) { - if (className.indexOf('.') == -1) { - result = Class.forName("java.lang." + className); - classes.put("java.lang." + className, result); - } - } - if (result != null) { - classes.put(className, result); - } + Class result = classes.get(className); + if (result != null) { + return result; + } + if (className.indexOf('.') == -1) { + String langClassName = "java.lang." + className; + result = Class.forName(langClassName); + classes.put(langClassName, result); + } else { + result = Class.forName(className); } + classes.put(className, result); return result; } } From 5c769ee006a5fa5ee8b55a9f9dc2f3feee44bfe7 Mon Sep 17 00:00:00 2001 From: Kazuki Shimizu Date: Mon, 19 Mar 2018 22:00:20 +0900 Subject: [PATCH 4/4] Polishing #46 --- src/main/java/ognl/DefaultClassResolver.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/ognl/DefaultClassResolver.java b/src/main/java/ognl/DefaultClassResolver.java index 8fc3eac4..1d0c08e0 100644 --- a/src/main/java/ognl/DefaultClassResolver.java +++ b/src/main/java/ognl/DefaultClassResolver.java @@ -55,13 +55,7 @@ public Class classForName(String className, Map context) throws ClassNotFoundExc if (result != null) { return result; } - if (className.indexOf('.') == -1) { - String langClassName = "java.lang." + className; - result = Class.forName(langClassName); - classes.put(langClassName, result); - } else { - result = Class.forName(className); - } + result = (className.indexOf('.') == -1) ? Class.forName("java.lang." + className) : Class.forName(className); classes.put(className, result); return result; }