Uses of Class
com.ultikits.ultitools.abstracts.UltiToolsPlugin
Packages that use UltiToolsPlugin
Package
Description
-
Uses of UltiToolsPlugin in com.ultikits.ultitools.abstracts
Fields in com.ultikits.ultitools.abstracts declared as UltiToolsPluginMethods in com.ultikits.ultitools.abstracts with parameters of type UltiToolsPluginModifier and TypeMethodDescriptionfinal voidAbstractConfigEntity.init(UltiToolsPlugin ultiToolsPlugin) Initializes the configuration entity.booleanUltiToolsPlugin.isNewerVersionThan(UltiToolsPlugin plugin) -
Uses of UltiToolsPlugin in com.ultikits.ultitools.commands
Methods in com.ultikits.ultitools.commands with parameters of type UltiToolsPluginModifier and TypeMethodDescription(package private) static booleanPluginInstallCommands.isSameModule(UltiToolsPlugin installedPlugin, PluginEntity catalogueEntry) Decides whetherinstalledPlugin(a currently loaded module) andcatalogueEntry(a directory entry from the UltiCloud catalogue) refer to the SAME module (#439).Method parameters in com.ultikits.ultitools.commands with type arguments of type UltiToolsPluginModifier and TypeMethodDescription(package private) static StringPluginInstallCommands.resolveInstalledRuntimeName(List<UltiToolsPlugin> installedPlugins, PluginEntity catalogueEntry) Resolves the runtime name to use for the/upm uninstallclick command inPluginInstallCommands.listPlugins(CommandSender, String)'s player branch: the LOADED module's owngetPluginName(), not the catalogue entry's display name (gate-2 Codex round 1). -
Uses of UltiToolsPlugin in com.ultikits.ultitools.context
Fields in com.ultikits.ultitools.context with type parameters of type UltiToolsPluginModifier and TypeFieldDescriptionprivate static final Map<UltiToolsPlugin, Map<Class<?>, Boolean>> ConditionalRegistrationEvaluator.STARTUP_DECISIONSEvery scan-time@ConditionalOnConfigdecision, keyed by owning plugin instance (identity) then by the evaluated class.Methods in com.ultikits.ultitools.context with parameters of type UltiToolsPluginModifier and TypeMethodDescriptionstatic voidConditionalRegistrationEvaluator.clear(UltiToolsPlugin plugin) Release every decision recorded forplugin.private static booleanConditionalRegistrationEvaluator.evaluate(UltiToolsPlugin plugin, ConditionalOnConfig condition) The decision logic extracted verbatim from the pre-6.3.0shouldRegisterbody -- no existing decision semantics changed by this extraction.private static voidConditionalRegistrationEvaluator.record(UltiToolsPlugin plugin, Class<?> clazz, boolean decision) ConditionalRegistrationEvaluator.reportDrift(UltiToolsPlugin plugin) Re-evaluate every@ConditionalOnConfigdecision recorded forpluginand log (and return) oneLevel.WARNINGmessage for each class whose answer has changed since it was recorded (issue #392, D-01). -
Uses of UltiToolsPlugin in com.ultikits.ultitools.interfaces
Methods in com.ultikits.ultitools.interfaces with parameters of type UltiToolsPluginModifier and TypeMethodDescriptiondefault voidDataStore.checkOwnership(UltiToolsPlugin plugin, Class<?> dataEntity) Shared ownership check for theDataStore.getOperator(UltiToolsPlugin, Class)legacy overload (D-14/D-18/02-12), the counterpart toDataStore.checkOwnership(java.io.File, Class)above for the overload that already carries aUltiToolsPluginidentity directly rather than aFileto reverse-resolve.<T extends BaseDataEntity<String>>
DataOperator<T> DataStore.getOperator(UltiToolsPlugin plugin, Class<T> dataEntity) Deprecated, for removal: This API element is subject to removal in a future version. -
Uses of UltiToolsPlugin in com.ultikits.ultitools.interfaces.impl.data.json
Methods in com.ultikits.ultitools.interfaces.impl.data.json with parameters of type UltiToolsPluginModifier and TypeMethodDescription<T extends BaseDataEntity<String>>
DataOperator<T> JsonStore.getOperator(UltiToolsPlugin plugin, Class<T> dataEntity) -
Uses of UltiToolsPlugin in com.ultikits.ultitools.interfaces.impl.data.mysql
Methods in com.ultikits.ultitools.interfaces.impl.data.mysql with parameters of type UltiToolsPluginModifier and TypeMethodDescription<T extends BaseDataEntity<String>>
DataOperator<T> MysqlDataStore.getOperator(UltiToolsPlugin plugin, Class<T> dataEntity) -
Uses of UltiToolsPlugin in com.ultikits.ultitools.interfaces.impl.data.sqlite
Methods in com.ultikits.ultitools.interfaces.impl.data.sqlite with parameters of type UltiToolsPluginModifier and TypeMethodDescription<T extends BaseDataEntity<String>>
DataOperator<T> SQLiteDataStore.getOperator(UltiToolsPlugin plugin, Class<T> dataEntity) -
Uses of UltiToolsPlugin in com.ultikits.ultitools.manager
Fields in com.ultikits.ultitools.manager with type parameters of type UltiToolsPluginModifier and TypeFieldDescriptionprivate final Map<UltiToolsPlugin, List<TaskManager.BoundTask>> TaskManager.boundTasksConfig-bound tasks, per module, as handles that remember their method, their binding, their current timing and their last run -- the per-method record the three buckets above do not keep.private final Map<UltiToolsPlugin, List<org.bukkit.command.Command>> CommandManager.commandListMapprivate final Map<UltiToolsPlugin, List<org.bukkit.event.Listener>> ListenerManager.listenerListMapprivate final Class<? extends UltiToolsPlugin> PluginDependencyResolver.PluginNode.pluginClassprivate final List<Class<? extends UltiToolsPlugin>> PluginManager.pluginClassListprivate final Map<UltiToolsPlugin, Map<String, AbstractConfigEntity>> ConfigManager.pluginConfigMapprivate final List<UltiToolsPlugin> PluginManager.pluginListprivate final Map<UltiToolsPlugin, List<org.bukkit.scheduler.BukkitTask>> TaskManager.pluginTasksprivate final List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.CircularDependencyException.sortedPrefixprivate final List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.MissingDependencyException.sortedPrefixMethods in com.ultikits.ultitools.manager that return UltiToolsPluginModifier and TypeMethodDescriptionprivate UltiToolsPluginPluginManager.finishInitializingPlugin(ClassLoader classLoader, Class<? extends UltiToolsPlugin> pluginClass, UltiToolsPlugin plugin) Run the construction-independent second half afterinitializePlugincompletes construction: the compatibility gate, then container assembly.CommandManager.getPluginByCommand(org.bukkit.command.Command command) Get the plugin instance by command.private UltiToolsPluginPluginManager.initializePlugin(ClassLoader classLoader, Class<? extends UltiToolsPlugin> pluginClass) Initialize module using its default (zero-argument) constructor.Methods in com.ultikits.ultitools.manager that return types with arguments of type UltiToolsPluginModifier and TypeMethodDescriptionClass<? extends UltiToolsPlugin> PluginDependencyResolver.PluginNode.getPluginClass()List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.CircularDependencyException.getSortedPrefix()The plugin classes Kahn's sort could still place, in load order.List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.MissingDependencyException.getSortedPrefix()The plugin classes that survive - do not depend, directly or transitively, on a missing hard dependency - in load order.private Class<? extends UltiToolsPlugin> PluginManager.loadPluginMainClass(ClassLoader classLoader, File pluginJar) Load module main class.List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.resolve(List<Class<? extends UltiToolsPlugin>> pluginClasses) Resolves plugin load order using Kahn's algorithm for topological sorting.private List<Class<? extends UltiToolsPlugin>> PluginManager.sortPluginsByDependencies(List<Class<? extends UltiToolsPlugin>> plugins) Sort plugins by their dependencies using Kahn's algorithm (topological sort).private List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.toClassList(List<String> names, Map<String, PluginDependencyResolver.PluginNode> nodes) Converts a sorted list of plugin names back to their plugin classes.Methods in com.ultikits.ultitools.manager with parameters of type UltiToolsPluginModifier and TypeMethodDescriptionprivate voidConfigManager.addConfigEntity(UltiToolsPlugin ultiToolsPlugin, AbstractConfigEntity configEntity) voidPluginManager.applyReloadedConfigBindings(UltiToolsPlugin plugin) Applies a module's reloaded configuration to its config-bound@Scheduledtasks and@CmdCDcooldowns (#531).private voidPluginManager.assemblePluginContainer(SimpleContainer pluginContext, UltiToolsPlugin plugin, Class<? extends UltiToolsPlugin> pluginClass, ClassLoader loader) Assemble a plugin's container: type registration, component scan, the plugin's own singleton registration, config-entity beans, the static instance field,DataScopeminting plus entity ownership, AOP wiring,refresh(), and (afterrefresh())@ContextEntrybean registration withautowireBean.private booleanPluginManager.attemptPluginRegistration(UltiToolsPlugin plugin) voidTaskManager.cancelAll(UltiToolsPlugin plugin) Cancel all scheduled tasks for a plugin.(package private) static voidConfigBindings.checkApiVersionFloor(UltiToolsPlugin plugin, String firstBinding) Refuses a module that uses a binding while declaring anapi-versionbelowConfigBindings.MIN_API_VERSION.private UltiToolsPluginPluginManager.finishInitializingPlugin(ClassLoader classLoader, Class<? extends UltiToolsPlugin> pluginClass, UltiToolsPlugin plugin) Run the construction-independent second half afterinitializePlugincompletes construction: the compatibility gate, then container assembly.(package private) static DataScopeDataScope.forPlugin(UltiToolsPlugin plugin, Set<Class<?>> ownedEntities) Mints a scope for an internalUltiToolsPluginmodule.ConfigManager.getAllConfigEntities(UltiToolsPlugin plugin) Get all config entities for a plugin.<T extends AbstractConfigEntity>
List<T> ConfigManager.getConfigEntities(UltiToolsPlugin plugin, Class<T> type) Get all config entities by type.<T extends AbstractConfigEntity>
TConfigManager.getConfigEntity(UltiToolsPlugin plugin, Class<T> type) Get config entity.<T extends AbstractConfigEntity>
TConfigManager.getConfigEntity(UltiToolsPlugin plugin, String path, Class<T> type) Get config entity by path.(package private) intTaskManager.getTaskCount(UltiToolsPlugin plugin) Get the number of registered tasks for a plugin (for testing).private booleanPluginManager.hasNewerVersionLoaded(UltiToolsPlugin plugin) Determines whether a newer version of the same module is already loaded.(package private) static ConfigurationExceptionConfigBindings.invalidValueAtLoad(UltiToolsPlugin plugin, String owner, ConfigBindings.Source source, Long value, String rule) The load-time refusal for an out-of-range bound value -- the same exception type and the same "file was not modified" contract as a@Rangeviolation.private booleanPluginManager.isUltiToolsVersionCompatible(UltiToolsPlugin plugin) private static voidPluginManager.keepRunning(UltiToolsPlugin plugin, String bindingKey, Integer before, Map<String, Integer> next, Set<String> reported, String why) private voidPluginManager.onPluginRegistered(UltiToolsPlugin plugin) private booleanPluginManager.passesCompatibilityGates(UltiToolsPlugin plugin) Compatibility gates that must run before the module's bean graph is built.private static voidPluginManager.refreshCooldownBindings(UltiToolsPlugin plugin) private static voidPluginManager.refreshOne(UltiToolsPlugin plugin, String bindingKey, Supplier<Long> source, Integer before, Map<String, Integer> next, Set<String> reported) Re-reads one bound cooldown intonext: the new value when it is valid, otherwise the running one with one WARNING per binding key -- also when the config's own reload failed.voidCommandManager.register(UltiToolsPlugin plugin, Class<? extends org.bukkit.command.CommandExecutor> clazz) Manually register a command.voidCommandManager.register(UltiToolsPlugin plugin, Class<? extends org.bukkit.command.CommandExecutor> clazz, String permission, String description, String... aliases) Manually register a command.private voidCommandManager.register(UltiToolsPlugin plugin, org.bukkit.command.CommandExecutor commandExecutor) Manually register a command, will not be managed by the container.private voidCommandManager.register(UltiToolsPlugin plugin, org.bukkit.command.CommandExecutor commandExecutor, String permission, String description, String... aliases) Manually register a command, will not be managed by the container.voidConfigManager.register(UltiToolsPlugin ultiToolsPlugin, AbstractConfigEntity configEntity) Register config entity.voidListenerManager.register(UltiToolsPlugin plugin, Class<? extends org.bukkit.event.Listener> listenerClass) Register listener.booleanPluginManager.register(UltiToolsPlugin plugin) voidCommandManager.registerAll(UltiToolsPlugin plugin) Register all classes annotated with @CmdExecutor in the specified package.voidConfigManager.registerAll(UltiToolsPlugin plugin, String[] packageNames, ClassLoader classLoader) Registers every@ConfigEntityclass found across MULTIPLE scan packages for one plugin, as ONE atomic batch (CR-01, #358 Part 1 gate-1 finding).voidConfigManager.registerAll(UltiToolsPlugin plugin, String packageName, ClassLoader classLoader) Register all config entities in the specified package.voidListenerManager.registerAll(UltiToolsPlugin plugin) Register all listeners in the UltiTools plugin class base package.private voidPluginManager.registerBukkit(UltiToolsPlugin plugin) Register bukkit commands or listeners.private voidListenerManager.registerListener(UltiToolsPlugin plugin, org.bukkit.event.Listener listener) Registers an already-constructedlistenerforpluginwith Bukkit and tracks it for laterListenerManager.unregisterAll(com.ultikits.ultitools.abstracts.UltiToolsPlugin).private voidPluginManager.registerModuleEventHandlers(EventBus eventBus, UltiToolsPlugin plugin, Object bean) Scan a bean for @ModuleEventHandler methods and register them with the EventBus.voidTaskManager.registerScheduledMethods(UltiToolsPlugin plugin, Object bean) Scan a bean forScheduledmethods and register them as Bukkit tasks.voidConfigManager.reloadConfigs(UltiToolsPlugin plugin) Reload all configs.private static longTaskManager.reloadedTicks(UltiToolsPlugin plugin, TaskManager.BoundTask handle, ConfigBindings.Source source, long currentTicks, Set<String> warnedKeys) voidTaskManager.rescheduleBound(UltiToolsPlugin plugin) Appliesplugin's reloaded configuration to its config-boundScheduledtasks.private voidTaskManager.rescheduleOne(UltiToolsPlugin plugin, TaskManager.BoundTask handle) (package private) static ConfigBindings.SourceConfigBindings.resolve(UltiToolsPlugin plugin, String owner, Class<? extends AbstractConfigEntity> configClass, String key) Resolveskeyon the single config entity ofconfigClassregistered forplugin.(package private) static TaskManager.BoundTaskTaskManager.BoundTask.resolveAtLoad(UltiToolsPlugin module, Object bean, Class<?> targetClass, Method method, Scheduled scheduled) Resolves and range-checks a bound method at load.private static voidPluginManager.resolveCooldownBindings(UltiToolsPlugin plugin, BaseCommandExecutor executor, Map<String, Integer> resolved, Map<String, Supplier<Long>> sources) Resolves every bound@CmdCDofexecutoronce, at load: shape, key, field, and range (an out-of-range value refuses the module).private voidConfigManager.rollBackRegisteredEntities(UltiToolsPlugin ultiToolsPlugin, Map<String, AbstractConfigEntity> entitiesToRestore) RestoresultiToolsPlugin's entry inConfigManager.pluginConfigMapto exactlyentitiesToRestore- not just the same key set, but the same path-to-entity VALUES, so a path this call replaced with a different entity before failing is restored to the entity that was actually there before the call started (seeConfigManager.snapshotRegisteredEntities(com.ultikits.ultitools.abstracts.UltiToolsPlugin)'s javadoc for why key-only retention was insufficient).private static voidPluginManager.runReloadHalf(UltiToolsPlugin plugin, String what, Runnable half) private static voidPluginManager.runUnregisterStep(UltiToolsPlugin plugin, String stepDescription, Runnable step) Runs onePluginManager.unregister(UltiToolsPlugin)best-effort registry-cleanup step in isolation: a throw fromstepis logged viaPluginManager.logPluginUnregistrationFailure(String, Throwable), not rethrown, so it can neither skip nor mask any ofunregister's other steps (Codex review on #457, across four rounds on the same method: listener cleanup surviving command-cleanup failure, the context close surviving the unload hook throwing, mandatory cleanup surviving an early registry failure, and finally every registry step surviving every other one).private voidTaskManager.scanAndSchedule(UltiToolsPlugin module, Object bean, Consumer<org.bukkit.scheduler.BukkitTask> recorder) Scan one bean forScheduledmethods and schedule each valid one, recording each task in its owning bucket as soon as it is created rather than batching them into a list returned at the end.private voidTaskManager.scheduleBound(UltiToolsPlugin module, Object bean, Class<?> targetClass, Method method, Scheduled scheduled) Schedules one config-boundScheduledmethod from its resolved binding and records its handle inTaskManager.boundTasksimmediately (#410).private voidPluginManager.setPluginStaticInstance(Class<? extends UltiToolsPlugin> pluginClass, UltiToolsPlugin plugin) Set the static instance field on a plugin class before @PostConstruct runs.private Map<String, AbstractConfigEntity> ConfigManager.snapshotRegisteredEntities(UltiToolsPlugin ultiToolsPlugin) Snapshots the complete config-file-path-to-entity mappingultiToolsPluginalready holds inConfigManager.pluginConfigMap, before a caller is about to register a batch of entities in one call.private static longTaskManager.BoundTask.ticksAtLoad(UltiToolsPlugin module, String owner, ConfigBindings.Source source) voidPluginManager.unregister(UltiToolsPlugin plugin) voidCommandManager.unregisterAll(UltiToolsPlugin plugin) Unregisters every command this framework registered forplugin, using the actual registeredCommandinstances tracked inCommandManager.commandListMap(seeCommandManager.register(UltiToolsPlugin, CommandExecutor, String, String, String...)) -- not a name-based relookup, which could mis-resolve a different module's command if two modules share a primary alias under this framework's shared fallback prefix.voidListenerManager.unregisterAll(UltiToolsPlugin plugin) Unregister all listeners in the UltiTools plugin class base package.private voidPluginManager.unregisterSupersededVersions(UltiToolsPlugin plugin) Unloads the old version this load supersedes.(package private) static voidPluginManager.validateConfigBindings(UltiToolsPlugin plugin, SimpleContainer pluginContext) Load-time check of a module's config-bound@Scheduledand@CmdCDdeclarations (#531), run right afterPluginManager.validateCommandExecutorContracts(com.ultikits.ultitools.context.SimpleContainer)and before any Bukkit side effect, so a refusal is module-granular in exactly the same way.(package private) static voidTaskManager.validateConfigBindings(UltiToolsPlugin module, Object bean) Load-time check of every config-boundScheduledmethod onbean, over exactly the methodsTaskManager.scanAndSchedule(com.ultikits.ultitools.abstracts.UltiToolsPlugin, java.lang.Object, java.util.function.Consumer<org.bukkit.scheduler.BukkitTask>)would schedule.Method parameters in com.ultikits.ultitools.manager with type arguments of type UltiToolsPluginModifier and TypeMethodDescriptionprivate voidPluginManager.assemblePluginContainer(SimpleContainer pluginContext, UltiToolsPlugin plugin, Class<? extends UltiToolsPlugin> pluginClass, ClassLoader loader) Assemble a plugin's container: type registration, component scan, the plugin's own singleton registration, config-entity beans, the static instance field,DataScopeminting plus entity ownership, AOP wiring,refresh(), and (afterrefresh())@ContextEntrybean registration withautowireBean.private UltiToolsPluginPluginManager.finishInitializingPlugin(ClassLoader classLoader, Class<? extends UltiToolsPlugin> pluginClass, UltiToolsPlugin plugin) Run the construction-independent second half afterinitializePlugincompletes construction: the compatibility gate, then container assembly.String[]PluginManager.getPluginScanPackages(Class<? extends UltiToolsPlugin> pluginClass) Get scan packages for a plugin class.private UltiToolsPluginPluginManager.initializePlugin(ClassLoader classLoader, Class<? extends UltiToolsPlugin> pluginClass) Initialize module using its default (zero-argument) constructor.booleanPluginManager.register(Class<? extends UltiToolsPlugin> pluginClass) Register plugin.List<Class<? extends UltiToolsPlugin>> PluginDependencyResolver.resolve(List<Class<? extends UltiToolsPlugin>> pluginClasses) Resolves plugin load order using Kahn's algorithm for topological sorting.PluginManager.scanPluginEntities(String pluginName, Class<? extends UltiToolsPlugin> pluginClass) Builds the entity set aDataScopeforpluginshould carry (D-19): every@Tableclass found by scanning the module's own jar, plus anything declared via@UltiToolsModule#additionalEntities()for entities that legitimately live elsewhere.private voidPluginManager.setPluginStaticInstance(Class<? extends UltiToolsPlugin> pluginClass, UltiToolsPlugin plugin) Set the static instance field on a plugin class before @PostConstruct runs.private List<Class<? extends UltiToolsPlugin>> PluginManager.sortPluginsByDependencies(List<Class<? extends UltiToolsPlugin>> plugins) Sort plugins by their dependencies using Kahn's algorithm (topological sort).Constructor parameters in com.ultikits.ultitools.manager with type arguments of type UltiToolsPluginModifierConstructorDescriptionCircularDependencyException(String message, List<Class<? extends UltiToolsPlugin>> sortedPrefix, Set<String> refusedPlugins, List<List<String>> cyclePaths) Constructs a circular-dependency refusal carrying the structured partition.MissingDependencyException(String message, List<Class<? extends UltiToolsPlugin>> sortedPrefix, Set<String> refusedPlugins) Constructs a missing-hard-dependency refusal carrying the structured partition.PluginNode(Class<? extends UltiToolsPlugin> pluginClass) -
Uses of UltiToolsPlugin in com.ultikits.ultitools.utils
Fields in com.ultikits.ultitools.utils with type parameters of type UltiToolsPluginModifier and TypeFieldDescription(package private) static final Function<UltiToolsPlugin, File> PluginInstallUtils.DEFAULT_MODULE_CODE_SOURCEHow the uninstall asks a loaded module which JAR it came from; a test passes its own.private final List<UltiToolsPlugin> PluginInstallUtils.ModuleIdentity.loadedMethods in com.ultikits.ultitools.utils with parameters of type UltiToolsPluginModifier and TypeMethodDescriptionstatic String[]DependencyUtils.getPluginPackages(UltiToolsPlugin plugin) Get plugin packages.Method parameters in com.ultikits.ultitools.utils with type arguments of type UltiToolsPluginModifier and TypeMethodDescriptionprivate static voidPluginInstallUtils.chooseTargets(String requested, List<UltiToolsPlugin> loaded, List<UltiToolsPlugin> others, Map<UltiToolsPlugin, String> declared) Moves the instances the argument names fromothersintoloaded.private static voidPluginInstallUtils.chooseTargets(String requested, List<UltiToolsPlugin> loaded, List<UltiToolsPlugin> others, Map<UltiToolsPlugin, String> declared) Moves the instances the argument names fromothersintoloaded.private static voidPluginInstallUtils.readLoadedModules(PluginManager pluginManager, Function<UltiToolsPlugin, File> codeSource, List<UltiToolsPlugin> others, Map<UltiToolsPlugin, File> jars, Map<UltiToolsPlugin, String> declared, AtomicBoolean someUnknown) Reads every loaded module once: which JAR it came from, and what that JAR declares.private static voidPluginInstallUtils.readLoadedModules(PluginManager pluginManager, Function<UltiToolsPlugin, File> codeSource, List<UltiToolsPlugin> others, Map<UltiToolsPlugin, File> jars, Map<UltiToolsPlugin, String> declared, AtomicBoolean someUnknown) Reads every loaded module once: which JAR it came from, and what that JAR declares.private static voidPluginInstallUtils.readLoadedModules(PluginManager pluginManager, Function<UltiToolsPlugin, File> codeSource, List<UltiToolsPlugin> others, Map<UltiToolsPlugin, File> jars, Map<UltiToolsPlugin, String> declared, AtomicBoolean someUnknown) Reads every loaded module once: which JAR it came from, and what that JAR declares.private static voidPluginInstallUtils.refuseIfAmbiguous(String requested, List<UltiToolsPlugin> candidates) Refuses when more than one module answers to a declared name.private static PluginInstallUtils.ModuleIdentityPluginInstallUtils.resolveIdentity(String requested, PluginManager pluginManager, Function<UltiToolsPlugin, File> codeSource) Resolves the operator's argument into the one identity every later decision reads.(package private) static PluginInstallUtils.UninstallReportPluginInstallUtils.uninstallPluginReporting(String name, Function<UltiToolsPlugin, File> codeSource) PluginInstallUtils.uninstallPluginReporting(String)with the code-source resolver to ask, which is how a test substitutes one without production code carrying a writable field (gate 1, IN-02).Constructor parameters in com.ultikits.ultitools.utils with type arguments of type UltiToolsPlugin
DataStoreimplementation that overrides this method directly must callDataStore.checkOwnership(UltiToolsPlugin, Class)as its own first statement to get the refusal; the three backends shipped by this framework all do (02-12).