From 0689696fe2639ea2f2de5fcfa1b6a42bf3d3ac8e Mon Sep 17 00:00:00 2001 From: shedaniel Date: Thu, 3 Jun 2021 15:12:06 +0800 Subject: Throw better errors while constructing entrypoints --- .../shedaniel/rei/fabric/PluginDetectorImpl.java | 48 ++++++++++++++-------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'fabric/src/main/java/me') diff --git a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java index d5e2d2ddd..4e452bf16 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java @@ -36,6 +36,7 @@ import java.util.function.Consumer; public class PluginDetectorImpl { private static

> void loadPlugin(Class pluginClass, Consumer> consumer) { + RuntimeException exception = null; for (EntrypointContainer container : Iterables.concat( FabricLoader.getInstance().getEntrypointContainers("rei_containers", REIPluginProvider.class), FabricLoader.getInstance().getEntrypointContainers("rei_server", REIPluginProvider.class), @@ -44,26 +45,37 @@ public class PluginDetectorImpl { FabricLoader.getInstance().getEntrypointContainers("rei_plugins", REIPluginProvider.class), FabricLoader.getInstance().getEntrypointContainers("rei_plugins_v0", REIPluginProvider.class) )) { - REIPluginProvider

plugin = container.getEntrypoint(); - if (pluginClass.isAssignableFrom(plugin.getPluginProviderClass())) { - consumer.accept(new REIPluginProvider

() { - @Override - public Collection

provide() { - return plugin.provide(); - } - - @Override - public Class

getPluginProviderClass() { - return plugin.getPluginProviderClass(); - } - - @Override - public String getPluginProviderName() { - return plugin.getPluginProviderName() + " [" + container.getProvider().getMetadata().getId() + "]"; - } - }); + try { + REIPluginProvider

plugin = container.getEntrypoint(); + if (pluginClass.isAssignableFrom(plugin.getPluginProviderClass())) { + consumer.accept(new REIPluginProvider<>() { + @Override + public Collection

provide() { + return plugin.provide(); + } + + @Override + public Class

getPluginProviderClass() { + return plugin.getPluginProviderClass(); + } + + @Override + public String getPluginProviderName() { + return plugin.getPluginProviderName() + " [" + container.getProvider().getMetadata().getId() + "]"; + } + }); + } + } catch (Throwable t) { + if (exception == null) { + exception = new RuntimeException("Could not create REI Plugin [" + pluginClass.getName() + "] due to errors, provided by '" + container.getProvider().getMetadata().getId() + "'!", t); + } else { + exception.addSuppressed(t); + } } } + if (exception != null) { + throw exception; + } } public static void detectServerPlugins() { -- cgit