From 9657a13912d0e68f68f54235dd68cceb7a0c93e0 Mon Sep 17 00:00:00 2001 From: JaniruTEC Date: Mon, 28 Sep 2020 23:33:39 +0200 Subject: [PATCH] Updated MPCModule to return a SortedSet and switched collector See: https://github.com/cryptomator/cryptomator/pull/1307#discussion_r474452898 --- .../common/mountpoint/MountPointChooserModule.java | 10 ++++++---- .../org/cryptomator/common/vaults/AbstractVolume.java | 8 +++++--- .../org/cryptomator/common/vaults/DokanyVolume.java | 4 ++-- .../java/org/cryptomator/common/vaults/FuseVolume.java | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java b/main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java index 22d5fd286..3e29d8265 100644 --- a/main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java +++ b/main/commons/src/main/java/org/cryptomator/common/mountpoint/MountPointChooserModule.java @@ -1,6 +1,6 @@ package org.cryptomator.common.mountpoint; -import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSortedSet; import dagger.Binds; import dagger.Module; import dagger.Provides; @@ -8,7 +8,9 @@ import dagger.multibindings.IntoSet; import org.cryptomator.common.vaults.PerVault; import javax.inject.Named; +import java.util.Comparator; import java.util.Set; +import java.util.SortedSet; /** * Dagger-Module for {@link MountPointChooser MountPointChoosers.}
@@ -42,8 +44,8 @@ public abstract class MountPointChooserModule { @Provides @PerVault @Named("orderedValidMountPointChoosers") - public static Set provideOrderedValidMountPointChoosers(Set choosers) { - //Sorted Set - return choosers.stream().sorted().filter(MountPointChooser::isApplicable).collect(ImmutableSet.toImmutableSet()); + public static SortedSet provideOrderedValidMountPointChoosers(Set choosers) { + //The natural order is defined by MountPointChooser#compareTo + return choosers.stream().filter(MountPointChooser::isApplicable).collect(ImmutableSortedSet.toImmutableSortedSet(Comparator.naturalOrder())); } } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/AbstractVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/AbstractVolume.java index 8b47ffe07..69b68c7ff 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/AbstractVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/AbstractVolume.java @@ -7,11 +7,11 @@ import org.cryptomator.common.mountpoint.MountPointChooser; import java.nio.file.Path; import java.util.Optional; -import java.util.Set; +import java.util.SortedSet; public abstract class AbstractVolume implements Volume { - private final Set choosers; + private final SortedSet choosers; protected Path mountPoint; @@ -19,7 +19,7 @@ public abstract class AbstractVolume implements Volume { private boolean cleanupRequired; private MountPointChooser usedChooser; - public AbstractVolume(Set choosers) { + public AbstractVolume(SortedSet choosers) { this.choosers = choosers; } @@ -34,6 +34,8 @@ public abstract class AbstractVolume implements Volume { this.usedChooser = chooser; return chosenPath.get(); } + //SortedSet#stream() should return a sorted stream (that's what it's docs and the docs of #spliterator() say, even if they are not 100% clear for me.) + //We want to keep that order, that's why we use ImmutableSet#toImmutableSet() to collect (even if it doesn't implement SortedSet, it's docs promise use encounter ordering.) String tried = Joiner.on(", ").join(this.choosers.stream().map((mpc) -> mpc.getClass().getTypeName()).collect(ImmutableSet.toImmutableSet())); throw new InvalidMountPointException(String.format("No feasible MountPoint found! Tried %s", tried)); } diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java index 20b1e69d3..bafecdac9 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/DokanyVolume.java @@ -12,7 +12,7 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; -import java.util.Set; +import java.util.SortedSet; import java.util.concurrent.ExecutorService; public class DokanyVolume extends AbstractVolume { @@ -27,7 +27,7 @@ public class DokanyVolume extends AbstractVolume { private Mount mount; @Inject - public DokanyVolume(VaultSettings vaultSettings, ExecutorService executorService, @Named("orderedValidMountPointChoosers") Set choosers) { + public DokanyVolume(VaultSettings vaultSettings, ExecutorService executorService, @Named("orderedValidMountPointChoosers") SortedSet choosers) { super(choosers); this.vaultSettings = vaultSettings; this.mountFactory = new MountFactory(executorService); diff --git a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java index 8f1926f4a..400cbc379 100644 --- a/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java +++ b/main/commons/src/main/java/org/cryptomator/common/vaults/FuseVolume.java @@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Named; import java.nio.file.Path; -import java.util.Set; +import java.util.SortedSet; public class FuseVolume extends AbstractVolume { @@ -26,7 +26,7 @@ public class FuseVolume extends AbstractVolume { private Mount mount; @Inject - public FuseVolume(@Named("orderedValidMountPointChoosers") Set choosers) { + public FuseVolume(@Named("orderedValidMountPointChoosers") SortedSet choosers) { super(choosers); }