From 7932c1bf90d5f824dfde72f58cfc18eac2e09a32 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sat, 25 Nov 2017 21:27:18 +0100 Subject: [PATCH] Update to injector 1.0 - Includes Factory and SingletonStore so our custom implementation is removed --- pom.xml | 2 +- src/main/java/fr/xephi/authme/AuthMe.java | 3 - .../xephi/authme/command/CommandHandler.java | 2 +- .../executable/authme/ConverterCommand.java | 2 +- .../executable/authme/ReloadCommand.java | 2 +- .../authme/debug/DataStatistics.java | 2 +- .../executable/authme/debug/DebugCommand.java | 2 +- .../limbo/persistence/LimboPersistence.java | 2 +- .../initialization/factory/Factory.java | 19 ------ .../factory/FactoryDependencyHandler.java | 46 -------------- .../factory/SingletonStore.java | 37 ----------- .../SingletonStoreDependencyHandler.java | 61 ------------------- .../process/register/AsyncRegister.java | 2 +- .../authme/security/PasswordSecurity.java | 2 +- .../fr/xephi/authme/task/CleanupTask.java | 2 +- .../authme/AuthMeInitializationTest.java | 3 - .../authme/command/CommandHandlerTest.java | 2 +- .../authme/ConverterCommandTest.java | 2 +- .../executable/authme/ReloadCommandTest.java | 2 +- .../authme/debug/DataStatisticsTest.java | 2 +- .../authme/debug/DebugCommandTest.java | 2 +- .../persistence/LimboPersistenceTest.java | 2 +- .../process/register/AsyncRegisterTest.java | 2 +- .../authme/security/PasswordSecurityTest.java | 2 +- .../fr/xephi/authme/task/CleanupTaskTest.java | 2 +- .../tools/dependencygraph/DrawDependency.java | 32 +++++----- src/test/java/tools/utils/InjectorUtils.java | 34 +++++++++-- 27 files changed, 64 insertions(+), 209 deletions(-) delete mode 100644 src/main/java/fr/xephi/authme/initialization/factory/Factory.java delete mode 100644 src/main/java/fr/xephi/authme/initialization/factory/FactoryDependencyHandler.java delete mode 100644 src/main/java/fr/xephi/authme/initialization/factory/SingletonStore.java delete mode 100644 src/main/java/fr/xephi/authme/initialization/factory/SingletonStoreDependencyHandler.java diff --git a/pom.xml b/pom.xml index 490dbc7e..e0828671 100644 --- a/pom.xml +++ b/pom.xml @@ -302,7 +302,7 @@ ch.jalu injector - 0.4.1 + 1.0 compile true diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index 9a569b1a..15a37ab4 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -12,8 +12,6 @@ import fr.xephi.authme.initialization.OnShutdownPlayerSaver; import fr.xephi.authme.initialization.OnStartupTasks; import fr.xephi.authme.initialization.SettingsProvider; import fr.xephi.authme.initialization.TaskCloser; -import fr.xephi.authme.initialization.factory.FactoryDependencyHandler; -import fr.xephi.authme.initialization.factory.SingletonStoreDependencyHandler; import fr.xephi.authme.listener.BlockListener; import fr.xephi.authme.listener.EntityListener; import fr.xephi.authme.listener.PlayerListener; @@ -201,7 +199,6 @@ public class AuthMe extends JavaPlugin { // Create injector, provide elements from the Bukkit environment and register providers injector = new InjectorBuilder() - .addHandlers(new FactoryDependencyHandler(), new SingletonStoreDependencyHandler()) .addDefaultHandlers("fr.xephi.authme") .create(); injector.register(AuthMe.class, this); diff --git a/src/main/java/fr/xephi/authme/command/CommandHandler.java b/src/main/java/fr/xephi/authme/command/CommandHandler.java index acbb4757..27445e02 100644 --- a/src/main/java/fr/xephi/authme/command/CommandHandler.java +++ b/src/main/java/fr/xephi/authme/command/CommandHandler.java @@ -1,8 +1,8 @@ package fr.xephi.authme.command; +import ch.jalu.injector.factory.Factory; import fr.xephi.authme.AuthMe; import fr.xephi.authme.command.help.HelpProvider; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.message.Messages; import fr.xephi.authme.permission.PermissionsManager; diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/ConverterCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/ConverterCommand.java index b0d1c7fa..2973ba2d 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/ConverterCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/ConverterCommand.java @@ -1,5 +1,6 @@ package fr.xephi.authme.command.executable.authme; +import ch.jalu.injector.factory.Factory; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSortedMap; import fr.xephi.authme.ConsoleLogger; @@ -13,7 +14,6 @@ import fr.xephi.authme.datasource.converter.RoyalAuthConverter; import fr.xephi.authme.datasource.converter.SqliteToSql; import fr.xephi.authme.datasource.converter.VAuthConverter; import fr.xephi.authme.datasource.converter.XAuthConverter; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.CommonService; diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/ReloadCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/ReloadCommand.java index ce288c14..164b5913 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/ReloadCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/ReloadCommand.java @@ -1,12 +1,12 @@ package fr.xephi.authme.command.executable.authme; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.AuthMe; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.command.ExecutableCommand; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.SettingsDependent; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.service.CommonService; import fr.xephi.authme.settings.Settings; diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/debug/DataStatistics.java b/src/main/java/fr/xephi/authme/command/executable/authme/debug/DataStatistics.java index 75a17869..f90883b8 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/debug/DataStatistics.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/debug/DataStatistics.java @@ -1,5 +1,6 @@ package fr.xephi.authme.command.executable.authme.debug; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.data.limbo.LimboService; import fr.xephi.authme.datasource.CacheDataSource; @@ -7,7 +8,6 @@ import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.initialization.HasCleanup; import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.SettingsDependent; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.permission.DebugSectionPermissions; import fr.xephi.authme.permission.PermissionNode; import org.bukkit.ChatColor; diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/debug/DebugCommand.java b/src/main/java/fr/xephi/authme/command/executable/authme/debug/DebugCommand.java index 53ee747e..c7b0d8fc 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/debug/DebugCommand.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/debug/DebugCommand.java @@ -1,8 +1,8 @@ package fr.xephi.authme.command.executable.authme.debug; +import ch.jalu.injector.factory.Factory; import com.google.common.collect.ImmutableSet; import fr.xephi.authme.command.ExecutableCommand; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.permission.PermissionsManager; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/fr/xephi/authme/data/limbo/persistence/LimboPersistence.java b/src/main/java/fr/xephi/authme/data/limbo/persistence/LimboPersistence.java index f07e82cd..391878da 100644 --- a/src/main/java/fr/xephi/authme/data/limbo/persistence/LimboPersistence.java +++ b/src/main/java/fr/xephi/authme/data/limbo/persistence/LimboPersistence.java @@ -1,9 +1,9 @@ package fr.xephi.authme.data.limbo.persistence; +import ch.jalu.injector.factory.Factory; import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.data.limbo.LimboPlayer; import fr.xephi.authme.initialization.SettingsDependent; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.LimboSettings; import org.bukkit.entity.Player; diff --git a/src/main/java/fr/xephi/authme/initialization/factory/Factory.java b/src/main/java/fr/xephi/authme/initialization/factory/Factory.java deleted file mode 100644 index 0f4ae62a..00000000 --- a/src/main/java/fr/xephi/authme/initialization/factory/Factory.java +++ /dev/null @@ -1,19 +0,0 @@ -package fr.xephi.authme.initialization.factory; - -/** - * Injectable factory that creates new instances of a certain type. - * - * @param

the parent type to which the factory is limited to - */ -public interface Factory

{ - - /** - * Creates an instance of the given class. - * - * @param clazz the class to instantiate - * @param the class type - * @return new instance of the class - */ - C newInstance(Class clazz); - -} diff --git a/src/main/java/fr/xephi/authme/initialization/factory/FactoryDependencyHandler.java b/src/main/java/fr/xephi/authme/initialization/factory/FactoryDependencyHandler.java deleted file mode 100644 index e063d149..00000000 --- a/src/main/java/fr/xephi/authme/initialization/factory/FactoryDependencyHandler.java +++ /dev/null @@ -1,46 +0,0 @@ -package fr.xephi.authme.initialization.factory; - -import ch.jalu.injector.Injector; -import ch.jalu.injector.context.ResolvedInstantiationContext; -import ch.jalu.injector.handlers.dependency.DependencyHandler; -import ch.jalu.injector.handlers.instantiation.DependencyDescription; -import ch.jalu.injector.utils.ReflectionUtils; - -/** - * Dependency handler that builds {@link Factory} objects. - */ -public class FactoryDependencyHandler implements DependencyHandler { - - @Override - public Object resolveValue(ResolvedInstantiationContext context, DependencyDescription dependencyDescription) { - if (dependencyDescription.getType() == Factory.class) { - Class genericType = ReflectionUtils.getGenericType(dependencyDescription.getGenericType()); - if (genericType == null) { - throw new IllegalStateException("Factory fields must have concrete generic type. " - + "Cannot get generic type for field in '" + context.getMappedClass() + "'"); - } - - return new FactoryImpl<>(genericType, context.getInjector()); - } - return null; - } - - private static final class FactoryImpl

implements Factory

{ - - private final Injector injector; - private final Class

parentClass; - - FactoryImpl(Class

parentClass, Injector injector) { - this.parentClass = parentClass; - this.injector = injector; - } - - @Override - public C newInstance(Class clazz) { - if (parentClass.isAssignableFrom(clazz)) { - return injector.newInstance(clazz); - } - throw new IllegalArgumentException(clazz + " not child of " + parentClass); - } - } -} diff --git a/src/main/java/fr/xephi/authme/initialization/factory/SingletonStore.java b/src/main/java/fr/xephi/authme/initialization/factory/SingletonStore.java deleted file mode 100644 index 13a5cbb5..00000000 --- a/src/main/java/fr/xephi/authme/initialization/factory/SingletonStore.java +++ /dev/null @@ -1,37 +0,0 @@ -package fr.xephi.authme.initialization.factory; - -import java.util.Collection; - -/** - * Injectable object to retrieve and create singletons of a common parent. - * - * @param

the parent class to which this store is limited to - */ -public interface SingletonStore

{ - - /** - * Returns the singleton of the given type, creating it if it hasn't been yet created. - * - * @param clazz the class to get the singleton for - * @param type of the singleton - * @return the singleton of type {@code C} - */ - C getSingleton(Class clazz); - - /** - * Returns all existing singletons of this store's type. - * - * @return all registered singletons of type {@code P} - */ - Collection

retrieveAllOfType(); - - /** - * Returns all existing singletons of the given type. - * - * @param clazz the type to get singletons for - * @param class type - * @return all registered singletons of type {@code C} - */ - Collection retrieveAllOfType(Class clazz); - -} diff --git a/src/main/java/fr/xephi/authme/initialization/factory/SingletonStoreDependencyHandler.java b/src/main/java/fr/xephi/authme/initialization/factory/SingletonStoreDependencyHandler.java deleted file mode 100644 index 09a198c7..00000000 --- a/src/main/java/fr/xephi/authme/initialization/factory/SingletonStoreDependencyHandler.java +++ /dev/null @@ -1,61 +0,0 @@ -package fr.xephi.authme.initialization.factory; - -import ch.jalu.injector.Injector; -import ch.jalu.injector.context.ResolvedInstantiationContext; -import ch.jalu.injector.handlers.dependency.DependencyHandler; -import ch.jalu.injector.handlers.instantiation.DependencyDescription; -import ch.jalu.injector.utils.ReflectionUtils; - -import java.util.Collection; - -/** - * Dependency handler that builds {@link SingletonStore} objects. - */ -public class SingletonStoreDependencyHandler implements DependencyHandler { - - @Override - public Object resolveValue(ResolvedInstantiationContext context, DependencyDescription dependencyDescription) { - if (dependencyDescription.getType() == SingletonStore.class) { - Class genericType = ReflectionUtils.getGenericType(dependencyDescription.getGenericType()); - if (genericType == null) { - throw new IllegalStateException("Singleton store fields must have concrete generic type. " - + "Cannot get generic type for field in '" + context.getMappedClass() + "'"); - } - - return new SingletonStoreImpl<>(genericType, context.getInjector()); - } - return null; - } - - private static final class SingletonStoreImpl

implements SingletonStore

{ - - private final Injector injector; - private final Class

parentClass; - - SingletonStoreImpl(Class

parentClass, Injector injector) { - this.parentClass = parentClass; - this.injector = injector; - } - - @Override - public C getSingleton(Class clazz) { - if (parentClass.isAssignableFrom(clazz)) { - return injector.getSingleton(clazz); - } - throw new IllegalArgumentException(clazz + " not child of " + parentClass); - } - - @Override - public Collection

retrieveAllOfType() { - return retrieveAllOfType(parentClass); - } - - @Override - public Collection retrieveAllOfType(Class clazz) { - if (parentClass.isAssignableFrom(clazz)) { - return injector.retrieveAllOfType(clazz); - } - throw new IllegalArgumentException(clazz + " not child of " + parentClass); - } - } -} diff --git a/src/main/java/fr/xephi/authme/process/register/AsyncRegister.java b/src/main/java/fr/xephi/authme/process/register/AsyncRegister.java index 11f6354c..a370b1a9 100644 --- a/src/main/java/fr/xephi/authme/process/register/AsyncRegister.java +++ b/src/main/java/fr/xephi/authme/process/register/AsyncRegister.java @@ -1,9 +1,9 @@ package fr.xephi.authme.process.register; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.data.auth.PlayerAuth; import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.datasource.DataSource; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.process.AsynchronousProcess; diff --git a/src/main/java/fr/xephi/authme/security/PasswordSecurity.java b/src/main/java/fr/xephi/authme/security/PasswordSecurity.java index ebccb63d..d6cb6e71 100644 --- a/src/main/java/fr/xephi/authme/security/PasswordSecurity.java +++ b/src/main/java/fr/xephi/authme/security/PasswordSecurity.java @@ -1,9 +1,9 @@ package fr.xephi.authme.security; +import ch.jalu.injector.factory.Factory; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.events.PasswordEncryptionEvent; import fr.xephi.authme.initialization.Reloadable; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.security.crypts.EncryptionMethod; import fr.xephi.authme.security.crypts.HashedPassword; import fr.xephi.authme.settings.Settings; diff --git a/src/main/java/fr/xephi/authme/task/CleanupTask.java b/src/main/java/fr/xephi/authme/task/CleanupTask.java index f373c3e5..48d989f1 100644 --- a/src/main/java/fr/xephi/authme/task/CleanupTask.java +++ b/src/main/java/fr/xephi/authme/task/CleanupTask.java @@ -1,7 +1,7 @@ package fr.xephi.authme.task; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.initialization.HasCleanup; -import fr.xephi.authme.initialization.factory.SingletonStore; import org.bukkit.scheduler.BukkitRunnable; import javax.inject.Inject; diff --git a/src/test/java/fr/xephi/authme/AuthMeInitializationTest.java b/src/test/java/fr/xephi/authme/AuthMeInitializationTest.java index d0f3c1b3..e64d0f7e 100644 --- a/src/test/java/fr/xephi/authme/AuthMeInitializationTest.java +++ b/src/test/java/fr/xephi/authme/AuthMeInitializationTest.java @@ -8,8 +8,6 @@ import fr.xephi.authme.api.v3.AuthMeApi; import fr.xephi.authme.command.CommandHandler; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.initialization.DataFolder; -import fr.xephi.authme.initialization.factory.FactoryDependencyHandler; -import fr.xephi.authme.initialization.factory.SingletonStoreDependencyHandler; import fr.xephi.authme.listener.BlockListener; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.process.Management; @@ -96,7 +94,6 @@ public class AuthMeInitializationTest { new Settings(dataFolder, mock(PropertyResource.class), null, buildConfigurationData()); Injector injector = new InjectorBuilder() - .addHandlers(new FactoryDependencyHandler(), new SingletonStoreDependencyHandler()) .addDefaultHandlers("fr.xephi.authme") .create(); injector.provide(DataFolder.class, dataFolder); diff --git a/src/test/java/fr/xephi/authme/command/CommandHandlerTest.java b/src/test/java/fr/xephi/authme/command/CommandHandlerTest.java index e343199f..d80d8f8a 100644 --- a/src/test/java/fr/xephi/authme/command/CommandHandlerTest.java +++ b/src/test/java/fr/xephi/authme/command/CommandHandlerTest.java @@ -1,12 +1,12 @@ package fr.xephi.authme.command; import ch.jalu.injector.Injector; +import ch.jalu.injector.factory.Factory; import com.google.common.collect.Sets; import fr.xephi.authme.command.TestCommandsUtil.TestLoginCommand; import fr.xephi.authme.command.TestCommandsUtil.TestRegisterCommand; import fr.xephi.authme.command.TestCommandsUtil.TestUnregisterCommand; import fr.xephi.authme.command.help.HelpProvider; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.message.Messages; import fr.xephi.authme.permission.PermissionsManager; diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java index 02ecd7e2..626e9c90 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java @@ -1,8 +1,8 @@ package fr.xephi.authme.command.executable.authme; +import ch.jalu.injector.factory.Factory; import fr.xephi.authme.TestHelper; import fr.xephi.authme.datasource.converter.Converter; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.CommonService; diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/ReloadCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/ReloadCommandTest.java index 52e342db..8b10de64 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/ReloadCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/ReloadCommandTest.java @@ -1,12 +1,12 @@ package fr.xephi.authme.command.executable.authme; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.AuthMe; import fr.xephi.authme.TestHelper; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSourceType; import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.SettingsDependent; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.output.LogLevel; import fr.xephi.authme.service.CommonService; diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/debug/DataStatisticsTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/debug/DataStatisticsTest.java index e28c110f..52b13b0e 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/debug/DataStatisticsTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/debug/DataStatisticsTest.java @@ -1,5 +1,6 @@ package fr.xephi.authme.command.executable.authme.debug; +import ch.jalu.injector.factory.SingletonStore; import com.google.common.cache.LoadingCache; import fr.xephi.authme.ReflectionTestUtils; import fr.xephi.authme.data.auth.PlayerAuth; @@ -11,7 +12,6 @@ import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.initialization.HasCleanup; import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.SettingsDependent; -import fr.xephi.authme.initialization.factory.SingletonStore; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.junit.Before; diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/debug/DebugCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/debug/DebugCommandTest.java index 3174926a..e2c63a60 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/debug/DebugCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/debug/DebugCommandTest.java @@ -1,6 +1,6 @@ package fr.xephi.authme.command.executable.authme.debug; -import fr.xephi.authme.initialization.factory.Factory; +import ch.jalu.injector.factory.Factory; import fr.xephi.authme.permission.DebugSectionPermissions; import fr.xephi.authme.permission.PermissionNode; import fr.xephi.authme.permission.PermissionsManager; diff --git a/src/test/java/fr/xephi/authme/data/limbo/persistence/LimboPersistenceTest.java b/src/test/java/fr/xephi/authme/data/limbo/persistence/LimboPersistenceTest.java index d253869f..2b1e311c 100644 --- a/src/test/java/fr/xephi/authme/data/limbo/persistence/LimboPersistenceTest.java +++ b/src/test/java/fr/xephi/authme/data/limbo/persistence/LimboPersistenceTest.java @@ -1,12 +1,12 @@ package fr.xephi.authme.data.limbo.persistence; +import ch.jalu.injector.factory.Factory; import ch.jalu.injector.testing.BeforeInjecting; import ch.jalu.injector.testing.DelayedInjectionRunner; import ch.jalu.injector.testing.InjectDelayed; import fr.xephi.authme.ReflectionTestUtils; import fr.xephi.authme.TestHelper; import fr.xephi.authme.data.limbo.LimboPlayer; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.properties.LimboSettings; import org.bukkit.entity.Player; diff --git a/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java b/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java index dee3dc64..e044a754 100644 --- a/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java +++ b/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java @@ -1,9 +1,9 @@ package fr.xephi.authme.process.register; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.TestHelper; import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.datasource.DataSource; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.permission.PermissionsManager; import fr.xephi.authme.process.register.executors.PasswordRegisterParams; diff --git a/src/test/java/fr/xephi/authme/security/PasswordSecurityTest.java b/src/test/java/fr/xephi/authme/security/PasswordSecurityTest.java index 44118076..520ae8dd 100644 --- a/src/test/java/fr/xephi/authme/security/PasswordSecurityTest.java +++ b/src/test/java/fr/xephi/authme/security/PasswordSecurityTest.java @@ -2,6 +2,7 @@ package fr.xephi.authme.security; import ch.jalu.injector.Injector; import ch.jalu.injector.InjectorBuilder; +import ch.jalu.injector.factory.Factory; import ch.jalu.injector.testing.BeforeInjecting; import ch.jalu.injector.testing.DelayedInjectionRunner; import ch.jalu.injector.testing.InjectDelayed; @@ -9,7 +10,6 @@ import fr.xephi.authme.ReflectionTestUtils; import fr.xephi.authme.TestHelper; import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.events.PasswordEncryptionEvent; -import fr.xephi.authme.initialization.factory.Factory; import fr.xephi.authme.security.crypts.EncryptionMethod; import fr.xephi.authme.security.crypts.HashedPassword; import fr.xephi.authme.security.crypts.Joomla; diff --git a/src/test/java/fr/xephi/authme/task/CleanupTaskTest.java b/src/test/java/fr/xephi/authme/task/CleanupTaskTest.java index 33cd360b..4269f9bd 100644 --- a/src/test/java/fr/xephi/authme/task/CleanupTaskTest.java +++ b/src/test/java/fr/xephi/authme/task/CleanupTaskTest.java @@ -1,7 +1,7 @@ package fr.xephi.authme.task; +import ch.jalu.injector.factory.SingletonStore; import fr.xephi.authme.initialization.HasCleanup; -import fr.xephi.authme.initialization.factory.SingletonStore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; diff --git a/src/test/java/tools/dependencygraph/DrawDependency.java b/src/test/java/tools/dependencygraph/DrawDependency.java index 98de28be..3f34197c 100644 --- a/src/test/java/tools/dependencygraph/DrawDependency.java +++ b/src/test/java/tools/dependencygraph/DrawDependency.java @@ -1,7 +1,9 @@ package tools.dependencygraph; -import ch.jalu.injector.handlers.instantiation.DependencyDescription; -import ch.jalu.injector.handlers.instantiation.Instantiation; +import ch.jalu.injector.context.ObjectIdentifier; +import ch.jalu.injector.factory.Factory; +import ch.jalu.injector.factory.SingletonStore; +import ch.jalu.injector.handlers.instantiation.Resolution; import ch.jalu.injector.handlers.instantiation.StandardInjectionProvider; import ch.jalu.injector.utils.ReflectionUtils; import com.google.common.collect.HashMultimap; @@ -14,13 +16,12 @@ import fr.xephi.authme.command.executable.authme.debug.DebugCommand; import fr.xephi.authme.data.limbo.persistence.LimboPersistence; import fr.xephi.authme.datasource.converter.Converter; import fr.xephi.authme.initialization.DataFolder; -import fr.xephi.authme.initialization.factory.Factory; -import fr.xephi.authme.initialization.factory.SingletonStore; import fr.xephi.authme.process.AsynchronousProcess; import fr.xephi.authme.process.SynchronousProcess; import fr.xephi.authme.process.register.executors.RegistrationExecutor; import fr.xephi.authme.security.crypts.EncryptionMethod; import org.bukkit.event.Listener; +import tools.utils.InjectorUtils; import tools.utils.ToolTask; import tools.utils.ToolsConstants; @@ -124,21 +125,20 @@ public class DrawDependency implements ToolTask { * This is interesting so that a dependency in a class to {@code Factory} is * rendered as a dependency to {@code Foo}, not to {@code Factory}. * - * @param clazz class of the dependency * @param genericType generic type of the dependency * @return the class to use to render the dependency */ - private Class unwrapGenericClass(Class clazz, Type genericType) { - if (clazz == Factory.class || clazz == SingletonStore.class) { + private Class unwrapGenericClass(Type genericType) { + if (genericType == Factory.class || genericType == SingletonStore.class) { Class parameterType = ReflectionUtils.getGenericType(genericType); - Objects.requireNonNull(parameterType, "Parameter type for '" + clazz + "' should be a concrete class"); + Objects.requireNonNull(parameterType, "Parameter type for '" + genericType + "' should be a concrete class"); return parameterType; } - return clazz; + return InjectorUtils.convertToClass(genericType); } private List getDependencies(Class clazz) { - Instantiation instantiation = new StandardInjectionProvider().safeGet(clazz); + Resolution instantiation = new StandardInjectionProvider().safeGet(clazz); return instantiation == null ? null : formatInjectionDependencies(instantiation); } @@ -150,22 +150,22 @@ public class DrawDependency implements ToolTask { * @param injection the injection whose dependencies should be formatted * @return list of dependencies in a friendly format */ - private List formatInjectionDependencies(Instantiation injection) { - List descriptions = injection.getDependencies(); - List result = new ArrayList<>(descriptions.size()); - for (DependencyDescription dependency : descriptions) { + private List formatInjectionDependencies(Resolution injection) { + List dependencies = injection.getDependencies(); + List result = new ArrayList<>(dependencies.size()); + for (ObjectIdentifier dependency : dependencies) { Class annotation = getRelevantAnnotationClass(dependency.getAnnotations()); if (annotation != null) { result.add("@" + annotation.getSimpleName()); } else { - Class clazz = unwrapGenericClass(dependency.getType(), dependency.getGenericType()); + Class clazz = unwrapGenericClass(dependency.getType()); result.add(mapToSuper(clazz).getSimpleName()); } } return result; } - private static Class getRelevantAnnotationClass(Annotation[] annotations) { + private static Class getRelevantAnnotationClass(List annotations) { for (Annotation annotation : annotations) { if (ANNOTATION_TYPES.contains(annotation.annotationType())) { return annotation.annotationType(); diff --git a/src/test/java/tools/utils/InjectorUtils.java b/src/test/java/tools/utils/InjectorUtils.java index 6b5d510e..27150125 100644 --- a/src/test/java/tools/utils/InjectorUtils.java +++ b/src/test/java/tools/utils/InjectorUtils.java @@ -1,9 +1,11 @@ package tools.utils; -import ch.jalu.injector.handlers.instantiation.DependencyDescription; -import ch.jalu.injector.handlers.instantiation.Instantiation; +import ch.jalu.injector.context.ObjectIdentifier; +import ch.jalu.injector.handlers.instantiation.Resolution; import ch.jalu.injector.handlers.instantiation.StandardInjectionProvider; +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; import java.util.HashSet; import java.util.Set; @@ -22,15 +24,37 @@ public final class InjectorUtils { * @return the class' dependencies, or null if no instantiation method found */ public static Set> getDependencies(Class clazz) { - Instantiation instantiation = new StandardInjectionProvider().safeGet(clazz); + Resolution instantiation = new StandardInjectionProvider().safeGet(clazz); if (instantiation == null) { return null; } Set> dependencies = new HashSet<>(); - for (DependencyDescription description : instantiation.getDependencies()) { - dependencies.add(description.getType()); + for (ObjectIdentifier description : instantiation.getDependencies()) { + dependencies.add(convertToClass(description.getType())); } return dependencies; } + /** + * Returns the given type as a {@link Class}. + * + * @param type the type to convert + * @return class corresponding to the provided type + */ + public static Class convertToClass(Type type) { + if (type instanceof Class) { + return (Class) type; + } else if (type instanceof ParameterizedType) { + Type rawType = ((ParameterizedType) type).getRawType(); + if (rawType instanceof Class) { + return (Class) rawType; + } else { + throw new IllegalStateException("Got raw type '" + rawType + "' of type '" + + rawType.getClass() + "' for genericType '" + type + "'"); + } + } + Class typeClass = type == null ? null : type.getClass(); + throw new IllegalStateException("Unknown type implementation '" + typeClass + "' for '" + type + "'"); + } + }