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

daim pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 7aada40fcd OAK-11602 : removed usage of Guava's ImmutableSet.copyOf 
with LinkedSet (#2178)
7aada40fcd is described below

commit 7aada40fcdd70107fbfe929afa2c04eebbdd58a8
Author: Rishabh Kumar <[email protected]>
AuthorDate: Sun Mar 16 20:58:43 2025 +0530

    OAK-11602 : removed usage of Guava's ImmutableSet.copyOf with LinkedSet 
(#2178)
    
    * OAK-11602 : removed usage of Guava's ImmutableSet.copyOf with LinkedSet
    
    * OAK-11602 : wrapped Set in Collections.unmodifiableSet wherever we are 
sending/receiving it to outer world
    
    * OAK-11602 : revert changes from 7 modules
    
    ---------
    
    Co-authored-by: Rishabh Kumar <[email protected]>
---
 .../impl/principal/AutoMembershipPrincipals.java   |  4 +++-
 .../ExternalAuthorizableActionProvider.java        |  3 ++-
 .../principal/ExternalGroupPrincipalProvider.java  |  3 ++-
 .../impl/principal/ProtectionConfigImpl.java       |  5 +++--
 .../authorization/AbstractHasItemGetItemTest.java  |  3 ++-
 .../oak/commons/collections/SetUtils.java          |  2 +-
 .../apache/jackrabbit/oak/spi/mount/MountInfo.java |  2 +-
 .../jackrabbit/oak/spi/observation/ChangeSet.java  | 12 +++++++-----
 .../oak/plugins/migration/NodeStateCopier.java     | 22 +++++++++++-----------
 .../token/TokenConfigurationImpl.java              |  4 +++-
 .../authorization/restriction/CurrentPattern.java  |  4 +++-
 .../authorization/restriction/ItemNamePattern.java |  4 +++-
 .../authorization/restriction/NodeTypePattern.java |  4 +++-
 .../authorization/restriction/PrefixPattern.java   |  4 +++-
 .../security/user/RepMembersConflictHandler.java   |  8 +++++---
 .../authorization/models/simplifiedroles/Role.java |  4 +++-
 .../ThreeRolesPermissionProvider.java              |  6 ++++--
 .../principal/CustomPrincipalProvider.java         |  3 ++-
 .../document/flatfile/PathElementComparator.java   |  3 ++-
 19 files changed, 63 insertions(+), 37 deletions(-)

diff --git 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java
 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java
index 4e82e98a87..7b3a8da36a 100644
--- 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java
+++ 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/AutoMembershipPrincipals.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.guava.common.collect.Iterators;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.basic.AutoMembershipConfig;
 import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
 import org.jetbrains.annotations.NotNull;
@@ -32,6 +33,7 @@ import javax.jcr.RepositoryException;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -220,7 +222,7 @@ final class AutoMembershipPrincipals {
                 }
             }
             // only cache the principal instance but not the group (tree might 
become disconnected)
-            principalMap.put(idpName, ImmutableSet.copyOf(map.keySet()));
+            principalMap.put(idpName, 
Collections.unmodifiableSet(SetUtils.toLinkedSet(map.keySet())));
         } else {
             // resolve Group objects from cached principals
             principalMap.get(idpName).forEach(groupPrincipal -> {
diff --git 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java
 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java
index b20a86ac1c..bfec5b7453 100644
--- 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java
+++ 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalAuthorizableActionProvider.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
@@ -199,7 +200,7 @@ public final class ExternalAuthorizableActionProvider 
implements AuthorizableAct
         
         private static void updateAutoMembershipMap(@NotNull Map<String, 
Set<String>> map, @NotNull String syncHandlerName, 
                                                     @NotNull String idpName, 
@NotNull String[] membership) {
-            Set<String> userMembership = ImmutableSet.copyOf(membership);
+            Set<String> userMembership = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(membership));
             Set<String> previous = map.put(idpName, userMembership);
             if (previous != null) {
                 String msg = previous.equals(userMembership) ? "Duplicate" : 
"Colliding";
diff --git 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
index c60e44cf12..cebfafe1ae 100644
--- 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
+++ 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
@@ -57,6 +57,7 @@ import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyValues;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
@@ -327,7 +328,7 @@ class ExternalGroupPrincipalProvider implements 
PrincipalProvider, ExternalIdent
                 return Collections.emptyIterator();
             }
 
-            Set<Value> valueSet = ImmutableSet.copyOf(vs);
+            Set<Value> valueSet = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(vs));
             Iterator<Group> declared = 
Iterators.filter(Iterators.transform(valueSet.iterator(), value -> {
                 try {
                     String groupPrincipalName = value.getString();
diff --git 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java
 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java
index afc52c42d4..751f620a91 100644
--- 
a/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java
+++ 
b/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ProtectionConfigImpl.java
@@ -20,6 +20,7 @@ import 
org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ProtectionConfig;
 import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
@@ -58,8 +59,8 @@ public class ProtectionConfigImpl implements ProtectionConfig 
{
 
     @Activate
     protected void activate(Map<String, Object> properties) {
-        propertyNames = 
ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("propertyNames"),
 new String[0]));
-        nodeNames = 
ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("nodeNames"), 
new String[0]));
+        propertyNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("propertyNames"),
 new String[0])));
+        nodeNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("nodeNames"),
 new String[0])));
     }
     
     @Override
