This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 27f5586b49 ISIS-3091: commons: for convenience, adds multimap variant: 
TreeMap of ArrayLists
27f5586b49 is described below

commit 27f5586b49ab0f9c615c519ea9084ece11987bcd
Author: andi-huber <[email protected]>
AuthorDate: Tue Jul 26 07:18:00 2022 +0200

    ISIS-3091: commons: for convenience, adds multimap variant: TreeMap of
    ArrayLists
---
 .../apache/isis/commons/internal/collections/_Multimaps.java   |  7 +++++++
 .../services/appfeat/ApplicationFeatureRepositoryDefault.java  | 10 ++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git 
a/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
 
b/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
index 86203164f2..e312d57260 100644
--- 
a/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
+++ 
b/commons/src/main/java/org/apache/isis/commons/internal/collections/_Multimaps.java
@@ -349,6 +349,13 @@ public class _Multimaps {
         return newListMultimap(HashMap<K, List<V>>::new, ArrayList::new);
     }
 
+    /**
+     * @return TreeMap of ArrayLists
+     */
+    public static <K, V> ListMultimap<K, V> newListTreeMultimap(){
+        return newListMultimap(TreeMap<K, List<V>>::new, ArrayList::new);
+    }
+
     /**
      * @return ConcurrentHashMap of CopyOnWriteArrayList (fully concurrent)
      */
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
index 8e3c4f79e8..eb57e7dfb8 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureRepositoryDefault.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.core.metamodel.services.appfeat;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -46,6 +45,8 @@ import 
org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
 import org.apache.isis.applib.services.appfeat.ApplicationMemberSort;
 import org.apache.isis.commons.internal.collections._Maps;
+import org.apache.isis.commons.internal.collections._Multimaps;
+import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
 import 
org.apache.isis.core.config.metamodel.services.ApplicationFeaturesInitConfiguration;
@@ -84,7 +85,7 @@ implements ApplicationFeatureRepository, MetamodelListener {
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
propertyFeatures = _Maps.newTreeMap();
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
collectionFeatures = _Maps.newTreeMap();
     private final SortedMap<ApplicationFeatureId, ApplicationFeature> 
actionFeatures = _Maps.newTreeMap();
-    private final SortedMap<String, List<ApplicationFeature>> 
memberFeaturesByLogicalTypeName = _Maps.newTreeMap();
+    private final ListMultimap<String, ApplicationFeature> 
memberFeaturesByLogicalTypeName = _Multimaps.newListTreeMultimap();
 
     private final IsisConfiguration configuration;
     private final SpecificationLoader specificationLoader;
@@ -135,7 +136,8 @@ implements ApplicationFeatureRepository, MetamodelListener {
         visitFeatureIdentifierByName(typeFeatures, featuresByName::put);
         visitFeatureIdentifierByName(memberFeatures, featuresByName::put);
         this.featureIdentifiersByName = 
Collections.unmodifiableMap(featuresByName);
-        memberFeatures.forEach((key, value) -> 
memberFeaturesByLogicalTypeName.computeIfAbsent(key.getLogicalTypeName(), k -> 
new ArrayList<>()).add(value));
+        memberFeatures.forEach((key, value) ->
+            
memberFeaturesByLogicalTypeName.putElement(key.getLogicalTypeName(), value));
     }
 
     private void visitFeatureIdentifierByName(
@@ -448,7 +450,7 @@ implements ApplicationFeatureRepository, MetamodelListener {
     }
 
     @Override
-    public SortedSet<ApplicationFeatureId> propertyIdsFor(LogicalType 
logicalType) {
+    public SortedSet<ApplicationFeatureId> propertyIdsFor(final LogicalType 
logicalType) {
         ApplicationFeatureId typeFeatureId = 
typeFeatureIdByLogicalType.get(logicalType);
         if (typeFeatureId == null) {
             return Collections.emptySortedSet();

Reply via email to