From 5d420ae57b13e163c5563edeab28f4f1c92dab37 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 4 Jul 2021 15:14:05 -0400 Subject: [PATCH] Close various resource inputstreams --- .../net/runelite/api/overlay/OverlayIndex.java | 5 ++--- .../java/net/runelite/client/Notifier.java | 15 ++++++--------- .../externalplugins/ExternalPluginClient.java | 8 ++++---- .../client/game/ItemVariationMapping.java | 18 +++++++++++++----- .../client/plugins/gpu/template/Template.java | 14 +++++++++++--- .../client/plugins/skybox/SkyboxPlugin.java | 6 +++++- .../net/runelite/client/rs/ClientLoader.java | 6 +++--- .../net/runelite/client/ui/FontManager.java | 17 ++++++++++------- .../net/runelite/client/util/ImageUtil.java | 5 +++-- .../net/runelite/client/util/ReflectUtil.java | 7 ++++--- .../client/plugins/skybox/SkyboxTest.java | 10 ++++++++-- .../worldmap/TeleportLocationDataTest.java | 9 +++++++-- 12 files changed, 76 insertions(+), 44 deletions(-) diff --git a/runelite-api/src/main/java/net/runelite/api/overlay/OverlayIndex.java b/runelite-api/src/main/java/net/runelite/api/overlay/OverlayIndex.java index 6aec875181..9af2b6cc35 100644 --- a/runelite-api/src/main/java/net/runelite/api/overlay/OverlayIndex.java +++ b/runelite-api/src/main/java/net/runelite/api/overlay/OverlayIndex.java @@ -38,9 +38,8 @@ public class OverlayIndex static { - InputStream indexStream = OverlayIndex.class.getResourceAsStream("/runelite/index"); - - try (DataInputStream in = new DataInputStream(indexStream)) + try (InputStream indexStream = OverlayIndex.class.getResourceAsStream("/runelite/index"); + DataInputStream in = new DataInputStream(indexStream)) { int id; while ((id = in.readInt()) != -1) diff --git a/runelite-client/src/main/java/net/runelite/client/Notifier.java b/runelite-client/src/main/java/net/runelite/client/Notifier.java index 53963e4b1b..f225064734 100644 --- a/runelite-client/src/main/java/net/runelite/client/Notifier.java +++ b/runelite-client/src/main/java/net/runelite/client/Notifier.java @@ -479,14 +479,11 @@ public class Notifier { if (NOTIFICATION_FILE.exists()) { - try + try (InputStream fileStream = new BufferedInputStream(new FileInputStream(NOTIFICATION_FILE)); + AudioInputStream sound = AudioSystem.getAudioInputStream(fileStream)) { - InputStream fileStream = new BufferedInputStream(new FileInputStream(NOTIFICATION_FILE)); - try (AudioInputStream sound = AudioSystem.getAudioInputStream(fileStream)) - { - clip.open(sound); - return true; - } + clip.open(sound); + return true; } catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) { @@ -495,8 +492,8 @@ public class Notifier } // Otherwise load from the classpath - InputStream fileStream = new BufferedInputStream(Notifier.class.getResourceAsStream("notification.wav")); - try (AudioInputStream sound = AudioSystem.getAudioInputStream(fileStream)) + try (InputStream fileStream = new BufferedInputStream(Notifier.class.getResourceAsStream("notification.wav")); + AudioInputStream sound = AudioSystem.getAudioInputStream(fileStream)) { clip.open(sound); return true; diff --git a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java index ccf4b9fad3..d101cc22bb 100644 --- a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java +++ b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginClient.java @@ -30,6 +30,7 @@ import com.google.gson.JsonSyntaxException; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; @@ -134,13 +135,12 @@ public class ExternalPluginClient private static Certificate loadCertificate() { - try + try (InputStream in = ExternalPluginClient.class.getResourceAsStream("externalplugins.crt")) { CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); - Certificate certificate = certFactory.generateCertificate(ExternalPluginClient.class.getResourceAsStream("externalplugins.crt")); - return certificate; + return certFactory.generateCertificate(in); } - catch (CertificateException e) + catch (CertificateException | IOException e) { throw new RuntimeException(e); } diff --git a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java index 5daec1aee9..2161bedba2 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ItemVariationMapping.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; @@ -49,12 +50,19 @@ public class ItemVariationMapping static { final Gson gson = new Gson(); - final TypeToken>> typeToken = new TypeToken>>() - { - }; + // CHECKSTYLE:OFF + final TypeToken>> typeToken = new TypeToken>>(){}; + // CHECKSTYLE:ON - final InputStream geLimitData = ItemVariationMapping.class.getResourceAsStream("/item_variations.json"); - final Map> itemVariations = gson.fromJson(new InputStreamReader(geLimitData, StandardCharsets.UTF_8), typeToken.getType()); + final Map> itemVariations; + try (InputStream geLimitData = ItemVariationMapping.class.getResourceAsStream("/item_variations.json")) + { + itemVariations = gson.fromJson(new InputStreamReader(geLimitData, StandardCharsets.UTF_8), typeToken.getType()); + } + catch (IOException e) + { + throw new RuntimeException(e); + } ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); ImmutableMultimap.Builder invertedBuilder = new ImmutableMultimap.Builder<>(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/template/Template.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/template/Template.java index 67ed68ca7f..22972a5e77 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/template/Template.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/template/Template.java @@ -32,7 +32,9 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import java.util.function.Function; +import lombok.extern.slf4j.Slf4j; +@Slf4j public class Template { private final List> resourceLoaders = new ArrayList<>(); @@ -80,10 +82,16 @@ public class Template { return add(f -> { - InputStream is = clazz.getResourceAsStream(f); - if (is != null) + try (InputStream is = clazz.getResourceAsStream(f)) { - return inputStreamToString(is); + if (is != null) + { + return inputStreamToString(is); + } + } + catch (IOException ex) + { + log.warn(null, ex); } return null; }); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java index 468e23a201..ecb90c6dab 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java @@ -28,6 +28,7 @@ import com.google.inject.Inject; import com.google.inject.Provides; import java.awt.Color; import java.io.IOException; +import java.io.InputStream; import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.GameState; @@ -59,7 +60,10 @@ public class SkyboxPlugin extends Plugin @Override public void startUp() throws IOException { - skybox = new Skybox(SkyboxPlugin.class.getResourceAsStream("skybox.txt"), "skybox.txt"); + try (InputStream in = SkyboxPlugin.class.getResourceAsStream("skybox.txt")) + { + skybox = new Skybox(in, "skybox.txt"); + } } @Override 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 bc7a98faef..713f93a10f 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 @@ -559,13 +559,13 @@ public class ClientLoader implements Supplier private static Certificate[] getJagexCertificateChain() { - try + try (InputStream in = ClientLoader.class.getResourceAsStream("jagex.crt")) { CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); - Collection certificates = certificateFactory.generateCertificates(ClientLoader.class.getResourceAsStream("jagex.crt")); + Collection certificates = certificateFactory.generateCertificates(in); return certificates.toArray(new Certificate[0]); } - catch (CertificateException e) + catch (CertificateException | IOException e) { throw new RuntimeException("Unable to parse pinned certificates", e); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java index 5305506a41..0921ab6975 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/FontManager.java @@ -28,6 +28,7 @@ import java.awt.Font; import java.awt.FontFormatException; import java.awt.GraphicsEnvironment; import java.io.IOException; +import java.io.InputStream; import javax.swing.text.StyleContext; import lombok.Getter; @@ -48,10 +49,12 @@ public class FontManager { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); - try + try (InputStream inRunescape = FontManager.class.getResourceAsStream("runescape.ttf"); + InputStream inRunescapeSmall = FontManager.class.getResourceAsStream("runescape_small.ttf"); + InputStream inRunescapeBold = FontManager.class.getResourceAsStream("runescape_bold.ttf")) { - Font font = Font.createFont(Font.TRUETYPE_FONT, - FontManager.class.getResourceAsStream("runescape.ttf")) + // runescape + Font font = Font.createFont(Font.TRUETYPE_FONT, inRunescape) .deriveFont(Font.PLAIN, 16); ge.registerFont(font); @@ -59,8 +62,8 @@ public class FontManager .getFont(font.getName(), Font.PLAIN, 16); ge.registerFont(runescapeFont); - Font smallFont = Font.createFont(Font.TRUETYPE_FONT, - FontManager.class.getResourceAsStream("runescape_small.ttf")) + // small + Font smallFont = Font.createFont(Font.TRUETYPE_FONT, inRunescapeSmall) .deriveFont(Font.PLAIN, 16); ge.registerFont(smallFont); @@ -68,8 +71,8 @@ public class FontManager .getFont(smallFont.getName(), Font.PLAIN, 16); ge.registerFont(runescapeSmallFont); - Font boldFont = Font.createFont(Font.TRUETYPE_FONT, - FontManager.class.getResourceAsStream("runescape_bold.ttf")) + // bold + Font boldFont = Font.createFont(Font.TRUETYPE_FONT, inRunescapeBold) .deriveFont(Font.BOLD, 16); ge.registerFont(boldFont); diff --git a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java index ac25611df1..c1bdd2f5cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ImageUtil.java @@ -35,6 +35,7 @@ import java.awt.image.DirectColorModel; import java.awt.image.PixelGrabber; import java.awt.image.RescaleOp; import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -382,11 +383,11 @@ public class ImageUtil */ public static BufferedImage loadImageResource(final Class c, final String path) { - try + try (InputStream in = c.getResourceAsStream(path)) { synchronized (ImageIO.class) { - return ImageIO.read(c.getResourceAsStream(path)); + return ImageIO.read(in); } } catch (IllegalArgumentException e) diff --git a/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java b/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java index fbcc28d28d..78bd1262bb 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java +++ b/runelite-client/src/main/java/net/runelite/client/util/ReflectUtil.java @@ -27,6 +27,7 @@ package net.runelite.client.util; import com.google.common.io.ByteStreams; import java.io.IOException; +import java.io.InputStream; import java.lang.invoke.MethodHandles; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -104,10 +105,10 @@ public class ReflectUtil */ public static void installLookupHelper(PrivateLookupableClassLoader cl) { - try + String name = PrivateLookupHelper.class.getName(); + try (InputStream in = ReflectUtil.class.getResourceAsStream("/" + name.replace('.', '/') + ".class")) { - String name = PrivateLookupHelper.class.getName(); - byte[] classData = ByteStreams.toByteArray(ReflectUtil.class.getResourceAsStream("/" + name.replace('.', '/') + ".class")); + byte[] classData = ByteStreams.toByteArray(in); Class clazz = cl.defineClass0(name, classData, 0, classData.length); // force to run diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/skybox/SkyboxTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/skybox/SkyboxTest.java index 6787759ead..579ba38fb4 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/skybox/SkyboxTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/skybox/SkyboxTest.java @@ -29,6 +29,7 @@ import com.google.common.io.CharSource; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.io.InputStream; import javax.imageio.ImageIO; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; @@ -50,8 +51,13 @@ public class SkyboxTest @Test public void testLoadActual() throws IOException { - long start = System.nanoTime(); - Skybox skybox = new Skybox(SkyboxPlugin.class.getResourceAsStream("skybox.txt"), "skybox.txt"); + long start; + Skybox skybox; + try (InputStream in = SkyboxPlugin.class.getResourceAsStream("skybox.txt")) + { + start = System.nanoTime(); + skybox = new Skybox(in, "skybox.txt"); + } log.info("Parse took {}ms", (System.nanoTime() - start) / 1_000_000); String skyboxFile = System.getProperty("skyboxExport"); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/TeleportLocationDataTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/TeleportLocationDataTest.java index 2c52d0ae4f..ae984d9088 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/TeleportLocationDataTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/worldmap/TeleportLocationDataTest.java @@ -25,19 +25,24 @@ */ package net.runelite.client.plugins.worldmap; +import java.io.IOException; +import java.io.InputStream; import static org.junit.Assert.assertNotNull; import org.junit.Test; public class TeleportLocationDataTest { @Test - public void testResources() + public void testResources() throws IOException { for (TeleportLocationData data : TeleportLocationData.values()) { String path = data.getIconPath(); assertNotNull(path); - assertNotNull(path, getClass().getResourceAsStream(path)); + try (InputStream in = getClass().getResourceAsStream(path)) + { + assertNotNull(in); + } } } } \ No newline at end of file