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

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

commit 02b640f2a97fe1c0908284e4d34e832ed34a2ad6
Author: Rishabh Kumar <[email protected]>
AuthorDate: Thu Mar 13 15:50:14 2025 +0530

    OAK-11602 : removed usage of Guava's ImmutableSet.copyOf with LinkedSet
---
 .../impl/principal/AutoMembershipPrincipals.java   |  3 ++-
 .../ExternalAuthorizableActionProvider.java        |  3 ++-
 .../principal/ExternalGroupPrincipalProvider.java  |  3 ++-
 .../impl/principal/ProtectionConfigImpl.java       |  5 +++--
 .../cug/impl/CugAccessControlManager.java          |  2 +-
 .../authorization/cug/impl/CugExcludeImpl.java     |  3 ++-
 .../authorization/AbstractHasItemGetItemTest.java  |  3 ++-
 .../oak/commons/collections/SetUtils.java          |  2 +-
 .../apache/jackrabbit/oak/spi/mount/MountInfo.java |  2 +-
 .../jackrabbit/oak/spi/observation/ChangeSet.java  | 11 ++++++-----
 .../oak/plugins/migration/NodeStateCopier.java     | 22 +++++++++++-----------
 .../token/TokenConfigurationImpl.java              |  3 ++-
 .../authorization/restriction/CurrentPattern.java  |  3 ++-
 .../authorization/restriction/ItemNamePattern.java |  3 ++-
 .../authorization/restriction/NodeTypePattern.java |  3 ++-
 .../authorization/restriction/PrefixPattern.java   |  3 ++-
 .../security/user/RepMembersConflictHandler.java   |  7 ++++---
 oak-doc/src/site/markdown/security/user/default.md |  2 +-
 .../authorization/models/simplifiedroles/Role.java |  3 ++-
 .../ThreeRolesPermissionProvider.java              |  5 +++--
 .../principal/CustomPrincipalProvider.java         |  3 ++-
 .../lucene/directory/CopyOnReadDirectory.java      |  3 ++-
 .../index/lucene/directory/OakDirectory.java       |  2 +-
 .../property/UniquenessConstraintValidator.java    |  3 ++-
 .../document/flatfile/PathElementComparator.java   |  3 ++-
 .../oak/spi/security/ConfigurationParameters.java  |  7 ++++---
 .../spi/security/authentication/AuthInfoImpl.java  |  3 ++-
 .../credentials/SimpleCredentialsSupport.java      |  3 ++-
 .../security/authorization/accesscontrol/ACE.java  |  3 ++-
 .../restriction/AbstractRestrictionProvider.java   |  3 ++-
 .../security/privilege/PrivilegeBitsProvider.java  |  5 +++--
 .../oak/composite/CompositeNodeStore.java          |  3 ++-
 .../checks/NodeTypeMountedNodeStoreChecker.java    |  5 +++--
 .../oak/upgrade/RepositorySidegrade.java           | 10 +++++-----
 .../jackrabbit/oak/upgrade/RepositoryUpgrade.java  | 14 +++++++-------
 35 files changed, 94 insertions(+), 67 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..2283a880c7 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;
@@ -220,7 +221,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, 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..1e617d3451 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 = 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..62816ffe90 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 = 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..23a4b1831d 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 = 
SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("propertyNames"),
 new String[0]));
+        nodeNames = 
SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("nodeNames"), 
new String[0]));
     }
     
     @Override
diff --git 
a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
 
b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
index 5d40860b78..2e3409975a 100644
--- 
a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
+++ 
b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
@@ -374,7 +374,7 @@ class CugAccessControlManager extends 
AbstractAccessControlManager implements Cu
                 Tree cug = CugUtil.getCug(t);
                 PropertyState pNames = (cug == null) ? null : 
