This is an automated email from the ASF dual-hosted git repository. emilles pushed a commit to branch GROOVY-11841 in repository https://gitbox.apache.org/repos/asf/groovy.git
commit db96c928511f56037fa16aa25cab35cd01faccba Author: Eric Milles <[email protected]> AuthorDate: Thu Jan 15 08:56:35 2026 -0600 GROOVY-11841: use `ConcurrentHashMap` for mutable property index maps --- src/main/java/groovy/lang/MetaClassImpl.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java index ac6e5ead70..36fe87d98b 100644 --- a/src/main/java/groovy/lang/MetaClassImpl.java +++ b/src/main/java/groovy/lang/MetaClassImpl.java @@ -153,12 +153,13 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass { protected final boolean isMap; protected final MetaMethodIndex metaMethodIndex; - private static Map<String, MetaProperty> subMap(Map<CachedClass, LinkedHashMap<String, MetaProperty>> map, CachedClass key) { + private static Map<String, MetaProperty> subMap(Map<CachedClass, Map<String, MetaProperty>> map, CachedClass key) { return map.computeIfAbsent(key, k -> new LinkedHashMap<>()); } - private final Map<CachedClass, LinkedHashMap<String, MetaProperty>> classPropertyIndexForSuper = new LinkedHashMap<>(); - private final Map<CachedClass, LinkedHashMap<String, MetaProperty>> classPropertyIndex = new LinkedHashMap<>(); + private final Map<CachedClass, Map<String, MetaProperty>> classPropertyIndexForSuper = new ConcurrentHashMap<>(); + private final Map<CachedClass, Map<String, MetaProperty>> classPropertyIndex = new ConcurrentHashMap<>(); private final Map<String, MetaProperty> staticPropertyIndex = new LinkedHashMap<>(); + private final Map<String, MetaMethod> listeners = new LinkedHashMap<>(); private final List<MetaMethod> allMethods = new ArrayList<>(); private final Set<MetaMethod> newGroovyMethodsSet = new LinkedHashSet<>(); @@ -2483,7 +2484,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass { } } - private void applyStrayPropertyMethods(Iterable<CachedClass> classes, Map<CachedClass, LinkedHashMap<String, MetaProperty>> propertyIndex, boolean isThis) { + private void applyStrayPropertyMethods(Iterable<CachedClass> classes, Map<CachedClass, Map<String, MetaProperty>> propertyIndex, boolean isThis) { for (CachedClass cc : classes) { applyStrayPropertyMethods(cc, subMap(propertyIndex, cc), isThis); }