diff --git 
a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java
 
b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java
index 2e5a219e7b..459d587274 100644
--- 
a/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java
+++ 
b/oak-benchmarks/src/main/java/org/apache/jackrabbit/oak/benchmark/authorization/AbstractHasItemGetItemTest.java
@@ -25,6 +25,7 @@ import org.apache.jackrabbit.api.security.user.UserManager;
 import 
org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
 import org.apache.jackrabbit.oak.benchmark.ReadDeepTreeTest;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import org.jetbrains.annotations.NotNull;
 
@@ -86,7 +87,7 @@ abstract class AbstractHasItemGetItemTest extends 
ReadDeepTreeTest {
         createForEachPrincipal(principal, acMgr, allPrivileges);
 
         adminSession.save();
-        nodeSet = ImmutableSet.copyOf(nodePaths);
+        nodeSet = SetUtils.toLinkedSet(nodePaths);
     }
 
     private void createForEachPrincipal(@NotNull Principal pGrantedRead, 
@NotNull JackrabbitAccessControlManager acMgr, @NotNull List<Privilege> 
allPrivileges) throws RepositoryException {
diff --git 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java
 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java
index cc736bf2b1..e5bde32959 100644
--- 
a/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java
+++ 
b/oak-commons/src/main/java/org/apache/jackrabbit/oak/commons/collections/SetUtils.java
@@ -114,7 +114,7 @@ public class SetUtils {
      * @param <T> the type of the elements
      */
     @NotNull
-    public static <T> Set<T> toLinkedSet(@NotNull  final Iterable<T> iterable) 
{
+    public static <T> Set<T> toLinkedSet(@NotNull  final Iterable<? extends T> 
iterable) {
         Objects.requireNonNull(iterable);
         final Set<T> result = new LinkedHashSet<>();
         iterable.forEach(result::add);
diff --git 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java
index 3fb339b477..33aa119512 100644
--- 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java
+++ 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/mount/MountInfo.java
@@ -65,7 +65,7 @@ public final class MountInfo implements Mount {
         this.readOnly = readOnly;
         this.pathFragmentName = "oak:mount-" + name;
         this.includedPaths = cleanCopy(includedPaths);
-        this.pathsSupportingFragments = 
ImmutableSet.copyOf(pathsSupportingFragments);
+        this.pathsSupportingFragments = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(pathsSupportingFragments));
     }
 
     @Override
diff --git 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java
 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java
index 3193836945..67689483f4 100644
--- 
a/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java
+++ 
b/oak-core-spi/src/main/java/org/apache/jackrabbit/oak/spi/observation/ChangeSet.java
@@ -18,12 +18,14 @@
  */
 package org.apache.jackrabbit.oak.spi.observation;
 
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.commons.json.JsopBuilder;
 import org.apache.jackrabbit.oak.commons.json.JsopReader;
 import org.apache.jackrabbit.oak.commons.json.JsopTokenizer;
@@ -74,11 +76,11 @@ public final class ChangeSet {
     ChangeSet(int maxPathDepth, Set<String> parentPaths, Set<String> 
parentNodeNames, Set<String> parentNodeTypes,
             Set<String> propertyNames, Set<String> allNodeTypes) {
         this.maxPathDepth = maxPathDepth;
-        this.parentPaths = parentPaths == null ? null : 
ImmutableSet.copyOf(parentPaths);
-        this.parentNodeNames = parentNodeNames == null ? null : 
ImmutableSet.copyOf(parentNodeNames);
-        this.parentNodeTypes = parentNodeTypes == null ? null : 
ImmutableSet.copyOf(parentNodeTypes);
-        this.propertyNames = propertyNames == null ? null : 
ImmutableSet.copyOf(propertyNames);
-        this.allNodeTypes = allNodeTypes == null ? null : 
ImmutableSet.copyOf(allNodeTypes);
+        this.parentPaths = parentPaths == null ? null : 
Collections.unmodifiableSet(SetUtils.toLinkedSet(parentPaths));
+        this.parentNodeNames = parentNodeNames == null ? null : 
Collections.unmodifiableSet(SetUtils.toLinkedSet(parentNodeNames));
+        this.parentNodeTypes = parentNodeTypes == null ? null : 
Collections.unmodifiableSet(SetUtils.toLinkedSet(parentNodeTypes));
+        this.propertyNames = propertyNames == null ? null : 
Collections.unmodifiableSet(SetUtils.toLinkedSet(propertyNames));
+        this.allNodeTypes = allNodeTypes == null ? null : 
Collections.unmodifiableSet(SetUtils.toLinkedSet(allNodeTypes));
         
         boolean hitsMaxPathDepth = false;
         if (parentPaths != null) {
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java
index bb12e55889..a75f8fb3eb 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/migration/NodeStateCopier.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
@@ -41,7 +42,6 @@ import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
 
 import static java.util.Objects.requireNonNull;
-import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf;
 import static java.util.Collections.emptySet;
 
 /**
@@ -402,7 +402,7 @@ public class NodeStateCopier {
         @NotNull
         public Builder include(@NotNull Set<String> paths) {
             if (!requireNonNull(paths).isEmpty()) {
-                this.includePaths = copyOf(paths);
+                this.includePaths = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(paths));
             }
             return this;
         }
@@ -416,7 +416,7 @@ public class NodeStateCopier {
          */
         @NotNull
         public Builder include(@NotNull String... paths) {
-            return include(copyOf(requireNonNull(paths)));
+            return 
include(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths))));
         }
 
         /**
@@ -442,7 +442,7 @@ public class NodeStateCopier {
         @NotNull
         public Builder exclude(@NotNull Set<String> paths) {
             if (!requireNonNull(paths).isEmpty()) {
-                this.excludePaths = copyOf(paths);
+                this.excludePaths = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(paths));
             }
             return this;
         }
@@ -456,7 +456,7 @@ public class NodeStateCopier {
          */
         @NotNull
         public Builder exclude(@NotNull String... paths) {
-            return exclude(copyOf(requireNonNull(paths)));
+            return 
exclude(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths))));
         }
 
         /**
@@ -469,7 +469,7 @@ public class NodeStateCopier {
         @NotNull
         public Builder supportFragment(@NotNull Set<String> paths) {
             if (!requireNonNull(paths).isEmpty()) {
-                this.fragmentPaths = copyOf(paths);
+                this.fragmentPaths = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(paths));
             }
             return this;
         }
@@ -483,7 +483,7 @@ public class NodeStateCopier {
          */
         @NotNull
         public Builder supportFragment(@NotNull String... paths) {
-            return supportFragment(copyOf(requireNonNull(paths)));
+            return 
supportFragment(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths))));
         }
 
         /**
@@ -496,7 +496,7 @@ public class NodeStateCopier {
         @NotNull
         public Builder excludeFragments(@NotNull Set<String> fragments) {
             if (!requireNonNull(fragments).isEmpty()) {
-                this.excludeFragments = copyOf(fragments);
+                this.excludeFragments = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(fragments));
             }
             return this;
         }
@@ -510,7 +510,7 @@ public class NodeStateCopier {
          */
         @NotNull
         public Builder excludeFragments(@NotNull String... fragments) {
-            return exclude(copyOf(requireNonNull(fragments)));
+            return 
exclude(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(fragments))));
         }
 
         /**
@@ -523,7 +523,7 @@ public class NodeStateCopier {
         @NotNull
         public Builder merge(@NotNull Set<String> paths) {
             if (!requireNonNull(paths).isEmpty()) {
-                this.mergePaths = copyOf(paths);
+                this.mergePaths = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(paths));
             }
             return this;
         }
@@ -537,7 +537,7 @@ public class NodeStateCopier {
          */
         @NotNull
         public Builder merge(@NotNull String... paths) {
-            return merge(copyOf(requireNonNull(paths)));
+            return 
merge(Collections.unmodifiableSet(SetUtils.toLinkedSet(requireNonNull(paths))));
         }
 
         @NotNull
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java
index 77ffd3eeb1..9a266a59dc 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenConfigurationImpl.java
@@ -19,6 +19,7 @@ package 
org.apache.jackrabbit.oak.security.authentication.token;
 import org.apache.jackrabbit.guava.common.collect.ImmutableList;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
 import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