cug.getProperty(REP_PRINCIPAL_NAMES);
                 if (pNames != null) {
-                    if 
(!Collections.disjoint(ImmutableSet.copyOf(principalNames), 
ImmutableSet.copyOf(pNames.getValue(Type.STRINGS)))) {
+                    if 
(!Collections.disjoint(SetUtils.toLinkedSet(principalNames), 
SetUtils.toLinkedSet(pNames.getValue(Type.STRINGS)))) {
                         candidates.add(path);
                     }
                     nestedCugPaths(cug).forEach(eval::add);
diff --git 
a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java
 
b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java
index d92d3bb4f9..dde375cdff 100644
--- 
a/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java
+++ 
b/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugExcludeImpl.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.Set;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugExclude;
 import org.jetbrains.annotations.NotNull;
 import org.osgi.service.component.annotations.Activate;
@@ -80,6 +81,6 @@ public class CugExcludeImpl extends CugExclude.Default {
     }
 
     private void setPrincipalNames(@NotNull Map<String, Object> properties) {
-        this.principalNames = 
ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("principalNames"),
 new String[0]));
+        this.principalNames = 
SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("principalNames"),
 new String[0]));
     }
 }
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..ffc020ce66 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 = 
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..09578e6feb 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
@@ -24,6 +24,7 @@ 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 +75,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 : 
SetUtils.toLinkedSet(parentPaths);
+        this.parentNodeNames = parentNodeNames == null ? null : 
SetUtils.toLinkedSet(parentNodeNames);
+        this.parentNodeTypes = parentNodeTypes == null ? null : 
SetUtils.toLinkedSet(parentNodeTypes);
+        this.propertyNames = propertyNames == null ? null : 
SetUtils.toLinkedSet(propertyNames);
+        this.allNodeTypes = allNodeTypes == null ? null : 
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..01e8c9223d 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 = 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(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 = 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(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 = 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(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 = 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(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 = 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(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..b5554bd6cd 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;
@@ -176,7 +177,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(() -> 
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..76ce4025f1 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;
@@ -99,7 +100,7 @@ class CurrentPattern implements RestrictionPattern {
 
     CurrentPattern(@NotNull String treePath, @NotNull Iterable<String> 
propertyNames) {
         this.treePath = treePath;
-        this.propertyNames = ImmutableSet.copyOf(propertyNames);
+        this.propertyNames = 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..9eabebc6b6 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
@@ -21,6 +21,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.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 +38,7 @@ class ItemNamePattern implements RestrictionPattern {
     private final Set<String> names;
 
     ItemNamePattern(Iterable<String> names) {
-        this.names = ImmutableSet.copyOf(names);
+        this.names = 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..6cfc97115c 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
@@ -20,6 +20,7 @@ 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 +42,7 @@ class NodeTypePattern implements RestrictionPattern {
     private final Set<String> nodeTypeNames;
 
     NodeTypePattern(@NotNull Iterable<String> nodeTypeNames) {
-        this.nodeTypeNames = ImmutableSet.copyOf(nodeTypeNames);
+        this.nodeTypeNames = 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..89f50ae029 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
@@ -21,6 +21,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.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 +46,7 @@ class PrefixPattern implements RestrictionPattern {
     private final Set<String> prefixes;
 
     PrefixPattern(@NotNull Iterable<String> prefixes) {
-        this.prefixes = ImmutableSet.copyOf(prefixes);
+        this.prefixes = 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..cbabce1e90 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
@@ -24,6 +24,7 @@ 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 +82,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 = 
SetUtils.toLinkedSet(base.getValue(Type.STRINGS));
             mergeChange(parent, ours, theirs, baseMembers);
             return Resolution.MERGED;
         } else {
@@ -157,8 +158,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 = 
SetUtils.toLinkedSet(theirs.getValue(Type.STRINGS));
+        Set<String> ourMembers = 
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-doc/src/site/markdown/security/user/default.md 
b/oak-doc/src/site/markdown/security/user/default.md
index 3bb9817370..fe38c00ac4 100644
--- a/oak-doc/src/site/markdown/security/user/default.md
+++ b/oak-doc/src/site/markdown/security/user/default.md
@@ -326,7 +326,7 @@ implementation.
         //------------------------------------------------< SCR Integration 
>---
         @Activate
         private void activate(Map<String, Object> properties) {
-             ids = 
ImmutableSet.copyOf(PropertiesUtil.toStringArray(properties.get("ids"), new 
String[0]));
+             ids = 
SetUtils.toLinkedSet(PropertiesUtil.toStringArray(properties.get("ids"), new 
String[0]));
         }
     }
 
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..4b0279cb65 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
@@ -18,6 +18,7 @@ package 
org.apache.jackrabbit.oak.exercise.security.authorization.models.simplif
 
 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 +38,7 @@ final class Role {
 
     private Role(long permissions, String... privilegeNames) {
         this.permissions = permissions;
-        this.privilegeNames = ImmutableSet.copyOf(privilegeNames);
+        this.privilegeNames = 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..786a3f8d77 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;
@@ -61,7 +62,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 = 
SetUtils.toLinkedSet(IterableUtils.transform(principals, Principal::getName));
         this.supportedPath = supportedPath;
         this.ctx = ctx;
         this.rootProvider = rootProvider;
@@ -166,7 +167,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(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..1ed4497311 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 = SetUtils.toLinkedSet(knownPrincipalNames);
     }
 
     @Nullable
diff --git 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
index ce29ff52c9..2e0c69327b 100644
--- 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
+++ 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/CopyOnReadDirectory.java
@@ -35,6 +35,7 @@ import java.util.stream.Collectors;
 
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.commons.PerfLogger;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.index.lucene.IndexCopier;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FilterDirectory;
@@ -332,7 +333,7 @@ public class CopyOnReadDirectory extends FilterDirectory {
 
         Set<String> filesToBeDeleted =
                 // Files present locally
-                ImmutableSet.copyOf(local.listAll()).stream()
+                SetUtils.toLinkedSet(local.listAll()).stream()
                 // but not in my view
                 .filter(name -> !remoteFiles.contains(name))
                 // and also older than a safe timestamp (deleteBeforeTS)
diff --git 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
index f2fc6a88d6..b88089a6e3 100644
--- 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
+++ 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/directory/OakDirectory.java
@@ -341,7 +341,7 @@ public class OakDirectory extends Directory {
         if (fileNames == null){
             fileNames = directoryBuilder.getChildNodeNames();
         }
-        Set<String> result = ImmutableSet.copyOf(fileNames);
+        Set<String> result = SetUtils.toLinkedSet(fileNames);
         PERF_LOGGER.end(start, 100, "Directory listing performed. Total {} 
files", result.size());
         return result;
     }
diff --git 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java
 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java
index 2df17786a5..b34de4694a 100644
--- 
a/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java
+++ 
b/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/UniquenessConstraintValidator.java
@@ -31,6 +31,7 @@ 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.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
@@ -68,7 +69,7 @@ public class UniquenessConstraintValidator {
             String propertyRelativePath = e.getKey();
             String value = e.getValue();
             Iterable<String> indexedPaths = 
getIndexedPaths(propertyRelativePath, value);
-            Set<String> allPaths = ImmutableSet.copyOf(indexedPaths);
+            Set<String> allPaths = SetUtils.toLinkedSet(indexedPaths);
 
             //If more than one match found then filter out stale paths
             if (allPaths.size() > 1) {
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..729202534a 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 = SetUtils.toLinkedSet(preferredPathElements);
     }
 
     @Override
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
index 63406d872e..f26476598c 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/ConfigurationParameters.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
 
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
@@ -306,13 +307,13 @@ public final class ConfigurationParameters implements 
Map<String, Object> {
         if (configProperty instanceof Set) {
             return (Set) configProperty;
         } else if (configProperty instanceof Collection<?>) {
-            return ImmutableSet.copyOf((Collection<?>) configProperty);
+            return SetUtils.toLinkedSet((Collection<?>) configProperty);
         } else if (configProperty.getClass().isArray()) {
-            return ImmutableSet.copyOf((Object[]) configProperty);
+            return SetUtils.toLinkedSet((Object[]) configProperty);
         } else {
             String[] arr = PropertiesUtil.toStringArray(configProperty);
             if (arr != null) {
-                return ImmutableSet.copyOf(arr);
+                return SetUtils.toLinkedSet(arr);
             } else {
                 String str = configProperty.toString();
                 log.warn("Unsupported target type {} for value {}", 
clazz.getName(), str);
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java
index 19ad19ecc9..9e8629318d 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/AuthInfoImpl.java
@@ -27,6 +27,7 @@ import javax.security.auth.Subject;
 
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.oak.api.AuthInfo;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -48,7 +49,7 @@ public final class AuthInfoImpl implements AuthInfo {
                         @Nullable Iterable<? extends Principal> principals) {
         this.userID = userID;
         this.attributes = (attributes == null) ? Collections.emptyMap() : 
attributes;
-        this.principals = (principals == null) ? Collections.emptySet() : 
ImmutableSet.copyOf(principals);
+        this.principals = (principals == null) ? Collections.emptySet() : 
SetUtils.toLinkedSet(principals);
     }
 
     public static AuthInfo createFromSubject(@NotNull Subject subject) {
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java
index 1b12c44982..c6efafc00c 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/credentials/SimpleCredentialsSupport.java
@@ -26,6 +26,7 @@ import javax.jcr.SimpleCredentials;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.guava.common.collect.Maps;
 
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -65,7 +66,7 @@ public final class SimpleCredentialsSupport implements 
CredentialsSupport {
     public Map<String, ?> getAttributes(@NotNull Credentials credentials) {
         if (credentials instanceof SimpleCredentials) {
             final SimpleCredentials sc = (SimpleCredentials) credentials;
-            return Maps.asMap(ImmutableSet.copyOf(sc.getAttributeNames()),
+            return Maps.asMap(SetUtils.toLinkedSet(sc.getAttributeNames()),
                     input -> sc.getAttribute(input));
         } else {
             return Collections.emptyMap();
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
index c590a7b0f2..623f46899d 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/accesscontrol/ACE.java
@@ -19,6 +19,7 @@ package 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol;
 import org.apache.jackrabbit.guava.common.collect.ImmutableSet;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
 import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.value.jcr.PartialValueFactory;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.Restriction;
@@ -76,7 +77,7 @@ public abstract class ACE implements 
JackrabbitAccessControlEntry {
         this.principal = principal;
         this.privilegeBits = privilegeBits;
         this.isAllow = isAllow;
-        this.restrictions = (restrictions == null) ? Collections.emptySet() : 
ImmutableSet.copyOf(restrictions);
+        this.restrictions = (restrictions == null) ? Collections.emptySet() : 
SetUtils.toLinkedSet(restrictions);
         this.namePathMapper = namePathMapper;
         this.valueFactory = new PartialValueFactory(namePathMapper);
     }
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java
index b811eb00bf..40aa49720c 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/AbstractRestrictionProvider.java
@@ -35,6 +35,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.api.Type;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
 import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
@@ -70,7 +71,7 @@ public abstract class AbstractRestrictionProvider implements 
RestrictionProvider
         if (isUnsupportedPath(oakPath)) {
             return Collections.emptySet();
         } else {
-            return ImmutableSet.copyOf(supported.values());
+            return SetUtils.toLinkedSet(supported.values());
         }
     }
 
diff --git 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java
 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java
index a0cfc44cbb..26f10517ca 100644
--- 
a/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java
+++ 
b/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/privilege/PrivilegeBitsProvider.java
@@ -34,6 +34,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.NameMapper;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
@@ -202,7 +203,7 @@ public final class PrivilegeBitsProvider implements 
PrivilegeConstants {
                 privilegeNames = bitsToNames.get(pb);
             } else {
                 privilegeNames = collectPrivilegeNames(privilegesTree, pb);
-                bitsToNames.put(pb, ImmutableSet.copyOf(privilegeNames));
+                bitsToNames.put(pb, SetUtils.toLinkedSet(privilegeNames));
             }
             return privilegeNames;
         }
@@ -251,7 +252,7 @@ public final class PrivilegeBitsProvider implements 
PrivilegeConstants {
                 return 
extractAggregatedPrivileges(Collections.singleton(privName));
             }
         } else {
-            Set<String> pNames = ImmutableSet.copyOf(privilegeNames);
+            Set<String> pNames = SetUtils.toLinkedSet(privilegeNames);
             if (NON_AGGREGATE_PRIVILEGES.containsAll(pNames)) {
                 return pNames;
             } else {
diff --git 
a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
 
b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
index 557d3a51a3..cb331af0f1 100644
--- 
a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
+++ 
b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStore.java
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.commons.collections.IterableUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.commons.collections.StreamUtils;
 import org.apache.jackrabbit.oak.composite.checks.NodeStoreChecks;
 import org.apache.jackrabbit.oak.spi.commit.ChangeDispatcher;
@@ -293,7 +294,7 @@ public class CompositeNodeStore implements NodeStore, 
PrefetchNodeStore, Observa
     }
 
     private String getPartialCheckpointName(MountedNodeStore nodeStore, String 
globalCheckpoint, Map<String, String> globalCheckpointProperties, boolean 
resolveByName) {
-        Set<String> validCheckpointNames = 
ImmutableSet.copyOf(nodeStore.getNodeStore().checkpoints());
+        Set<String> validCheckpointNames = 
SetUtils.toLinkedSet(nodeStore.getNodeStore().checkpoints());
         String result = 
globalCheckpointProperties.get(CHECKPOINT_METADATA_MOUNT + 
nodeStore.getMount().getName());
         if (result != null && validCheckpointNames.contains(result)) {
             return result;
diff --git 
a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
 
b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
index 0ee31a4a48..b740c4ebfc 100644
--- 
a/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
+++ 
b/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/checks/NodeTypeMountedNodeStoreChecker.java
@@ -20,6 +20,7 @@ import static java.util.Objects.requireNonNull;
 
 import java.util.Set;
 
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.ComponentPropertyType;
 import org.osgi.service.component.annotations.ConfigurationPolicy;
@@ -81,13 +82,13 @@ public class NodeTypeMountedNodeStoreChecker implements
     public NodeTypeMountedNodeStoreChecker(String invalidNodeType, String 
errorLabel, String... excludedNodeTypes) {
         this.invalidNodeType = invalidNodeType;
         this.errorLabel = errorLabel;
-        this.excludedNodeTypes = ImmutableSet.copyOf(excludedNodeTypes);
+        this.excludedNodeTypes = SetUtils.toLinkedSet(excludedNodeTypes);
     }
 
     protected void activate(ComponentContext ctx) {
         invalidNodeType = 
requireNonNull(PropertiesUtil.toString(ctx.getProperties().get(INVALID_NODE_TYPE),
 null), INVALID_NODE_TYPE);
         errorLabel = 
requireNonNull(PropertiesUtil.toString(ctx.getProperties().get(ERROR_LABEL), 
null), ERROR_LABEL);
-        excludedNodeTypes = 
ImmutableSet.copyOf(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES),
 new String[0]));
+        excludedNodeTypes = 
SetUtils.toLinkedSet(PropertiesUtil.toStringArray(ctx.getProperties().get(EXCLUDED_NODE_TYPES),
 new String[0]));
     }
 
     @Override
diff --git 
a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
 
b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
index 6689186f04..ab7da6abc0 100755
--- 
a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
+++ 
b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositorySidegrade.java
@@ -34,6 +34,7 @@ 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.ListUtils;
+import org.apache.jackrabbit.oak.commons.collections.SetUtils;
 import org.apache.jackrabbit.oak.plugins.document.DocumentNodeState;
 import org.apache.jackrabbit.oak.plugins.migration.FilteringNodeState;
 import org.apache.jackrabbit.oak.plugins.migration.NodeStateCopier;
@@ -69,7 +70,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static java.util.Objects.requireNonNull;
-import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf;
 import static org.apache.jackrabbit.guava.common.collect.Sets.union;
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
 import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
@@ -217,7 +217,7 @@ public class RepositorySidegrade {
      * @param includes Paths to be included in the copy.
      */
     public void setIncludes(@NotNull String... includes) {
-        this.includePaths = copyOf(requireNonNull(includes));
+        this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes));
     }
 
     /**
@@ -227,7 +227,7 @@ public class RepositorySidegrade {
      * @param excludes Paths to be excluded from the copy.
      */
     public void setExcludes(@NotNull String... excludes) {
-        this.excludePaths = copyOf(requireNonNull(excludes));
+        this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes));
     }
 
     /**
@@ -237,7 +237,7 @@ public class RepositorySidegrade {
      * @param merges Paths to be merged during copy.
      */
     public void setMerges(@NotNull String... merges) {
-        this.mergePaths = copyOf(requireNonNull(merges));
+        this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges));
     }
 
     public void setFilterLongNames(boolean filterLongNames) {
@@ -472,7 +472,7 @@ public class RepositorySidegrade {
         }
         excludes.add("/:async");
 
-        final Set<String> merges = union(copyOf(this.mergePaths), 
Set.of("/jcr:system"));
+        final Set<String> merges = 
union(SetUtils.toLinkedSet(this.mergePaths), Set.of("/jcr:system"));
         NodeStateCopier.builder()
             .include(includes)
             .exclude(excludes.build())
diff --git 
a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
 
b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
index e67fc9239c..a7bd7e7973 100644
--- 
a/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
+++ 
b/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/RepositoryUpgrade.java
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.upgrade;
 
 import static java.util.Objects.requireNonNull;
-import static org.apache.jackrabbit.guava.common.collect.ImmutableSet.copyOf;
 import static org.apache.jackrabbit.guava.common.collect.Sets.union;
 import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM;
 import static 
org.apache.jackrabbit.oak.plugins.migration.FilteringNodeState.ALL;
@@ -77,6 +76,7 @@ import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.Root;
 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.commons.conditions.Validate;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
@@ -321,7 +321,7 @@ public class RepositoryUpgrade {
      * @param includes Paths to be included in the copy.
      */
     public void setIncludes(@NotNull String... includes) {
-        this.includePaths = copyOf(requireNonNull(includes));
+        this.includePaths = SetUtils.toLinkedSet(requireNonNull(includes));
     }
 
     /**
@@ -331,7 +331,7 @@ public class RepositoryUpgrade {
      * @param excludes Paths to be excluded from the copy.
      */
     public void setExcludes(@NotNull String... excludes) {
-        this.excludePaths = copyOf(requireNonNull(excludes));
+        this.excludePaths = SetUtils.toLinkedSet(requireNonNull(excludes));
     }
 
     /**
@@ -341,7 +341,7 @@ public class RepositoryUpgrade {
      * @param merges Paths to be merged during copy.
      */
     public void setMerges(@NotNull String... merges) {
-        this.mergePaths = copyOf(requireNonNull(merges));
+        this.mergePaths = SetUtils.toLinkedSet(requireNonNull(merges));
     }
 
     /**
@@ -939,8 +939,8 @@ public class RepositoryUpgrade {
     private String copyWorkspace(NodeState sourceRoot, NodeBuilder targetRoot, 
String workspaceName)
             throws RepositoryException {
         final Set<String> includes = 
calculateEffectiveIncludePaths(includePaths, sourceRoot);
-        final Set<String> excludes = union(copyOf(this.excludePaths), 
Set.of("/jcr:system/jcr:versionStorage"));
-        final Set<String> merges = union(copyOf(this.mergePaths), 
Set.of("/jcr:system"));
+        final Set<String> excludes = 
union(SetUtils.toLinkedSet(this.excludePaths), 
Set.of("/jcr:system/jcr:versionStorage"));
+        final Set<String> merges = 
union(SetUtils.toLinkedSet(this.mergePaths), Set.of("/jcr:system"));
 
         logger.info("Copying workspace {} [i: {}, e: {}, m: {}]", 
workspaceName, includes, excludes, merges);
 
@@ -959,7 +959,7 @@ public class RepositoryUpgrade {
 
     static Set<String> calculateEffectiveIncludePaths(Set<String> 
includePaths, NodeState sourceRoot) {
         if (!includePaths.contains("/")) {
-            return copyOf(includePaths);
+            return SetUtils.toLinkedSet(includePaths);
         }
 
         // include child nodes from source individually to avoid deleting 
other initialized content

Reply via email to