From 8909871554ad49e694127bccab60e9f2595dc693 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Thu, 7 Jun 2018 11:08:39 +0200 Subject: [PATCH] Inject and load RS client and applet through Guice Instead of requiring to create client from RuneLite just use Guice for it and separate applet provider. Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/RuneLite.java | 36 ++++++++----------- .../net/runelite/client/RuneLiteModule.java | 15 ++++++-- .../net/runelite/client/rs/ClientLoader.java | 2 ++ .../client/plugins/PluginManagerTest.java | 20 +++++------ 4 files changed, 40 insertions(+), 33 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 5e215be011..8415661130 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -31,10 +31,11 @@ import com.google.common.eventbus.EventBus; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.Injector; -import com.google.inject.Provider; import java.applet.Applet; import java.io.File; import java.util.Locale; +import javax.annotation.Nullable; +import javax.inject.Provider; import javax.inject.Singleton; import joptsimple.ArgumentAcceptingOptionSpec; import joptsimple.OptionParser; @@ -130,9 +131,6 @@ public class RuneLite @Inject private InfoBoxManager infoBoxManager; - @Inject - private ClientLoader clientLoader; - @Inject private OverlayManager overlayManager; @@ -145,7 +143,13 @@ public class RuneLite @Inject private WorldMapOverlay worldMapOverlay; - Client client; + @Inject + @Nullable + private Applet applet; + + @Inject + @Nullable + private Client client; public static void main(String[] args) throws Exception { @@ -209,27 +213,23 @@ public class RuneLite }); injector = Guice.createInjector(new RuneLiteModule()); - injector.getInstance(RuneLite.class).start(getOptions().valueOf(updateMode)); + injector.getInstance(ClientLoader.class).setUpdateCheckMode(getOptions().valueOf(updateMode)); + injector.getInstance(RuneLite.class).start(); } - public void start(ClientUpdateCheckMode updateMode) throws Exception + public void start() throws Exception { // Load RuneLite or Vanilla client - clientLoader.setUpdateCheckMode(updateMode); - final Applet client = clientLoader.load(); - - final boolean isOutdated = !(client instanceof Client); + final boolean isOutdated = client == null; if (!isOutdated) { - this.client = (Client) client; - // Inject members into client injector.injectMembers(client); } // Initialize UI - clientUI.init(client); + clientUI.init(applet); // Initialize Discord service discordService.init(); @@ -246,7 +246,7 @@ public class RuneLite eventBus.register(clanManager); eventBus.register(infoBoxManager); - if (this.client != null) + if (!isOutdated) { eventBus.register(itemManager.get()); } @@ -304,10 +304,4 @@ public class RuneLite { RuneLite.options = options; } - - @VisibleForTesting - public void setClient(Client client) - { - this.client = client; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 0960183ec4..0d1eb79b5a 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -29,8 +29,10 @@ import com.google.common.eventbus.SubscriberExceptionContext; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.name.Names; +import java.applet.Applet; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; +import javax.annotation.Nullable; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; @@ -44,6 +46,7 @@ import net.runelite.client.config.RuneLiteConfig; import net.runelite.client.game.ItemManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.PluginManager; +import net.runelite.client.rs.ClientLoader; import net.runelite.client.task.Scheduler; import net.runelite.client.util.DeferredEventBus; import net.runelite.client.util.QueryRunner; @@ -81,9 +84,17 @@ public class RuneLiteModule extends AbstractModule } @Provides - Client provideClient(RuneLite runeLite) + @Singleton + Applet provideApplet(ClientLoader clientLoader) { - return runeLite.client; + return clientLoader.load(); + } + + @Provides + @Singleton + Client provideClient(@Nullable Applet applet) + { + return applet instanceof Client ? (Client) applet : null; } @Provides diff --git a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java index 066a1a733f..cc63eb6e9d 100644 --- a/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java +++ b/runelite-client/src/main/java/net/runelite/client/rs/ClientLoader.java @@ -30,11 +30,13 @@ import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import javax.inject.Inject; +import javax.inject.Singleton; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.http.api.updatecheck.UpdateCheckClient; @Slf4j +@Singleton public class ClientLoader { private final UpdateCheckClient updateCheckClient = new UpdateCheckClient(); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index efd2ce9f24..0742113eb5 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -31,7 +31,9 @@ import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.grapher.graphviz.GraphvizGrapher; import com.google.inject.grapher.graphviz.GraphvizModule; +import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.applet.Applet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; @@ -63,11 +65,15 @@ public class PluginManagerTest @Rule public TemporaryFolder folder = new TemporaryFolder(); - private RuneLite runelite; - private Set pluginClasses; + @Mock + @Bind + public Applet applet; @Mock - Client client; + @Bind + public Client client; + + private Set pluginClasses; @Before public void before() throws IOException @@ -78,8 +84,6 @@ public class PluginManagerTest BoundFieldModule.of(this)); RuneLite.setInjector(injector); - runelite = injector.getInstance(RuneLite.class); - // Find plugins we expect to have pluginClasses = new HashSet<>(); Set classes = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive(PLUGIN_PACKAGE); @@ -105,12 +109,10 @@ public class PluginManagerTest long expected = pluginClasses.stream() .map(cl -> (PluginDescriptor) cl.getAnnotation(PluginDescriptor.class)) .filter(Objects::nonNull) - .filter(pd -> pd.loadWhenOutdated()) + .filter(PluginDescriptor::loadWhenOutdated) .count(); assertEquals(expected, plugins.size()); - runelite.setClient(client); - pluginManager = new PluginManager(); pluginManager.loadCorePlugins(); plugins = pluginManager.getPlugins(); @@ -130,8 +132,6 @@ public class PluginManagerTest modules.add(new GraphvizModule()); modules.add(new RuneLiteModule()); - runelite.setClient(client); - PluginManager pluginManager = new PluginManager(); pluginManager.loadCorePlugins(); for (Plugin p : pluginManager.getPlugins())