From c40420a64a68d62d05ece27345331a9fac32f1e3 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 11:40:12 +0200 Subject: [PATCH 01/15] Fix Loops should not be infinite (squid:S2189) - suppress this check --- src/se/vidstige/jadb/DeviceWatcher.java | 1 + src/se/vidstige/jadb/server/SocketServer.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/se/vidstige/jadb/DeviceWatcher.java b/src/se/vidstige/jadb/DeviceWatcher.java index 3965e60..2f219a0 100644 --- a/src/se/vidstige/jadb/DeviceWatcher.java +++ b/src/se/vidstige/jadb/DeviceWatcher.java @@ -18,6 +18,7 @@ public class DeviceWatcher implements Runnable { watch(); } + @SuppressWarnings("squid:S2189") // watcher is stopped by closing transport public void watch() { try { while (true) { diff --git a/src/se/vidstige/jadb/server/SocketServer.java b/src/se/vidstige/jadb/server/SocketServer.java index 6aee6be..7adc196 100644 --- a/src/se/vidstige/jadb/server/SocketServer.java +++ b/src/se/vidstige/jadb/server/SocketServer.java @@ -29,6 +29,7 @@ public abstract class SocketServer implements Runnable { return port; } + @SuppressWarnings("squid:S2189") // server is stopped by closing SocketServer @Override public void run() { try { From 70c700a6a182df84a7843b920eb568de5615e9aa Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 11:54:56 +0200 Subject: [PATCH 02/15] Fix: Modifiers should be declared in the correct order (squid:ModifiersOrderCheck) --- src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java | 6 +++--- .../vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java b/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java index 2b1f300..7d20104 100644 --- a/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java +++ b/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java @@ -41,9 +41,9 @@ class HostConnectToRemoteTcpDevice { void validate(String response) throws ConnectionToRemoteDeviceException; } - final static class ResponseValidatorImp implements ResponseValidator { - private final static String SUCCESSFULLY_CONNECTED = "connected to"; - private final static String ALREADY_CONNECTED = "already connected to"; + static final class ResponseValidatorImp implements ResponseValidator { + private static final String SUCCESSFULLY_CONNECTED = "connected to"; + private static final String ALREADY_CONNECTED = "already connected to"; ResponseValidatorImp() { diff --git a/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java b/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java index 1c9aead..1c275aa 100644 --- a/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java +++ b/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java @@ -41,10 +41,9 @@ public class HostDisconnectFromRemoteTcpDevice { void validate(String response) throws ConnectionToRemoteDeviceException; } - final static class ResponseValidatorImp implements ResponseValidator { - private final static String SUCCESSFULLY_DISCONNECTED = "disconnected"; - private final static String ALREADY_DISCONNECTED = "error: no such device"; - + static final class ResponseValidatorImp implements ResponseValidator { + private static final String SUCCESSFULLY_DISCONNECTED = "disconnected"; + private static final String ALREADY_DISCONNECTED = "error: no such device"; ResponseValidatorImp() { } From 17b93cb935ba817e23f0dd7754f14863167b46a0 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 11:57:18 +0200 Subject: [PATCH 03/15] Suppress: Constant names should comply with a naming convention (squid:S00115) --- src/se/vidstige/jadb/JadbDevice.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/se/vidstige/jadb/JadbDevice.java b/src/se/vidstige/jadb/JadbDevice.java index db97104..fdceeb0 100644 --- a/src/se/vidstige/jadb/JadbDevice.java +++ b/src/se/vidstige/jadb/JadbDevice.java @@ -7,6 +7,7 @@ import java.util.ArrayList; import java.util.List; public class JadbDevice { + @SuppressWarnings("squid:S00115") public enum State { Unknown, Offline, From f40d46917b22aca474d046d1d67eddfb721072ff Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:00:20 +0200 Subject: [PATCH 04/15] Fix: The diamond operator ("<>") should be used (squid:S2293) --- src/se/vidstige/jadb/JadbConnection.java | 2 +- src/se/vidstige/jadb/JadbDevice.java | 2 +- src/se/vidstige/jadb/LookBackFilteringOutputStream.java | 2 +- src/se/vidstige/jadb/managers/PackageManager.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/se/vidstige/jadb/JadbConnection.java b/src/se/vidstige/jadb/JadbConnection.java index 2eee46d..1af2dd2 100644 --- a/src/se/vidstige/jadb/JadbConnection.java +++ b/src/se/vidstige/jadb/JadbConnection.java @@ -74,7 +74,7 @@ public class JadbConnection implements ITransportFactory { public List parseDevices(String body) { String[] lines = body.split("\n"); - ArrayList devices = new ArrayList(lines.length); + ArrayList devices = new ArrayList<>(lines.length); for (String line : lines) { String[] parts = line.split("\t"); if (parts.length > 1) { diff --git a/src/se/vidstige/jadb/JadbDevice.java b/src/se/vidstige/jadb/JadbDevice.java index fdceeb0..02aa2a4 100644 --- a/src/se/vidstige/jadb/JadbDevice.java +++ b/src/se/vidstige/jadb/JadbDevice.java @@ -151,7 +151,7 @@ public class JadbDevice { SyncTransport sync = transport.startSync(); sync.send("LIST", remotePath); - List result = new ArrayList(); + List result = new ArrayList<>(); for (RemoteFileRecord dent = sync.readDirectoryEntry(); dent != RemoteFileRecord.DONE; dent = sync.readDirectoryEntry()) { result.add(dent); } diff --git a/src/se/vidstige/jadb/LookBackFilteringOutputStream.java b/src/se/vidstige/jadb/LookBackFilteringOutputStream.java index 89099d1..4a47bcb 100644 --- a/src/se/vidstige/jadb/LookBackFilteringOutputStream.java +++ b/src/se/vidstige/jadb/LookBackFilteringOutputStream.java @@ -13,7 +13,7 @@ public class LookBackFilteringOutputStream extends FilterOutputStream { { super(inner); this.lookBackBufferSize = lookBackBufferSize; - this.buffer = new ArrayDeque(lookBackBufferSize); + this.buffer = new ArrayDeque<>(lookBackBufferSize); } protected void unwrite() { diff --git a/src/se/vidstige/jadb/managers/PackageManager.java b/src/se/vidstige/jadb/managers/PackageManager.java index 45aebfb..8a2970a 100644 --- a/src/se/vidstige/jadb/managers/PackageManager.java +++ b/src/se/vidstige/jadb/managers/PackageManager.java @@ -22,7 +22,7 @@ public class PackageManager { } public List getPackages() throws IOException, JadbException { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); BufferedReader input = null; try { input = new BufferedReader(new InputStreamReader(device.executeShell("pm", "list", "packages"), Charset.forName("UTF-8"))); From aa245626abcdace32205b62adce72881cf3384d0 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:03:17 +0200 Subject: [PATCH 05/15] Suppress: Method names should comply with a naming convention (squid:S00100) --- src/se/vidstige/jadb/managers/PackageManager.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/se/vidstige/jadb/managers/PackageManager.java b/src/se/vidstige/jadb/managers/PackageManager.java index 8a2970a..f6e381d 100644 --- a/src/se/vidstige/jadb/managers/PackageManager.java +++ b/src/se/vidstige/jadb/managers/PackageManager.java @@ -116,15 +116,18 @@ public class PackageManager { public static final InstallOption ALLOW_TEST_APK = new InstallOption("-t"); + @SuppressWarnings("squid:S00100") public static InstallOption WITH_INSTALLER_PACKAGE_NAME(String name) { return new InstallOption("-t", name); } + @SuppressWarnings("squid:S00100") public static InstallOption ON_SHARED_MASS_STORAGE(String name) { return new InstallOption("-s", name); } + @SuppressWarnings("squid:S00100") public static InstallOption ON_INTERNAL_SYSTEM_MEMORY(String name) { return new InstallOption("-f", name); } From 9b4be76f3e4a8d11c046b3569c69e44288dbf072 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:06:27 +0200 Subject: [PATCH 06/15] Fix: Local variable and method parameter names should comply with a naming convention (squid:S00117) --- src/se/vidstige/jadb/AdbServerLauncher.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/se/vidstige/jadb/AdbServerLauncher.java b/src/se/vidstige/jadb/AdbServerLauncher.java index 1520340..bb4b4bc 100644 --- a/src/se/vidstige/jadb/AdbServerLauncher.java +++ b/src/se/vidstige/jadb/AdbServerLauncher.java @@ -32,11 +32,11 @@ public class AdbServerLauncher { } private static String findAdbExecutable(Map environment) { - String android_home = environment.get("ANDROID_HOME"); - if (android_home == null || android_home.equals("")) { + String androidHome = environment.get("ANDROID_HOME"); + if (androidHome == null || androidHome.equals("")) { return "adb"; } - return android_home + "/platform-tools/adb"; + return androidHome + "/platform-tools/adb"; } public void launch() throws IOException, InterruptedException { From 1a34d13bbbb83111488211ecc3b9a298f6baa336 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:08:23 +0200 Subject: [PATCH 07/15] Fix: Empty statements should be removed (squid:EmptyStatementUsageCheck) --- src/se/vidstige/jadb/JadbDevice.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/se/vidstige/jadb/JadbDevice.java b/src/se/vidstige/jadb/JadbDevice.java index 02aa2a4..6c6bf6d 100644 --- a/src/se/vidstige/jadb/JadbDevice.java +++ b/src/se/vidstige/jadb/JadbDevice.java @@ -14,7 +14,7 @@ public class JadbDevice { Device, Recovery, BootLoader - }; + } private final String serial; private final ITransportFactory transportFactory; From 188aec84d6ea4f545509a1dd7d9c607e5828a5a2 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:10:44 +0200 Subject: [PATCH 08/15] Fix: Return of boolean expressions should not be wrapped into an "if-then-else" statement (squid:S1126) --- src/se/vidstige/jadb/RemoteFile.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/se/vidstige/jadb/RemoteFile.java b/src/se/vidstige/jadb/RemoteFile.java index 303efa5..a422321 100644 --- a/src/se/vidstige/jadb/RemoteFile.java +++ b/src/se/vidstige/jadb/RemoteFile.java @@ -21,10 +21,7 @@ public class RemoteFile { if (o == null || getClass() != o.getClass()) return false; RemoteFile that = (RemoteFile) o; - - if (!path.equals(that.path)) return false; - - return true; + return path.equals(that.path); } @Override From 23b4dd6b4de45c995d5e4b793416323e22c5c9cd Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:13:21 +0200 Subject: [PATCH 09/15] Fix: Nested blocks of code should not be left empty (squid:S00108) --- src/se/vidstige/jadb/server/SocketServer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/se/vidstige/jadb/server/SocketServer.java b/src/se/vidstige/jadb/server/SocketServer.java index 7adc196..ba83ef7 100644 --- a/src/se/vidstige/jadb/server/SocketServer.java +++ b/src/se/vidstige/jadb/server/SocketServer.java @@ -45,6 +45,7 @@ public abstract class SocketServer implements Runnable { clientThread.start(); } } catch (IOException e) { + // Empty on purpose } } From 9b6074ce2d0bcb1df66b0afa09eac3fd67a76759 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:15:04 +0200 Subject: [PATCH 10/15] Fix: String function use should be optimized for single characters (squid:S3027) --- src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java | 2 +- src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java b/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java index 7d20104..7774ac7 100644 --- a/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java +++ b/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java @@ -64,7 +64,7 @@ class HostConnectToRemoteTcpDevice { } private String extractError(String response) { - int lastColon = response.lastIndexOf(":"); + int lastColon = response.lastIndexOf(':'); if (lastColon != -1) { return response.substring(lastColon, response.length()); } else { diff --git a/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java b/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java index 1c275aa..d0448de 100644 --- a/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java +++ b/src/se/vidstige/jadb/HostDisconnectFromRemoteTcpDevice.java @@ -63,7 +63,7 @@ public class HostDisconnectFromRemoteTcpDevice { } private String extractError(String response) { - int lastColon = response.lastIndexOf(":"); + int lastColon = response.lastIndexOf(':'); if (lastColon != -1) { return response.substring(lastColon, response.length()); } else { From aec31abf1fe98f959164ddf363f309cc26d8ead9 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 12:23:11 +0200 Subject: [PATCH 11/15] Fix: String literals should not be duplicated (squid:S1192) --- src/se/vidstige/jadb/managers/PackageManager.java | 10 +++++----- src/se/vidstige/jadb/server/AdbProtocolHandler.java | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/se/vidstige/jadb/managers/PackageManager.java b/src/se/vidstige/jadb/managers/PackageManager.java index f6e381d..5d7ed02 100644 --- a/src/se/vidstige/jadb/managers/PackageManager.java +++ b/src/se/vidstige/jadb/managers/PackageManager.java @@ -6,7 +6,7 @@ import se.vidstige.jadb.RemoteFile; import se.vidstige.jadb.Stream; import java.io.*; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -25,7 +25,7 @@ public class PackageManager { ArrayList result = new ArrayList<>(); BufferedReader input = null; try { - input = new BufferedReader(new InputStreamReader(device.executeShell("pm", "list", "packages"), Charset.forName("UTF-8"))); + input = new BufferedReader(new InputStreamReader(device.executeShell("pm", "list", "packages"), StandardCharsets.UTF_8)); String line; while ((line = input.readLine()) != null) { final String prefix = "package:"; @@ -49,7 +49,7 @@ public class PackageManager { public void remove(RemoteFile file) throws IOException, JadbException { InputStream s = device.executeShell("rm", "-f", Bash.quote(file.getPath())); - Stream.readAll(s, Charset.forName("UTF-8")); + Stream.readAll(s, StandardCharsets.UTF_8); } private void install(File apkFile, List extraArguments) throws IOException, JadbException { @@ -60,7 +60,7 @@ public class PackageManager { arguments.addAll(extraArguments); arguments.add(remote.getPath()); InputStream s = device.executeShell("pm", arguments.toArray(new String[arguments.size()])); - String result = Stream.readAll(s, Charset.forName("UTF-8")); + String result = Stream.readAll(s, StandardCharsets.UTF_8); remove(remote); verifyOperation("install", apkFile.getName(), result); } @@ -84,7 +84,7 @@ public class PackageManager { public void uninstall(Package name) throws IOException, JadbException { InputStream s = device.executeShell("pm", "uninstall", name.toString()); - String result = Stream.readAll(s, Charset.forName("UTF-8")); + String result = Stream.readAll(s, StandardCharsets.UTF_8); verifyOperation("uninstall", name.toString(), result); } diff --git a/src/se/vidstige/jadb/server/AdbProtocolHandler.java b/src/se/vidstige/jadb/server/AdbProtocolHandler.java index becc618..fffbed4 100644 --- a/src/se/vidstige/jadb/server/AdbProtocolHandler.java +++ b/src/se/vidstige/jadb/server/AdbProtocolHandler.java @@ -7,7 +7,7 @@ import se.vidstige.jadb.SyncTransport; import java.io.*; import java.net.ProtocolException; import java.net.Socket; -import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; class AdbProtocolHandler implements Runnable { private final Socket socket; @@ -43,12 +43,12 @@ class AdbProtocolHandler implements Runnable { while (true) { byte[] buffer = new byte[4]; input.readFully(buffer); - String encodedLength = new String(buffer, Charset.forName("utf-8")); + String encodedLength = new String(buffer, StandardCharsets.UTF_8); int length = Integer.parseInt(encodedLength, 16); buffer = new byte[length]; input.readFully(buffer); - String command = new String(buffer, Charset.forName("utf-8")); + String command = new String(buffer, StandardCharsets.UTF_8); responder.onCommand(command); @@ -67,7 +67,7 @@ class AdbProtocolHandler implements Runnable { writer.writeBytes(d.getSerial() + "\t" + d.getType() + "\n"); } output.writeBytes("OKAY"); - send(output, new String(tmp.toByteArray(), Charset.forName("utf-8"))); + send(output, new String(tmp.toByteArray(), StandardCharsets.UTF_8)); } else if (command.startsWith("host:transport:")) { String serial = command.substring("host:transport:".length()); selected = findDevice(serial); @@ -133,7 +133,7 @@ class AdbProtocolHandler implements Runnable { private String readString(DataInput input, int length) throws IOException { byte[] responseBuffer = new byte[length]; input.readFully(responseBuffer); - return new String(responseBuffer, Charset.forName("utf-8")); + return new String(responseBuffer, StandardCharsets.UTF_8); } private void sync(DataOutput output, DataInput input) throws IOException, JadbException { From 42f0de589b3b07f5eb76cdf81741829a20ad8a84 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 13:12:15 +0200 Subject: [PATCH 12/15] Fix: Utility classes should not have public constructors (squid:S1118) --- src/se/vidstige/jadb/Stream.java | 4 ++++ src/se/vidstige/jadb/managers/Bash.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/se/vidstige/jadb/Stream.java b/src/se/vidstige/jadb/Stream.java index 5a1a31b..866a5fe 100644 --- a/src/se/vidstige/jadb/Stream.java +++ b/src/se/vidstige/jadb/Stream.java @@ -7,6 +7,10 @@ import java.io.OutputStream; import java.nio.charset.Charset; public class Stream { + private Stream() { + throw new IllegalStateException("Utility class"); + } + public static void copy(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024 * 10]; int len; diff --git a/src/se/vidstige/jadb/managers/Bash.java b/src/se/vidstige/jadb/managers/Bash.java index 6770a8d..34fddbb 100644 --- a/src/se/vidstige/jadb/managers/Bash.java +++ b/src/se/vidstige/jadb/managers/Bash.java @@ -1,6 +1,10 @@ package se.vidstige.jadb.managers; public class Bash { + private Bash() { + throw new IllegalStateException("Utility class"); + } + public static String quote(String s) { // Check that s contains no whitespace if (s.matches("\\S+")) { From 1eeaee1da879cede4512ceeaa1a54d8be326e724 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 13:20:23 +0200 Subject: [PATCH 13/15] Fix: "notifyAll" should be used (squid:S2446) --- src/se/vidstige/jadb/server/SocketServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/se/vidstige/jadb/server/SocketServer.java b/src/se/vidstige/jadb/server/SocketServer.java index ba83ef7..21099ad 100644 --- a/src/se/vidstige/jadb/server/SocketServer.java +++ b/src/se/vidstige/jadb/server/SocketServer.java @@ -52,7 +52,7 @@ public abstract class SocketServer implements Runnable { private void serverReady() { synchronized (lockObject) { isStarted = true; - lockObject.notify(); + lockObject.notifyAll(); } } From 9cd5f509ae44cc471cc6d582f0777b58be92ff8c Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 13:23:01 +0200 Subject: [PATCH 14/15] Fix: "Object.wait(...)" and "Condition.await(...)" should be called inside a "while" loop (squid:S2274) --- src/se/vidstige/jadb/server/SocketServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/se/vidstige/jadb/server/SocketServer.java b/src/se/vidstige/jadb/server/SocketServer.java index 21099ad..85c27ff 100644 --- a/src/se/vidstige/jadb/server/SocketServer.java +++ b/src/se/vidstige/jadb/server/SocketServer.java @@ -58,7 +58,7 @@ public abstract class SocketServer implements Runnable { private void waitForServer() throws InterruptedException { synchronized (lockObject) { - if (!isStarted) { + while (!isStarted) { lockObject.wait(); } } From b9a86b85fa470da8d58b553a133718034f8b3e73 Mon Sep 17 00:00:00 2001 From: Jano Svitok Date: Mon, 30 Jul 2018 14:00:27 +0200 Subject: [PATCH 15/15] Fix: Try-with-resources should be used (squid:S2093) --- src/se/vidstige/jadb/managers/PackageManager.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/se/vidstige/jadb/managers/PackageManager.java b/src/se/vidstige/jadb/managers/PackageManager.java index 5d7ed02..40d0fde 100644 --- a/src/se/vidstige/jadb/managers/PackageManager.java +++ b/src/se/vidstige/jadb/managers/PackageManager.java @@ -22,10 +22,8 @@ public class PackageManager { } public List getPackages() throws IOException, JadbException { - ArrayList result = new ArrayList<>(); - BufferedReader input = null; - try { - input = new BufferedReader(new InputStreamReader(device.executeShell("pm", "list", "packages"), StandardCharsets.UTF_8)); + try (BufferedReader input = new BufferedReader(new InputStreamReader(device.executeShell("pm", "list", "packages"), StandardCharsets.UTF_8))) { + ArrayList result = new ArrayList<>(); String line; while ((line = input.readLine()) != null) { final String prefix = "package:"; @@ -33,10 +31,8 @@ public class PackageManager { result.add(new Package(line.substring(prefix.length()))); } } - } finally { - if (input != null) input.close(); + return result; } - return result; } private String getErrorMessage(String operation, String target, String errorMessage) {