From 591d6f1d4c3274f6a26ca41f578cacc718760599 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Fri, 2 Jun 2017 15:42:21 +0200 Subject: [PATCH] #1232 #1239 Show legacy hint if Guava's MoreObjects class is missing --- src/main/java/fr/xephi/authme/AuthMe.java | 2 +- .../authme/initialization/OnStartupTasks.java | 27 +++++++------- .../initialization/OnStartupTasksTest.java | 35 +------------------ 3 files changed, 14 insertions(+), 50 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 963138195..6fa903336 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -140,7 +140,6 @@ public class AuthMe extends JavaPlugin { initialize(); } catch (Throwable th) { ConsoleLogger.logException("Aborting initialization of AuthMe:", th); - OnStartupTasks.displayLegacyJarHint(th); stopOrUnload(); return; } @@ -206,6 +205,7 @@ public class AuthMe extends JavaPlugin { if(!SystemUtils.isJavaVersionAtLeast(1.8f)) { throw new IllegalStateException("You need Java 1.8 or above to run this plugin!"); } + OnStartupTasks.verifyIfLegacyJarIsNeeded(); // Create plugin folder getDataFolder().mkdir(); diff --git a/src/main/java/fr/xephi/authme/initialization/OnStartupTasks.java b/src/main/java/fr/xephi/authme/initialization/OnStartupTasks.java index 20b2abb1c..0e2295a95 100644 --- a/src/main/java/fr/xephi/authme/initialization/OnStartupTasks.java +++ b/src/main/java/fr/xephi/authme/initialization/OnStartupTasks.java @@ -1,6 +1,5 @@ package fr.xephi.authme.initialization; -import ch.jalu.injector.exceptions.InjectorReflectionException; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.datasource.DataSource; @@ -23,7 +22,6 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import javax.inject.Inject; -import java.util.Optional; import java.util.logging.Logger; import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE; @@ -120,20 +118,19 @@ public class OnStartupTasks { /** * Displays a hint to use the legacy AuthMe JAR if AuthMe could not be started - * because Gson was not found. - * - * @param th the Throwable to process + * because Gson or newer Guava classes were not found. */ - public static void displayLegacyJarHint(Throwable th) { - if (th instanceof InjectorReflectionException) { - Throwable causeOfCause = Optional.of(th) - .map(Throwable::getCause) - .map(Throwable::getCause).orElse(null); - if (causeOfCause instanceof NoClassDefFoundError - && "Lcom/google/gson/Gson;".equals(causeOfCause.getMessage())) { - ConsoleLogger.warning("YOU MUST DOWNLOAD THE LEGACY JAR TO USE AUTHME ON YOUR SERVER"); - ConsoleLogger.warning("Get authme-legacy.jar from http://ci.xephi.fr/job/AuthMeReloaded/"); - } + public static void verifyIfLegacyJarIsNeeded() { + try { + Class[] classes = { + com.google.common.base.MoreObjects.class, // < 1.12 Minecraft + com.google.gson.Gson.class // < 1.7 Minecraft + }; + } catch (NoClassDefFoundError e) { + ConsoleLogger.warning("YOU MUST DOWNLOAD THE LEGACY JAR TO USE AUTHME ON YOUR SERVER"); + ConsoleLogger.warning("Get authme-legacy.jar from http://ci.xephi.fr/job/AuthMeReloaded/"); + ConsoleLogger.warning("Reason: could not load class '" + e.getMessage() + "'"); + throw e; } } diff --git a/src/test/java/fr/xephi/authme/initialization/OnStartupTasksTest.java b/src/test/java/fr/xephi/authme/initialization/OnStartupTasksTest.java index 4a95a1029..245855702 100644 --- a/src/test/java/fr/xephi/authme/initialization/OnStartupTasksTest.java +++ b/src/test/java/fr/xephi/authme/initialization/OnStartupTasksTest.java @@ -1,6 +1,5 @@ package fr.xephi.authme.initialization; -import ch.jalu.injector.exceptions.InjectorReflectionException; import fr.xephi.authme.TestHelper; import fr.xephi.authme.security.HashAlgorithm; import org.junit.Test; @@ -9,7 +8,6 @@ import java.util.logging.Logger; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; /** @@ -17,44 +15,13 @@ import static org.mockito.Mockito.verifyZeroInteractions; */ public class OnStartupTasksTest { - @Test - public void shouldDisplayLegacyJarHint() { - // given - Logger logger = TestHelper.setupLogger(); - NoClassDefFoundError noClassDefError = new NoClassDefFoundError("Lcom/google/gson/Gson;"); - ReflectiveOperationException ex2 = new ReflectiveOperationException("", noClassDefError); - InjectorReflectionException ex = new InjectorReflectionException("", ex2); - - // when - OnStartupTasks.displayLegacyJarHint(ex); - - // then - verify(logger).warning("YOU MUST DOWNLOAD THE LEGACY JAR TO USE AUTHME ON YOUR SERVER"); - } - - @Test - public void shouldNotDisplayLegacyHintForDifferentException() { - // given - Logger logger = TestHelper.setupLogger(); - NullPointerException npe = new NullPointerException(); - - // when - OnStartupTasks.displayLegacyJarHint(npe); - - // then - verifyZeroInteractions(logger); - } - @Test public void shouldNotDisplayLegacyHintForWrongCause() { // given Logger logger = TestHelper.setupLogger(); - IllegalAccessException illegalAccessException = new IllegalAccessException("Lcom/google/gson/Gson;"); - ReflectiveOperationException ex2 = new ReflectiveOperationException("", illegalAccessException); - InjectorReflectionException ex = new InjectorReflectionException("", ex2); // when - OnStartupTasks.displayLegacyJarHint(ex); + OnStartupTasks.verifyIfLegacyJarIsNeeded(); // then verifyZeroInteractions(logger);