From 50608b0189daf3bbf10c5b77d226082512c98d6b Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 11 Aug 2020 08:07:06 +0200 Subject: [PATCH] Fix minor review mentions --- .../scm/plugin/InstalledPluginDescriptor.java | 3 ++- .../scm/plugin/DefaultPluginManager.java | 17 ++++++++----- .../plugin/DependencyNotFoundException.java | 2 +- .../DependencyVersionMismatchException.java | 2 +- .../PluginChecksumMismatchException.java | 2 +- .../PluginInformationMismatchException.java | 2 +- .../sonia/scm/plugin/PluginInstaller.java | 25 ++++++++++--------- .../scm/plugin/DefaultPluginManagerTest.java | 7 +++--- 8 files changed, 34 insertions(+), 26 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java index 785994bb54..9d57c2a5dd 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java @@ -70,7 +70,8 @@ public final class InstalledPluginDescriptor extends ScmModule implements Plugin * @param dependencies * * @deprecated this constructor uses dependencies with plain strings, - * this is deprecated because the version information is missing. + * which is deprecated because the version information is missing. + * This class should not instantiated manually, it is designed to be loaded by jaxb. */ @Deprecated public InstalledPluginDescriptor(int scmVersion, PluginInformation information, diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index 4eb48b76d8..0e1e044e83 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -69,24 +69,29 @@ public class DefaultPluginManager implements PluginManager { private final Collection pendingUninstallQueue = new ArrayList<>(); private final PluginDependencyTracker dependencyTracker = new PluginDependencyTracker(); - private Function, PluginInstallationContext> contextFactory; + private final Function, PluginInstallationContext> contextFactory; @Inject public DefaultPluginManager(PluginLoader loader, PluginCenter center, PluginInstaller installer, Restarter restarter, ScmEventBus eventBus) { + this(loader, center, installer, restarter, eventBus, null); + } + + DefaultPluginManager(PluginLoader loader, PluginCenter center, PluginInstaller installer, Restarter restarter, ScmEventBus eventBus, Function, PluginInstallationContext> contextFactory) { this.loader = loader; this.center = center; this.installer = installer; this.restarter = restarter; this.eventBus = eventBus; + if (contextFactory != null) { + this.contextFactory = contextFactory; + } else { + this.contextFactory = (availablePlugins -> PluginInstallationContext.from(getInstalled(), availablePlugins)); + } + this.computeInstallationDependencies(); - this.contextFactory = (availablePlugins -> PluginInstallationContext.from(getInstalled(), availablePlugins)); } - @VisibleForTesting - void setContextFactory(Function, PluginInstallationContext> contextFactory) { - this.contextFactory = contextFactory; - } @VisibleForTesting synchronized void computeInstallationDependencies() { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DependencyNotFoundException.java b/scm-webapp/src/main/java/sonia/scm/plugin/DependencyNotFoundException.java index 360ddc372b..7bfc335033 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DependencyNotFoundException.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DependencyNotFoundException.java @@ -26,7 +26,7 @@ package sonia.scm.plugin; import static sonia.scm.ContextEntry.ContextBuilder.entity; -@SuppressWarnings("java:S110") +@SuppressWarnings("squid:MaximumInheritanceDepth") // exceptions have a deep inheritance depth themselves; therefore we accept this here public class DependencyNotFoundException extends PluginInstallException { private final String plugin; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DependencyVersionMismatchException.java b/scm-webapp/src/main/java/sonia/scm/plugin/DependencyVersionMismatchException.java index aefdec537b..325c12fb86 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DependencyVersionMismatchException.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DependencyVersionMismatchException.java @@ -29,7 +29,7 @@ import lombok.Getter; import static sonia.scm.ContextEntry.ContextBuilder.entity; @Getter -@SuppressWarnings("java:S110") +@SuppressWarnings("squid:MaximumInheritanceDepth") // exceptions have a deep inheritance depth themselves; therefore we accept this here public class DependencyVersionMismatchException extends PluginInstallException { private final String plugin; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginChecksumMismatchException.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginChecksumMismatchException.java index 389ab6439f..ba83baef25 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginChecksumMismatchException.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginChecksumMismatchException.java @@ -26,7 +26,7 @@ package sonia.scm.plugin; import static sonia.scm.ContextEntry.ContextBuilder.entity; -@SuppressWarnings("java:S110") +@SuppressWarnings("squid:MaximumInheritanceDepth") // exceptions have a deep inheritance depth themselves; therefore we accept this here public class PluginChecksumMismatchException extends PluginInstallException { public PluginChecksumMismatchException(AvailablePlugin plugin, String calculatedChecksum, String expectedChecksum) { super( diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInformationMismatchException.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInformationMismatchException.java index d4317f25e2..4d4639643e 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInformationMismatchException.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInformationMismatchException.java @@ -29,7 +29,7 @@ import lombok.Getter; import static sonia.scm.ContextEntry.ContextBuilder.entity; @Getter -@SuppressWarnings("java:S110") +@SuppressWarnings("squid:MaximumInheritanceDepth") // exceptions have a deep inheritance depth themselves; therefore we accept this here public class PluginInformationMismatchException extends PluginInstallException { private final PluginInformation api; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java index 42b1d51919..5c371aa323 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java @@ -38,7 +38,8 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Optional; -@SuppressWarnings("UnstableApiUsage") // guava hash is marked as unstable +@SuppressWarnings("UnstableApiUsage") + // guava hash is marked as unstable class PluginInstaller { private final SCMContextProvider scmContext; @@ -76,28 +77,28 @@ class PluginInstaller { } } - private void verifyInformation(AvailablePluginDescriptor api, InstalledPluginDescriptor downloaded) { - verifyInformation(api.getInformation(), downloaded.getInformation()); + private void verifyInformation(AvailablePluginDescriptor descriptorFromPluginCenter, InstalledPluginDescriptor downloadedDescriptor) { + verifyInformation(descriptorFromPluginCenter.getInformation(), downloadedDescriptor.getInformation()); } - private void verifyInformation(PluginInformation api, PluginInformation downloaded) { - if (!api.getName().equals(downloaded.getName())) { + private void verifyInformation(PluginInformation informationFromPluginCenter, PluginInformation downloadedInformation) { + if (!informationFromPluginCenter.getName().equals(downloadedInformation.getName())) { throw new PluginInformationMismatchException( - api, downloaded, + informationFromPluginCenter, downloadedInformation, String.format( "downloaded plugin name \"%s\" does not match the expected name \"%s\" from plugin-center", - downloaded.getName(), - api.getName() + downloadedInformation.getName(), + informationFromPluginCenter.getName() ) ); } - if (!api.getVersion().equals(downloaded.getVersion())) { + if (!informationFromPluginCenter.getVersion().equals(downloadedInformation.getVersion())) { throw new PluginInformationMismatchException( - api, downloaded, + informationFromPluginCenter, downloadedInformation, String.format( "downloaded plugin version \"%s\" does not match the expected version \"%s\" from plugin-center", - downloaded.getVersion(), - api.getVersion() + downloadedInformation.getVersion(), + informationFromPluginCenter.getVersion() ) ); } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java index 54bcf90c95..977451ca3a 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultPluginManagerTest.java @@ -90,7 +90,6 @@ class DefaultPluginManagerTest { @Captor private ArgumentCaptor eventCaptor; - @InjectMocks private DefaultPluginManager manager; @Mock @@ -107,8 +106,10 @@ class DefaultPluginManagerTest { } @BeforeEach - void setUpContextFactory() { - manager.setContextFactory((List availablePlugins) -> context); + void setUpObjectUnderTest() { + manager = new DefaultPluginManager( + loader, center, installer, restarter, eventBus, plugins -> context + ); } @Nested