@@ -44,6 +45,7 @@ import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 
 import java.security.Principal;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -176,7 +178,7 @@ public class TokenConfigurationImpl extends 
ConfigurationBase implements TokenCo
         } else if (size == 1) {
             return credentialsSupport.values().iterator().next();
         } else {
-            return CompositeCredentialsSupport.newInstance(() -> 
ImmutableSet.copyOf(credentialsSupport.values()));
+            return CompositeCredentialsSupport.newInstance(() -> 
Collections.unmodifiableSet(SetUtils.toLinkedSet(credentialsSupport.values())));
         }
     }
 }
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java
index 75726625a7..26fd216dfc 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/CurrentPattern.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants;
 import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
@@ -34,6 +35,7 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.jcr.NamespaceRegistry;
 
+import java.util.Collections;
 import java.util.Objects;
 import java.util.Set;
 
@@ -99,7 +101,7 @@ class CurrentPattern implements RestrictionPattern {
 
     CurrentPattern(@NotNull String treePath, @NotNull Iterable<String> 
propertyNames) {
         this.treePath = treePath;
-        this.propertyNames = ImmutableSet.copyOf(propertyNames);
+        this.propertyNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(propertyNames));
     }
 
     @Override
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java
index 723227c9b2..e188b390d3 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/ItemNamePattern.java
@@ -16,11 +16,13 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.restriction;
 
