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 { 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/HostConnectToRemoteTcpDevice.java b/src/se/vidstige/jadb/HostConnectToRemoteTcpDevice.java index 2b1f300..7774ac7 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() { @@ -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 1c9aead..d0448de 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() { } @@ -64,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 { 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 db97104..6c6bf6d 100644 --- a/src/se/vidstige/jadb/JadbDevice.java +++ b/src/se/vidstige/jadb/JadbDevice.java @@ -7,13 +7,14 @@ import java.util.ArrayList; import java.util.List; public class JadbDevice { + @SuppressWarnings("squid:S00115") public enum State { Unknown, Offline, Device, Recovery, BootLoader - }; + } private final String serial; private final ITransportFactory transportFactory; @@ -150,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/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 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+")) { diff --git a/src/se/vidstige/jadb/managers/PackageManager.java b/src/se/vidstige/jadb/managers/PackageManager.java index 45aebfb..40d0fde 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; @@ -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"), Charset.forName("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) { @@ -49,7 +45,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 +56,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 +80,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); } @@ -116,15 +112,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); } 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 { diff --git a/src/se/vidstige/jadb/server/SocketServer.java b/src/se/vidstige/jadb/server/SocketServer.java index 6aee6be..85c27ff 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 { @@ -44,19 +45,20 @@ public abstract class SocketServer implements Runnable { clientThread.start(); } } catch (IOException e) { + // Empty on purpose } } private void serverReady() { synchronized (lockObject) { isStarted = true; - lockObject.notify(); + lockObject.notifyAll(); } } private void waitForServer() throws InterruptedException { synchronized (lockObject) { - if (!isStarted) { + while (!isStarted) { lockObject.wait(); } }