This is an automated email from the ASF dual-hosted git repository.
jasonhuynh pushed a commit to branch feature/GEODE-3247
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-3247 by this
push:
new a3027c2 Applied review changes
a3027c2 is described below
commit a3027c2e523c38a2485a02db898740a92deff2a7
Author: Jason Huynh <[email protected]>
AuthorDate: Tue Oct 3 11:49:37 2017 -0700
Applied review changes
---
.../cache/query/internal/AttributeDescriptor.java | 33 ++++------------------
.../geode/cache/query/internal/PathUtils.java | 2 +-
2 files changed, 7 insertions(+), 28 deletions(-)
diff --git
a/geode-core/src/main/java/org/apache/geode/cache/query/internal/AttributeDescriptor.java
b/geode-core/src/main/java/org/apache/geode/cache/query/internal/AttributeDescriptor.java
index 8bef658..55cfe2c 100644
---
a/geode-core/src/main/java/org/apache/geode/cache/query/internal/AttributeDescriptor.java
+++
b/geode-core/src/main/java/org/apache/geode/cache/query/internal/AttributeDescriptor.java
@@ -32,7 +32,6 @@ import org.apache.geode.cache.EntryDestroyedException;
import org.apache.geode.cache.query.NameNotFoundException;
import org.apache.geode.cache.query.QueryInvocationTargetException;
import org.apache.geode.cache.query.QueryService;
-import org.apache.geode.cache.query.types.ObjectType;
import org.apache.geode.internal.cache.Token;
import org.apache.geode.internal.i18n.LocalizedStrings;
import org.apache.geode.pdx.JSONFormatter;
@@ -52,8 +51,7 @@ public class AttributeDescriptor {
private final String _name;
private final MethodInvocationAuthorizer _methodInvocationAuthorizer;
/** cache for remembering the correct Member for a class and attribute */
- private static final ConcurrentMap _local_field_cache = new
ConcurrentHashMap();
- private static final ConcurrentMap _local_method_cache = new
ConcurrentHashMap();
+ private static final ConcurrentMap<List, Member> _localCache = new
ConcurrentHashMap();
@@ -140,11 +138,6 @@ public class AttributeDescriptor {
}
}
-
- Member getReadMember(ObjectType targetType) throws NameNotFoundException {
- return getReadMember(targetType.resolveClass());
- }
-
Member getReadMember(Class targetClass) throws NameNotFoundException {
// mapping: public field (same name), method (getAttribute()),
@@ -153,31 +146,17 @@ public class AttributeDescriptor {
key.add(targetClass);
key.add(_name);
- Member m = (Member) _local_field_cache.get(key);
- if (m != null) {
- return m;
- } else {
- m = (Member) _local_method_cache.get(key);
+ Member m = _localCache.computeIfAbsent(key, k -> {
+ Member member = getReadField(targetClass);
+ return member == null ? getReadMethod(targetClass) : member;
+ });
- if (m != null) {
- return m;
- }
- }
-
- m = getReadField(targetClass);
if (m == null) {
- m = getReadMethod(targetClass);
- } else {
- _local_field_cache.putIfAbsent(key, m);
- }
-
- if (m != null) {
- _local_method_cache.putIfAbsent(key, m);
- } else {
throw new NameNotFoundException(
LocalizedStrings.AttributeDescriptor_NO_PUBLIC_ATTRIBUTE_NAMED_0_WAS_FOUND_IN_CLASS_1
.toLocalizedString(new Object[] {_name, targetClass.getName()}));
}
+
// override security for nonpublic derived classes with public members
((AccessibleObject) m).setAccessible(true);
return m;
diff --git
a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PathUtils.java
b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PathUtils.java
index 4c7141f..f7daac6 100644
---
a/geode-core/src/main/java/org/apache/geode/cache/query/internal/PathUtils.java
+++
b/geode-core/src/main/java/org/apache/geode/cache/query/internal/PathUtils.java
@@ -114,7 +114,7 @@ public class PathUtils {
ObjectType currentType = types[i - 1];
Member member = new AttributeDescriptor(
context.getCache().getQueryService().getMethodInvocationAuthorizer(),
pathArray[i - 1])
- .getReadMember(currentType);
+ .getReadMember(currentType.resolveClass());
if (member instanceof Field)
types[i] = TypeUtils.getObjectType(((Field) member).getType());
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].