+import java.util.Collections;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -37,7 +39,7 @@ class ItemNamePattern implements RestrictionPattern {
     private final Set<String> names;
 
     ItemNamePattern(Iterable<String> names) {
-        this.names = ImmutableSet.copyOf(names);
+        this.names = Collections.unmodifiableSet(SetUtils.toLinkedSet(names));
     }
 
     @Override
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java
index 8e7062f7a2..f60ec466dc 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/NodeTypePattern.java
@@ -16,10 +16,12 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.restriction;
 
+import java.util.Collections;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern;
 import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
 import org.jetbrains.annotations.NotNull;
@@ -41,7 +43,7 @@ class NodeTypePattern implements RestrictionPattern {
     private final Set<String> nodeTypeNames;
 
     NodeTypePattern(@NotNull Iterable<String> nodeTypeNames) {
-        this.nodeTypeNames = ImmutableSet.copyOf(nodeTypeNames);
+        this.nodeTypeNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(nodeTypeNames));
     }
 
     @Override
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java
index be031e9015..7eb3d01ae1 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/restriction/PrefixPattern.java
@@ -16,11 +16,13 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.restriction;
 
+import java.util.Collections;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern;
 import org.apache.jackrabbit.util.Text;
 import org.jetbrains.annotations.NotNull;
@@ -45,7 +47,7 @@ class PrefixPattern implements RestrictionPattern {
     private final Set<String> prefixes;
 
     PrefixPattern(@NotNull Iterable<String> prefixes) {
-        this.prefixes = ImmutableSet.copyOf(prefixes);
+        this.prefixes = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(prefixes));
     }
 
     @Override
diff --git 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java
 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java
index cf0e5fecaf..28ab7fbf6d 100644
--- 
a/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java
+++ 
b/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RepMembersConflictHandler.java
@@ -18,12 +18,14 @@
  */
 package org.apache.jackrabbit.oak.security.user;
 
+import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyBuilder;
 import org.apache.jackrabbit.oak.spi.commit.ThreeWayConflictHandler;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
@@ -81,7 +83,7 @@ class RepMembersConflictHandler implements 
ThreeWayConflictHandler {
     public Resolution changeChangedProperty(@NotNull NodeBuilder parent, 
@NotNull PropertyState ours,
             @NotNull PropertyState theirs, @NotNull PropertyState base) {
         if (isRepMembersProperty(theirs)) {
-            Set<String> baseMembers = 
ImmutableSet.copyOf(base.getValue(Type.STRINGS));
+            Set<String> baseMembers = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(base.getValue(Type.STRINGS)));
             mergeChange(parent, ours, theirs, baseMembers);
             return Resolution.MERGED;
         } else {
@@ -157,8 +159,8 @@ class RepMembersConflictHandler implements 
ThreeWayConflictHandler {
         PropertyBuilder<String> merged = 
PropertyBuilder.array(Type.WEAKREFERENCE);
         merged.setName(UserConstants.REP_MEMBERS);
 
-        Set<String> theirMembers = 
ImmutableSet.copyOf(theirs.getValue(Type.STRINGS));
-        Set<String> ourMembers = 
ImmutableSet.copyOf(ours.getValue(Type.STRINGS));
+        Set<String> theirMembers = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(theirs.getValue(Type.STRINGS)));
+        Set<String> ourMembers = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(ours.getValue(Type.STRINGS)));
 
         // merge ours and theirs to a de-duplicated set
         Set<String> combined = new 
LinkedHashSet<>(Sets.intersection(ourMembers, theirMembers));
diff --git 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java
 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java
index 8418d2b535..159f07a1f0 100644
--- 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java
+++ 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/Role.java
@@ -16,8 +16,10 @@
  */
 package 
org.apache.jackrabbit.oak.exercise.security.authorization.models.simplifiedroles;
 
+import java.util.Collections;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
 import org.jetbrains.annotations.NotNull;
@@ -37,7 +39,7 @@ final class Role {
 
     private Role(long permissions, String... privilegeNames) {
         this.permissions = permissions;
-        this.privilegeNames = ImmutableSet.copyOf(privilegeNames);
+        this.privilegeNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames));
     }
 
     private Role(@NotNull Role base, long permissions, String... 
privilegeNames) {
diff --git 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java
 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java
index 175e74a8e4..1f7d4e7dee 100644
--- 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java
+++ 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/authorization/models/simplifiedroles/ThreeRolesPermissionProvider.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.tree.ReadOnly;
 import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
 import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
@@ -38,6 +39,7 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.security.Principal;
+import java.util.Collections;
 import java.util.Set;
 
 class ThreeRolesPermissionProvider implements AggregatedPermissionProvider, 
ThreeRolesConstants {
@@ -61,7 +63,7 @@ class ThreeRolesPermissionProvider implements 
AggregatedPermissionProvider, Thre
                                  @NotNull String supportedPath, @NotNull 
Context ctx,
                                  @NotNull RootProvider rootProvider) {
         this.root = root;
-        this.principalNames = 
ImmutableSet.copyOf(IterableUtils.transform(principals, Principal::getName));
+        this.principalNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(IterableUtils.transform(principals,
 Principal::getName)));
         this.supportedPath = supportedPath;
         this.ctx = ctx;
         this.rootProvider = rootProvider;
@@ -166,7 +168,7 @@ class ThreeRolesPermissionProvider implements 
AggregatedPermissionProvider, Thre
 
     @Override
     public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... 
privilegeNames) {
-        return 
getPrivileges(tree).containsAll(ImmutableSet.copyOf(privilegeNames));
+        return 
getPrivileges(tree).containsAll(Collections.unmodifiableSet(SetUtils.toLinkedSet(privilegeNames)));
     }
 
     @NotNull
diff --git 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
index 87c024906e..14b6feb417 100644
--- 
a/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
+++ 
b/oak-exercise/src/main/java/org/apache/jackrabbit/oak/exercise/security/principal/CustomPrincipalProvider.java
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -36,7 +37,7 @@ class CustomPrincipalProvider implements PrincipalProvider {
     private final Set<String> knownPrincipalNames;
 
     CustomPrincipalProvider(String[] knownPrincipalNames) {
-        this.knownPrincipalNames = ImmutableSet.copyOf(knownPrincipalNames);
+        this.knownPrincipalNames = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(knownPrincipalNames));
     }
 
     @Nullable
diff --git 
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
 
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
index 3b2d5ff998..c7b9c2bebf 100644
--- 
a/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
+++ 
b/oak-run-commons/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/PathElementComparator.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.Set;
 
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 
 public class PathElementComparator implements Comparator<Iterable<String>> {
     private final Set<String> preferred;
@@ -34,7 +35,7 @@ public class PathElementComparator implements 
Comparator<Iterable<String>> {
     }
 
     public PathElementComparator(Iterable<String> preferredPathElements) {
-        this.preferred = ImmutableSet.copyOf(preferredPathElements);
+        this.preferred = 
Collections.unmodifiableSet(SetUtils.toLinkedSet(preferredPathElements));
     }
 
     @Override


Reply via email to