diff --git a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java index 414b40846..966b1f82e 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/network/AndroidNetworkManager.java @@ -13,8 +13,7 @@ import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.network.NetworkManager; import org.briarproject.bramble.api.network.NetworkStatus; import org.briarproject.bramble.api.network.event.NetworkStatusEvent; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.system.Scheduler; import java.util.concurrent.Future; @@ -34,13 +33,13 @@ import static android.net.ConnectivityManager.CONNECTIVITY_ACTION; import static android.net.ConnectivityManager.TYPE_WIFI; import static android.os.Build.VERSION.SDK_INT; import static android.os.PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED; +import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.logging.Level.INFO; import static java.util.logging.Logger.getLogger; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class AndroidNetworkManager implements NetworkManager, Service { private static final Logger LOG = @@ -57,6 +56,7 @@ class AndroidNetworkManager implements NetworkManager, Service { new AtomicReference<>(); private final AtomicBoolean used = new AtomicBoolean(false); + @Nullable private volatile BroadcastReceiver networkStateReceiver = null; @Inject @@ -90,9 +90,8 @@ class AndroidNetworkManager implements NetworkManager, Service { @Override public NetworkStatus getNetworkStatus() { - ConnectivityManager cm = (ConnectivityManager) - appContext.getSystemService(CONNECTIVITY_SERVICE); - if (cm == null) throw new AssertionError(); + ConnectivityManager cm = (ConnectivityManager) requireNonNull( + appContext.getSystemService(CONNECTIVITY_SERVICE)); NetworkInfo net = cm.getActiveNetworkInfo(); boolean connected = net != null && net.isConnected(); boolean wifi = connected && net.getType() == TYPE_WIFI; diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java index 50d412976..e13e0a906 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tcp/AndroidLanTcpPlugin.java @@ -32,6 +32,7 @@ import static android.net.ConnectivityManager.TYPE_WIFI; import static android.os.Build.VERSION.SDK_INT; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; +import static java.util.Objects.requireNonNull; import static java.util.logging.Logger.getLogger; @NotNullByDefault @@ -67,10 +68,8 @@ class AndroidLanTcpPlugin extends LanTcpPlugin implements EventListener { // Don't execute more than one connection status check at a time connectionStatusExecutor = new PoliteExecutor("AndroidLanTcpPlugin", ioExecutor, 1); - ConnectivityManager connectivityManager = (ConnectivityManager) - appContext.getSystemService(CONNECTIVITY_SERVICE); - if (connectivityManager == null) throw new AssertionError(); - this.connectivityManager = connectivityManager; + connectivityManager = (ConnectivityManager) requireNonNull( + appContext.getSystemService(CONNECTIVITY_SERVICE)); wifiManager = (WifiManager) appContext.getApplicationContext() .getSystemService(WIFI_SERVICE); socketFactory = SocketFactory.getDefault(); diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java index 12093ae89..e887fd3f7 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/AndroidTorPlugin.java @@ -8,8 +8,7 @@ import android.os.PowerManager; import org.briarproject.bramble.api.battery.BatteryManager; import org.briarproject.bramble.api.network.NetworkManager; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.plugin.Backoff; import org.briarproject.bramble.api.plugin.duplex.DuplexPluginCallback; import org.briarproject.bramble.api.system.Clock; @@ -26,10 +25,10 @@ import javax.net.SocketFactory; import static android.content.Context.MODE_PRIVATE; import static android.content.Context.POWER_SERVICE; import static android.os.PowerManager.PARTIAL_WAKE_LOCK; +import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.MINUTES; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class AndroidTorPlugin extends TorPlugin { // This tag may prevent Huawei's power manager from killing us @@ -52,8 +51,7 @@ class AndroidTorPlugin extends TorPlugin { appContext.getDir("tor", MODE_PRIVATE)); this.appContext = appContext; PowerManager pm = (PowerManager) - appContext.getSystemService(POWER_SERVICE); - if (pm == null) throw new AssertionError(); + requireNonNull(appContext.getSystemService(POWER_SERVICE)); wakeLock = new RenewableWakeLock(pm, scheduler, PARTIAL_WAKE_LOCK, WAKE_LOCK_TAG, 1, MINUTES); } diff --git a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidLocationUtils.java b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidLocationUtils.java index 49609aca5..5d1fb11e5 100644 --- a/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidLocationUtils.java +++ b/bramble-android/src/main/java/org/briarproject/bramble/system/AndroidLocationUtils.java @@ -60,14 +60,14 @@ class AndroidLocationUtils implements LocationUtils { } private String getCountryFromPhoneNetwork() { - Object o = appContext.getSystemService(TELEPHONY_SERVICE); - TelephonyManager tm = (TelephonyManager) o; - return tm.getNetworkCountryIso(); + TelephonyManager tm = (TelephonyManager) + appContext.getSystemService(TELEPHONY_SERVICE); + return tm == null ? "" : tm.getNetworkCountryIso(); } private String getCountryFromSimCard() { - Object o = appContext.getSystemService(TELEPHONY_SERVICE); - TelephonyManager tm = (TelephonyManager) o; - return tm.getSimCountryIso(); + TelephonyManager tm = (TelephonyManager) + appContext.getSystemService(TELEPHONY_SERVICE); + return tm == null ? "" : tm.getSimCountryIso(); } } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java index c17c19bca..3f95195a2 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfDictionary.java @@ -4,7 +4,6 @@ import org.briarproject.bramble.api.Bytes; import org.briarproject.bramble.api.FormatException; import java.util.Map; -import java.util.Map.Entry; import java.util.TreeMap; import javax.annotation.Nullable; @@ -24,9 +23,9 @@ public class BdfDictionary extends TreeMap { * ); * */ - public static BdfDictionary of(Entry... entries) { + public static BdfDictionary of(BdfEntry... entries) { BdfDictionary d = new BdfDictionary(); - for (Entry e : entries) d.put(e.getKey(), e.getValue()); + for (BdfEntry e : entries) d.put(e.getKey(), e.getValue()); return d; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfList.java b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfList.java index ab61f974a..7332c2631 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfList.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/data/BdfList.java @@ -33,6 +33,7 @@ public class BdfList extends ArrayList { super(items); } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean isInRange(int index) { return index >= 0 && index < size(); } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TransportId.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TransportId.java index 5a488d366..aeee768e5 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TransportId.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TransportId.java @@ -11,7 +11,7 @@ public class TransportId { /** * The maximum length of a transport identifier in UTF-8 bytes. */ - public static int MAX_TRANSPORT_ID_LENGTH = 100; + public static final int MAX_TRANSPORT_ID_LENGTH = 100; private final String id; diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientId.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientId.java index c5c355232..bcab21f01 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientId.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/ClientId.java @@ -17,7 +17,7 @@ public class ClientId implements Comparable { /** * The maximum length of a client identifier in UTF-8 bytes. */ - public static int MAX_CLIENT_ID_LENGTH = 100; + public static final int MAX_CLIENT_ID_LENGTH = 100; private final String id; diff --git a/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java index 345bb667a..fc5c5b336 100644 --- a/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java +++ b/bramble-api/src/test/java/org/briarproject/bramble/api/data/BdfDictionaryTest.java @@ -68,7 +68,7 @@ public class BdfDictionaryTest extends BrambleTestCase { } @Test - public void testKeySetIteratorIsOrderedByKeys() throws Exception { + public void testKeySetIteratorIsOrderedByKeys() { BdfDictionary d = new BdfDictionary(); d.put("a", 1); d.put("d", 4); @@ -87,7 +87,7 @@ public class BdfDictionaryTest extends BrambleTestCase { } @Test - public void testValuesIteratorIsOrderedByKeys() throws Exception { + public void testValuesIteratorIsOrderedByKeys() { BdfDictionary d = new BdfDictionary(); d.put("a", 1); d.put("d", 4); @@ -106,7 +106,7 @@ public class BdfDictionaryTest extends BrambleTestCase { } @Test - public void testEntrySetIteratorIsOrderedByKeys() throws Exception { + public void testEntrySetIteratorIsOrderedByKeys() { BdfDictionary d = new BdfDictionary(); d.put("a", 1); d.put("d", 4); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java index 06f93e84a..a13c99036 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java @@ -6,8 +6,7 @@ import org.briarproject.bramble.api.crypto.SecretKey; import org.briarproject.bramble.api.db.DatabaseConfig; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.identity.LocalAuthor; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.io.BufferedReader; import java.io.File; @@ -27,8 +26,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.StringUtils.fromHexString; import static org.briarproject.bramble.util.StringUtils.toHexString; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class AccountManagerImpl implements AccountManager { private static final Logger LOG = @@ -104,7 +102,7 @@ class AccountManagerImpl implements AccountManager { } // Locking: stateChangeLock - protected boolean storeEncryptedDatabaseKey(String hex) { + boolean storeEncryptedDatabaseKey(String hex) { LOG.info("Storing database key in file"); // Create the directory if necessary if (databaseConfig.getDatabaseKeyDirectory().mkdirs()) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java index 5eacad2c4..24746a6d2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactExchangeTaskImpl.java @@ -191,6 +191,7 @@ class ContactExchangeTaskImpl extends Thread implements ContactExchangeTask { streamWriter.sendEndOfStream(); // Skip any remaining records from the incoming stream try { + //noinspection InfiniteLoopStatement while (true) recordReader.readRecord(); } catch (EOFException expected) { LOG.info("End of stream"); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java index 6c715a953..d026a586b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/AsciiArmour.java @@ -15,7 +15,7 @@ class AsciiArmour { int length = wrapped.length(); for (int i = 0; i < length; i += lineLength) { int end = Math.min(i + lineLength, length); - s.append(wrapped.substring(i, end)); + s.append(wrapped, i, end); s.append("\r\n"); } return s.toString(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java index 30535ea11..e4a8962a3 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/crypto/MessageEncrypter.java @@ -159,6 +159,7 @@ public class MessageEncrypter { printUsage(); System.exit(1); } + //noinspection IfCanBeSwitch if (args[0].equals("generate")) { if (args.length != 3) { printUsage(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java index 6bb428578..3ace87bc5 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Database.java @@ -242,7 +242,7 @@ interface Database { * bytes. This is based on the minimum of the space available on the device * where the database is stored and the database's configured size. */ - long getFreeSpace() throws DbException; + long getFreeSpace(); /** * Returns the group with the given ID. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 39de2d95c..77bbc1831 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -339,6 +339,7 @@ abstract class JdbcDatabase implements Database { this.clock = clock; } + @SuppressWarnings("unused") protected void open(String driverClass, boolean reopen, SecretKey key, @Nullable MigrationListener listener) throws DbException { // Load the JDBC driver @@ -768,7 +769,7 @@ abstract class JdbcDatabase implements Database { for (Entry e : visibility.entrySet()) { ContactId c = e.getKey(); boolean offered = removeOfferedMessage(txn, c, m.getId()); - boolean seen = offered || (sender != null && c.equals(sender)); + boolean seen = offered || c.equals(sender); addStatus(txn, m.getId(), c, m.getGroupId(), m.getTimestamp(), raw.length, state, e.getValue(), messageShared, false, seen); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/Migration40_41.java b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration40_41.java index 709be524d..8c7f9bcf6 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/Migration40_41.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/Migration40_41.java @@ -17,7 +17,7 @@ class Migration40_41 implements Migration { private final DatabaseTypes dbTypes; - public Migration40_41(DatabaseTypes databaseTypes) { + Migration40_41(DatabaseTypes databaseTypes) { this.dbTypes = databaseTypes; } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java index 5cae0d746..124a3a459 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/keyagreement/AbortException.java @@ -2,7 +2,7 @@ package org.briarproject.bramble.keyagreement; class AbortException extends Exception { - boolean receivedAbort; + final boolean receivedAbort; AbortException() { this(false); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java index 548d7c398..5061aae8b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/bluetooth/BluetoothConnectionLimiter.java @@ -20,6 +20,7 @@ interface BluetoothConnectionLimiter { * Returns true if a contact connection can be opened. This method does not * need to be called for key agreement connections. */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean canOpenContactConnection(); /** diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java index 8ea05b6cc..0143a416f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java @@ -80,6 +80,7 @@ class LanTcpPlugin extends TcpPlugin { locals.add(new InetSocketAddress(local, 0)); } } + //noinspection Java8ListSort sort(locals, ADDRESS_COMPARATOR); return locals; } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java index 7073db8ec..f9290d3e7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/TcpPlugin.java @@ -85,6 +85,7 @@ abstract class TcpPlugin implements DuplexPlugin { /** * Returns true if connections to the given address can be attempted. */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") protected abstract boolean isConnectable(InetSocketAddress remote); TcpPlugin(Executor ioExecutor, Backoff backoff, diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java index 91b9dbff0..20c84840b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Frame.java @@ -13,7 +13,7 @@ abstract class Frame { static final byte ACK_FLAG = (byte) 128, FIN_FLAG = 64; - protected final byte[] buf; + final byte[] buf; Frame(byte[] buf) { this.buf = buf; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java index 9e0b37b50..2b25fc87e 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Receiver.java @@ -101,6 +101,7 @@ class Receiver implements ReadHandler { } } + @SuppressWarnings("StatementWithEmptyBody") private void handleData(byte[] b) throws IOException { windowLock.lock(); try { @@ -124,6 +125,7 @@ class Receiver implements ReadHandler { finalSequenceNumber = sequenceNumber; // Remove any data frames with higher sequence numbers Iterator it = dataFrames.iterator(); + //noinspection Java8CollectionRemoveIf while (it.hasNext()) { Data d1 = it.next(); if (d1.getSequenceNumber() >= finalSequenceNumber) @@ -148,6 +150,7 @@ class Receiver implements ReadHandler { private static class SequenceNumberComparator implements Comparator { + @SuppressWarnings("UseCompareMethod") @Override public int compare(Data d1, Data d2) { long s1 = d1.getSequenceNumber(), s2 = d2.getSequenceNumber(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java index 88510b2f2..1309b745f 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/ReceiverInputStream.java @@ -52,6 +52,7 @@ class ReceiverInputStream extends InputStream { return len; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean receive() throws IOException { if (length != 0) throw new AssertionError(); if (data != null && data.isLastFrame()) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java index 982055eea..92d8c3cd9 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reliability/Sender.java @@ -16,6 +16,7 @@ import java.util.concurrent.locks.ReentrantLock; import javax.annotation.concurrent.ThreadSafe; import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; @ThreadSafe @NotNullByDefault @@ -96,7 +97,7 @@ class Sender { } // If any older data frames are outstanding, retransmit the oldest if (foundIndex > 0) { - fastRetransmit = outstanding.poll(); + fastRetransmit = requireNonNull(outstanding.poll()); fastRetransmit.lastTransmitted = now; fastRetransmit.retransmitted = true; outstanding.add(fastRetransmit); @@ -191,7 +192,7 @@ class Sender { writeHandler.handleWrite(d.getBuffer()); } - void flush() throws IOException, InterruptedException { + void flush() throws InterruptedException { windowLock.lock(); try { while (dataWaiting || !outstanding.isEmpty()) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java index e056d6112..a342de707 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReportServer.java @@ -44,6 +44,7 @@ public class DevReportServer { TokenBucket bucket = new TokenBucket(); bucket.start(); try { + //noinspection InfiniteLoopStatement while (true) { Socket s = ss.accept(); System.out.println("Incoming connection"); @@ -103,6 +104,7 @@ public class DevReportServer { @Override public void run() { try { + //noinspection InfiniteLoopStatement while (true) { // If the bucket isn't full, add a token if (semaphore.availablePermits() < MAX_TOKENS) { @@ -134,6 +136,8 @@ public class DevReportServer { try { socket.setSoTimeout(SOCKET_TIMEOUT_MS); in = getInputStream(socket); + // Directory may already exist + //noinspection ResultOfMethodCallIgnored reportDir.mkdirs(); reportFile = createTempFile(FILE_PREFIX, FILE_SUFFIX, reportDir); @@ -153,7 +157,8 @@ public class DevReportServer { System.out.println("Saved " + length + " bytes"); } catch (IOException e) { e.printStackTrace(); - if (reportFile != null) reportFile.delete(); + if (reportFile != null && !reportFile.delete()) + System.err.println("Failed to delete report"); } finally { tryToClose(in); tryToClose(out); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java index 3f8975cd1..815d844f0 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/reporting/DevReporterImpl.java @@ -111,17 +111,15 @@ class DevReporterImpl implements DevReporter, EventListener { LOG.info("Sending reports to developers"); for (File f : reports) { OutputStream out = null; - InputStream in = null; try { Socket s = connectToDevelopers(); out = getOutputStream(s); - in = new FileInputStream(f); + InputStream in = new FileInputStream(f); copyAndClose(in, out); - f.delete(); + if (!f.delete()) LOG.warning("Failed to delete report"); } catch (IOException e) { LOG.log(WARNING, "Failed to send reports", e); tryToClose(out, LOG, WARNING); - tryToClose(in, LOG, WARNING); return; } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java index 18837ac7b..01df3ff27 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocket.java @@ -28,6 +28,7 @@ class SocksSocket extends Socket { "Address type not supported" }; + @SuppressWarnings("MismatchedReadAndWriteOfArray") private static final byte[] UNSPECIFIED_ADDRESS = new byte[4]; private final SocketAddress proxy; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java index fb0b1cd91..c204acf45 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/socks/SocksSocketFactory.java @@ -45,7 +45,7 @@ class SocksSocketFactory extends SocketFactory { @Override public Socket createSocket(InetAddress address, int port, - InetAddress localAddress, int localPort) throws IOException { + InetAddress localAddress, int localPort) { throw new UnsupportedOperationException(); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomProvider.java b/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomProvider.java index a992b955c..5672ef0c4 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomProvider.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomProvider.java @@ -14,6 +14,7 @@ import javax.annotation.concurrent.Immutable; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.util.IoUtils.tryToClose; import static org.briarproject.bramble.util.LogUtils.logException; @Immutable @@ -43,15 +44,16 @@ class UnixSecureRandomProvider extends AbstractSecureRandomProvider { } protected void writeSeed() { + DataOutputStream out = null; try { - DataOutputStream out = new DataOutputStream( - new FileOutputStream(outputDevice)); + out = new DataOutputStream(new FileOutputStream(outputDevice)); writeToEntropyPool(out); out.flush(); - out.close(); } catch (IOException e) { // On some devices /dev/urandom isn't writable - this isn't fatal logException(LOG, WARNING, e); + } finally { + tryToClose(out, LOG, WARNING); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomSpi.java b/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomSpi.java index 066598d9c..97a66b1af 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomSpi.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/system/UnixSecureRandomSpi.java @@ -11,6 +11,7 @@ import java.util.logging.Logger; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; +import static org.briarproject.bramble.util.IoUtils.tryToClose; import static org.briarproject.bramble.util.LogUtils.logException; public class UnixSecureRandomSpi extends SecureRandomSpi { @@ -34,15 +35,16 @@ public class UnixSecureRandomSpi extends SecureRandomSpi { @Override protected void engineSetSeed(byte[] seed) { + DataOutputStream out = null; try { - DataOutputStream out = new DataOutputStream( - new FileOutputStream(outputDevice)); + out = new DataOutputStream(new FileOutputStream(outputDevice)); out.write(seed); out.flush(); - out.close(); } catch (IOException e) { // On some devices /dev/urandom isn't writable - this isn't fatal logException(LOG, WARNING, e); + } finally { + tryToClose(out, LOG, WARNING); } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java index b4e639047..dee02c7a5 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/EllipticCurveMultiplicationTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertEquals; public class EllipticCurveMultiplicationTest extends BrambleTestCase { @Test - public void testMultiplierProducesSameResultsAsDefault() throws Exception { + public void testMultiplierProducesSameResultsAsDefault() { // Instantiate the default implementation of the curve X9ECParameters defaultX9Parameters = TeleTrusTNamedCurves.getByName("brainpoolp256r1"); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java index f0505f4f1..b92faaa67 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyAgreementTest.java @@ -64,7 +64,7 @@ public class KeyAgreementTest extends BrambleTestCase { } @Test - public void testRfc7748TestVector() throws Exception { + public void testRfc7748TestVector() { // Private keys need to be clamped because curve25519-java does the // clamping at key generation time, not multiplication time byte[] aPriv = Curve25519KeyParser.clamp(fromHexString(ALICE_PRIVATE)); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java index 7c14ca505..7b25a9d34 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/KeyEncodingAndParsingTest.java @@ -23,7 +23,7 @@ public class KeyEncodingAndParsingTest extends BrambleTestCase { new CryptoComponentImpl(new TestSecureRandomProvider(), null); @Test - public void testAgreementPublicKeyLength() throws Exception { + public void testAgreementPublicKeyLength() { // Generate 10 agreement key pairs for (int i = 0; i < 10; i++) { KeyPair keyPair = crypto.generateAgreementKeyPair(); @@ -70,7 +70,7 @@ public class KeyEncodingAndParsingTest extends BrambleTestCase { } @Test - public void testAgreementKeyParserByFuzzing() throws Exception { + public void testAgreementKeyParserByFuzzing() { KeyParser parser = crypto.getAgreementKeyParser(); // Generate a key pair to get the proper public key length KeyPair p = crypto.generateAgreementKeyPair(); @@ -92,7 +92,7 @@ public class KeyEncodingAndParsingTest extends BrambleTestCase { } @Test - public void testSignaturePublicKeyLength() throws Exception { + public void testSignaturePublicKeyLength() { // Generate 10 signature key pairs for (int i = 0; i < 10; i++) { KeyPair keyPair = crypto.generateSignatureKeyPair(); @@ -159,7 +159,7 @@ public class KeyEncodingAndParsingTest extends BrambleTestCase { } @Test - public void testSignatureKeyParserByFuzzing() throws Exception { + public void testSignatureKeyParserByFuzzing() { KeyParser parser = crypto.getSignatureKeyParser(); // Generate a key pair to get the proper public key length KeyPair p = crypto.generateSignatureKeyPair(); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/ScryptKdfTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/ScryptKdfTest.java index 082c371d3..416e7aba4 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/ScryptKdfTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/ScryptKdfTest.java @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; public class ScryptKdfTest extends BrambleTestCase { @Test - public void testPasswordAffectsKey() throws Exception { + public void testPasswordAffectsKey() { PasswordBasedKdf kdf = new ScryptKdf(new SystemClock()); byte[] salt = getRandomBytes(32); Set keys = new HashSet<>(); @@ -31,7 +31,7 @@ public class ScryptKdfTest extends BrambleTestCase { } @Test - public void testSaltAffectsKey() throws Exception { + public void testSaltAffectsKey() { PasswordBasedKdf kdf = new ScryptKdf(new SystemClock()); String password = getRandomString(16); Set keys = new HashSet<>(); @@ -43,7 +43,7 @@ public class ScryptKdfTest extends BrambleTestCase { } @Test - public void testCostParameterAffectsKey() throws Exception { + public void testCostParameterAffectsKey() { PasswordBasedKdf kdf = new ScryptKdf(new SystemClock()); String password = getRandomString(16); byte[] salt = getRandomBytes(32); @@ -55,7 +55,7 @@ public class ScryptKdfTest extends BrambleTestCase { } @Test - public void testCalibration() throws Exception { + public void testCalibration() { Clock clock = new ArrayClock( 0, 50, // Duration for cost 256 0, 100, // Duration for cost 512 @@ -68,7 +68,7 @@ public class ScryptKdfTest extends BrambleTestCase { } @Test - public void testCalibrationChoosesMinCost() throws Exception { + public void testCalibrationChoosesMinCost() { Clock clock = new ArrayClock( 0, 2000 // Duration for cost 256 is already too high ); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/TagEncodingTest.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TagEncodingTest.java index b6cce5ae2..9d4b97674 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/TagEncodingTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TagEncodingTest.java @@ -25,7 +25,7 @@ public class TagEncodingTest extends BrambleMockTestCase { private final long streamNumber = 1234567890; @Test - public void testKeyAffectsTag() throws Exception { + public void testKeyAffectsTag() { Set set = new HashSet<>(); for (int i = 0; i < 100; i++) { byte[] tag = new byte[TAG_LENGTH]; @@ -37,7 +37,7 @@ public class TagEncodingTest extends BrambleMockTestCase { } @Test - public void testProtocolVersionAffectsTag() throws Exception { + public void testProtocolVersionAffectsTag() { Set set = new HashSet<>(); for (int i = 0; i < 100; i++) { byte[] tag = new byte[TAG_LENGTH]; @@ -48,7 +48,7 @@ public class TagEncodingTest extends BrambleMockTestCase { } @Test - public void testStreamNumberAffectsTag() throws Exception { + public void testStreamNumberAffectsTag() { Set set = new HashSet<>(); for (int i = 0; i < 100; i++) { byte[] tag = new byte[TAG_LENGTH]; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java index 85b83d87e..00cbcdc16 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/crypto/TestAuthenticatedCipher.java @@ -14,8 +14,7 @@ class TestAuthenticatedCipher implements AuthenticatedCipher { private boolean encrypt = false; @Override - public void init(boolean encrypt, SecretKey key, byte[] iv) - throws GeneralSecurityException { + public void init(boolean encrypt, SecretKey key, byte[] iv) { this.encrypt = encrypt; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java index 6f1ce7049..292dec913 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/data/BdfReaderImplTest.java @@ -557,10 +557,10 @@ public class BdfReaderImplTest extends BrambleTestCase { @Test public void testNestedListWithinDepthLimit() throws Exception { // A list containing a list containing a list containing a list... - String lists = ""; - for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) lists += "60"; - for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) lists += "80"; - setContents(lists); + StringBuilder lists = new StringBuilder(); + for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) lists.append("60"); + for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) lists.append("80"); + setContents(lists.toString()); r.readList(); assertTrue(r.eof()); } @@ -568,23 +568,23 @@ public class BdfReaderImplTest extends BrambleTestCase { @Test(expected = FormatException.class) public void testNestedListOutsideDepthLimit() throws Exception { // A list containing a list containing a list containing a list... - String lists = ""; - for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) lists += "60"; - for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) lists += "80"; - setContents(lists); + StringBuilder lists = new StringBuilder(); + for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) lists.append("60"); + for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) lists.append("80"); + setContents(lists.toString()); r.readList(); } @Test public void testNestedDictionaryWithinDepthLimit() throws Exception { // A dictionary containing a dictionary containing a dictionary... - String dicts = ""; + StringBuilder dicts = new StringBuilder(); for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) - dicts += "70" + "41" + "03" + "666F6F"; - dicts += "11"; + dicts.append("70" + "41" + "03" + "666F6F"); + dicts.append("11"); for (int i = 1; i <= DEFAULT_NESTED_LIMIT; i++) - dicts += "80"; - setContents(dicts); + dicts.append("80"); + setContents(dicts.toString()); r.readDictionary(); assertTrue(r.eof()); } @@ -592,13 +592,13 @@ public class BdfReaderImplTest extends BrambleTestCase { @Test(expected = FormatException.class) public void testNestedDictionaryOutsideDepthLimit() throws Exception { // A dictionary containing a dictionary containing a dictionary... - String dicts = ""; + StringBuilder dicts = new StringBuilder(); for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) - dicts += "70" + "41" + "03" + "666F6F"; - dicts += "11"; + dicts.append("70" + "41" + "03" + "666F6F"); + dicts.append("11"); for (int i = 1; i <= DEFAULT_NESTED_LIMIT + 1; i++) - dicts += "80"; - setContents(dicts); + dicts.append("80"); + setContents(dicts.toString()); r.readDictionary(); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/BasicDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicDatabaseTest.java index 3d3ad6c1a..52a7f7139 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/BasicDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicDatabaseTest.java @@ -28,6 +28,7 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +@SuppressWarnings("TryFinallyCanBeTryWithResources") public abstract class BasicDatabaseTest extends BrambleTestCase { private static final int BATCH_SIZE = 100; @@ -47,7 +48,7 @@ public abstract class BasicDatabaseTest extends BrambleTestCase { @Before public void setUp() throws Exception { - testDir.mkdirs(); + assertTrue(testDir.mkdirs()); Class.forName(getDriverName()); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java index 497ddb0ff..daaaf701a 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/BasicH2Test.java @@ -40,8 +40,7 @@ public class BasicH2Test extends BasicDatabaseTest { } @Override - protected void shutdownDatabase(File db, boolean encrypt) - throws SQLException { + protected void shutdownDatabase(File db, boolean encrypt) { // The DB is closed automatically when the connection is closed } } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseMigrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseMigrationTest.java index 5a086c175..7e92c9a4b 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseMigrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseMigrationTest.java @@ -53,7 +53,7 @@ public abstract class DatabaseMigrationTest extends BrambleMockTestCase { protected final Clock clock = new SystemClock(); abstract Database createDatabase( - List> migrations) throws Exception; + List> migrations); @Before public void setUp() { diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceComparisonTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceComparisonTest.java index 86be2afdb..63a0aa116 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceComparisonTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabasePerformanceComparisonTest.java @@ -29,7 +29,8 @@ public abstract class DatabasePerformanceComparisonTest * How many blocks of each condition to compare. */ private static final int COMPARISON_BLOCKS = 10; - private SecretKey databaseKey = getSecretKey(); + + private final SecretKey databaseKey = getSecretKey(); abstract Database createDatabase(boolean conditionA, DatabaseConfig databaseConfig, MessageFactory messageFactory, diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseTraceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseTraceTest.java index 57e369751..57b473f16 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseTraceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/DatabaseTraceTest.java @@ -20,10 +20,11 @@ import javax.annotation.Nullable; import static org.briarproject.bramble.test.TestUtils.deleteTestDirectory; import static org.briarproject.bramble.test.TestUtils.getSecretKey; import static org.briarproject.bramble.util.IoUtils.copyAndClose; +import static org.junit.Assert.assertTrue; public abstract class DatabaseTraceTest extends DatabasePerformanceTest { - private SecretKey databaseKey = getSecretKey(); + private final SecretKey databaseKey = getSecretKey(); abstract Database createDatabase(DatabaseConfig databaseConfig, MessageFactory messageFactory, Clock clock); @@ -39,7 +40,8 @@ public abstract class DatabaseTraceTest extends DatabasePerformanceTest { populateDatabase(db); db.close(); File traceFile = getTraceFile(); - if (traceFile != null) traceFile.delete(); + if (traceFile != null && traceFile.exists()) + assertTrue(traceFile.delete()); db = openDatabase(); task.run(db); db.close(); diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java index b87f3992a..4f09c22f3 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2DatabaseTraceTest.java @@ -1,6 +1,7 @@ package org.briarproject.bramble.db; import org.briarproject.bramble.api.db.DatabaseConfig; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.MessageFactory; import org.briarproject.bramble.api.system.Clock; import org.junit.Ignore; @@ -8,9 +9,8 @@ import org.junit.Ignore; import java.io.File; import java.sql.Connection; -import javax.annotation.Nonnull; - @Ignore +@NotNullByDefault public class H2DatabaseTraceTest extends DatabaseTraceTest { @Override @@ -18,7 +18,6 @@ public class H2DatabaseTraceTest extends DatabaseTraceTest { MessageFactory messageFactory, Clock clock) { return new H2Database(databaseConfig, messageFactory, clock) { @Override - @Nonnull String getUrl() { return super.getUrl() + ";TRACE_LEVEL_FILE=3"; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/H2TransactionIsolationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/H2TransactionIsolationTest.java index a068d176f..2aff152c8 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/H2TransactionIsolationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/H2TransactionIsolationTest.java @@ -20,6 +20,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +@SuppressWarnings("TryFinallyCanBeTryWithResources") public class H2TransactionIsolationTest extends BrambleTestCase { private static final String DROP_TABLE = "DROP TABLE foo IF EXISTS"; @@ -47,7 +48,7 @@ public class H2TransactionIsolationTest extends BrambleTestCase { } @After - public void tearDown() throws Exception { + public void tearDown() { deleteTestDirectory(testDir); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java index a07f98a3d..638dd9342 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/JdbcDatabaseTest.java @@ -92,7 +92,6 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase { // All our transports use a maximum latency of 30 seconds private static final int MAX_LATENCY = 30 * 1000; - private final SecretKey key = getSecretKey(); private final File testDir = getTestDirectory(); private final GroupId groupId; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/db/SingleDatabasePerformanceTest.java b/bramble-core/src/test/java/org/briarproject/bramble/db/SingleDatabasePerformanceTest.java index 1984e0123..8a8a8f6cb 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/db/SingleDatabasePerformanceTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/db/SingleDatabasePerformanceTest.java @@ -25,7 +25,7 @@ public abstract class SingleDatabasePerformanceTest abstract Database createDatabase(DatabaseConfig databaseConfig, MessageFactory messageFactory, Clock clock); - private SecretKey databaseKey = getSecretKey(); + private final SecretKey databaseKey = getSecretKey(); @Override protected void benchmark(String name, diff --git a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java index e070db6a9..7a57ec34d 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/keyagreement/KeyAgreementProtocolTest.java @@ -29,7 +29,7 @@ import static org.junit.Assert.assertThat; public class KeyAgreementProtocolTest extends BrambleTestCase { @Rule - public JUnitRuleMockery context = new JUnitRuleMockery() {{ + public final JUnitRuleMockery context = new JUnitRuleMockery() {{ // So we can mock concrete classes like KeyAgreementTransport setImposteriser(ClassImposteriser.INSTANCE); }}; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java index 88bcada57..da54e5f4c 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/plugin/tcp/LanTcpPluginTest.java @@ -327,6 +327,7 @@ public class LanTcpPluginTest extends BrambleTestCase { assertEquals(0, comparator.compare(linkLocal, linkLocal)); } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean systemHasLocalIpv4Address() throws Exception { for (NetworkInterface i : list(getNetworkInterfaces())) { for (InetAddress a : list(i.getInetAddresses())) { diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java index ccd1207ff..ff4450588 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java @@ -165,7 +165,7 @@ public class SyncRecordReaderImplTest extends BrambleMockTestCase { return new Record(PROTOCOL_VERSION, ACK, createPayload()); } - private Record createEmptyAck() throws Exception { + private Record createEmptyAck() { return new Record(PROTOCOL_VERSION, ACK, new byte[0]); } @@ -173,7 +173,7 @@ public class SyncRecordReaderImplTest extends BrambleMockTestCase { return new Record(PROTOCOL_VERSION, OFFER, createPayload()); } - private Record createEmptyOffer() throws Exception { + private Record createEmptyOffer() { return new Record(PROTOCOL_VERSION, OFFER, new byte[0]); } @@ -181,7 +181,7 @@ public class SyncRecordReaderImplTest extends BrambleMockTestCase { return new Record(PROTOCOL_VERSION, REQUEST, createPayload()); } - private Record createEmptyRequest() throws Exception { + private Record createEmptyRequest() { return new Record(PROTOCOL_VERSION, REQUEST, new byte[0]); } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/RunAction.java b/bramble-core/src/test/java/org/briarproject/bramble/test/RunAction.java index 0ec8d7ac8..79fb71220 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/RunAction.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/RunAction.java @@ -7,7 +7,7 @@ import org.jmock.api.Invocation; public class RunAction implements Action { @Override - public Object invoke(Invocation invocation) throws Throwable { + public Object invoke(Invocation invocation) { Runnable task = (Runnable) invocation.getParameter(0); task.run(); return null; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionAction.java b/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionAction.java index 7ee016201..42ea7f277 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionAction.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/RunTransactionAction.java @@ -10,7 +10,6 @@ public class RunTransactionAction implements Action { private final Transaction txn; - @SuppressWarnings("WeakerAccess") public RunTransactionAction(Transaction txn) { this.txn = txn; } diff --git a/bramble-core/src/test/java/org/briarproject/bramble/test/UTest.java b/bramble-core/src/test/java/org/briarproject/bramble/test/UTest.java index bdf079fd3..f892a55d5 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/test/UTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/test/UTest.java @@ -1,5 +1,7 @@ package org.briarproject.bramble.test; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; @@ -7,13 +9,12 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -import javax.annotation.Nonnull; - import static java.util.Collections.sort; import static org.briarproject.bramble.test.UTest.Result.INCONCLUSIVE; import static org.briarproject.bramble.test.UTest.Result.LARGER; import static org.briarproject.bramble.test.UTest.Result.SMALLER; +@NotNullByDefault public class UTest { public enum Result { @@ -158,8 +159,7 @@ public class UTest { private static List readFile(String filename) { List values = new ArrayList<>(); try { - BufferedReader in; - in = new BufferedReader(new FileReader(filename)); + BufferedReader in = new BufferedReader(new FileReader(filename)); String s; while ((s = in.readLine()) != null) values.add(new Double(s)); in.close(); @@ -185,8 +185,9 @@ public class UTest { this.a = a; } + @SuppressWarnings("UseCompareMethod") @Override - public int compareTo(@Nonnull Value v) { + public int compareTo(Value v) { if (value < v.value) return -1; if (value > v.value) return 1; return 0; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java index e8c997178..447579221 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/util/ByteUtilsTest.java @@ -33,11 +33,13 @@ public class ByteUtilsTest extends BrambleTestCase { @Test(expected = IllegalArgumentException.class) public void testReadUint16ValidatesArguments1() { + //noinspection ResultOfMethodCallIgnored readUint16(new byte[1], 0); } @Test(expected = IllegalArgumentException.class) public void testReadUint16ValidatesArguments2() { + //noinspection ResultOfMethodCallIgnored readUint16(new byte[2], 1); } @@ -55,11 +57,13 @@ public class ByteUtilsTest extends BrambleTestCase { @Test(expected = IllegalArgumentException.class) public void testReadUint32ValidatesArguments1() { + //noinspection ResultOfMethodCallIgnored readUint32(new byte[3], 0); } @Test(expected = IllegalArgumentException.class) public void testReadUint32ValidatesArguments2() { + //noinspection ResultOfMethodCallIgnored readUint32(new byte[4], 1); } @@ -79,11 +83,13 @@ public class ByteUtilsTest extends BrambleTestCase { @Test(expected = IllegalArgumentException.class) public void testReadUint64ValidatesArguments1() { + //noinspection ResultOfMethodCallIgnored readUint64(new byte[7], 0); } @Test(expected = IllegalArgumentException.class) public void testReadUint64ValidatesArguments2() { + //noinspection ResultOfMethodCallIgnored readUint64(new byte[8], 1); } diff --git a/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java b/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java index e0599b34f..ec8a0bb3b 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/lifecycle/WindowsShutdownManagerImpl.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; +import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; import static com.sun.jna.Library.OPTION_FUNCTION_MAPPER; @@ -163,11 +164,13 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl { } } + @SuppressWarnings("UnusedReturnValue") private interface User32 extends StdCallLibrary { HWND CreateWindowEx(int styleEx, String className, String windowName, - int style, int x, int y, int width, int height, HWND parent, - HMENU menu, HINSTANCE instance, Pointer param); + int style, int x, int y, int width, int height, + @Nullable HWND parent, @Nullable HMENU menu, + @Nullable HINSTANCE instance, @Nullable Pointer param); LRESULT DefWindowProc(HWND hwnd, int msg, WPARAM wp, LPARAM lp); @@ -175,7 +178,8 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl { LRESULT SetWindowLongPtr(HWND hwnd, int index, WindowProc newProc); - int GetMessage(MSG msg, HWND hwnd, int filterMin, int filterMax); + int GetMessage(MSG msg, @Nullable HWND hwnd, int filterMin, + int filterMax); boolean TranslateMessage(MSG msg); @@ -184,6 +188,7 @@ class WindowsShutdownManagerImpl extends ShutdownManagerImpl { private interface WindowProc extends StdCallCallback { + @SuppressWarnings("UnusedReturnValue") LRESULT callback(HWND hwnd, int msg, WPARAM wp, LPARAM lp); } } diff --git a/bramble-java/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java b/bramble-java/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java index a078a620b..cf24a33ef 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/network/JavaNetworkManager.java @@ -2,8 +2,7 @@ package org.briarproject.bramble.network; import org.briarproject.bramble.api.network.NetworkManager; import org.briarproject.bramble.api.network.NetworkStatus; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.net.NetworkInterface; import java.net.SocketException; @@ -19,8 +18,7 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class JavaNetworkManager implements NetworkManager { private static final Logger LOG = diff --git a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java index cd0d9b8cf..49f39e58d 100644 --- a/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java +++ b/bramble-java/src/main/java/org/briarproject/bramble/plugin/modem/ModemImpl.java @@ -22,6 +22,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.logging.Logger; import javax.annotation.Nullable; +import javax.annotation.concurrent.GuardedBy; import jssc.SerialPortEvent; import jssc.SerialPortEventListener; @@ -63,9 +64,12 @@ class ModemImpl implements Modem, WriteHandler, SerialPortEventListener { private final Condition connectedStateChanged = lock.newCondition(); private final Condition initialisedStateChanged = lock.newCondition(); - // The following are locking: lock + @GuardedBy("lock") private ReliabilityLayer reliability = null; - private boolean initialised = false, connected = false; + @GuardedBy("lock") + private boolean initialised = false; + @GuardedBy("lock") + private boolean connected = false; private int lineLen = 0; diff --git a/briar-android/src/main/java/im/delight/android/identicons/Identicon.java b/briar-android/src/main/java/im/delight/android/identicons/Identicon.java index 42f5c9591..46cd2ff3c 100644 --- a/briar-android/src/main/java/im/delight/android/identicons/Identicon.java +++ b/briar-android/src/main/java/im/delight/android/identicons/Identicon.java @@ -19,12 +19,14 @@ package im.delight.android.identicons; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.support.annotation.NonNull; import android.support.annotation.UiThread; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + import static android.graphics.Paint.Style.FILL; @UiThread +@NotNullByDefault class Identicon { private static final int ROWS = 9, COLUMNS = 9; @@ -36,7 +38,7 @@ class Identicon { private int cellWidth, cellHeight; - Identicon(@NonNull byte[] input) { + Identicon(byte[] input) { if (input.length == 0) throw new IllegalArgumentException(); this.input = input; diff --git a/briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java b/briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java index 75663bd29..34203827d 100644 --- a/briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java +++ b/briar-android/src/main/java/im/delight/android/identicons/IdenticonDrawable.java @@ -20,19 +20,22 @@ import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.UiThread; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + import static android.graphics.PixelFormat.OPAQUE; @UiThread +@NotNullByDefault public class IdenticonDrawable extends Drawable { private static final int HEIGHT = 200, WIDTH = 200; private final Identicon identicon; - public IdenticonDrawable(@NonNull byte[] input) { + public IdenticonDrawable(byte[] input) { super(); identicon = new Identicon(input); } @@ -48,7 +51,7 @@ public class IdenticonDrawable extends Drawable { } @Override - public void setBounds(@NonNull Rect bounds) { + public void setBounds(Rect bounds) { super.setBounds(bounds); identicon.updateSize(bounds.right - bounds.left, bounds.bottom - bounds.top); @@ -61,7 +64,7 @@ public class IdenticonDrawable extends Drawable { } @Override - public void draw(@NonNull Canvas canvas) { + public void draw(Canvas canvas) { identicon.draw(canvas); } @@ -71,7 +74,7 @@ public class IdenticonDrawable extends Drawable { } @Override - public void setColorFilter(ColorFilter cf) { + public void setColorFilter(@Nullable ColorFilter cf) { } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java index 04193583d..9643a030f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java @@ -9,6 +9,7 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.net.Uri; +import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.annotation.UiThread; import android.support.v4.app.NotificationCompat; @@ -21,8 +22,7 @@ import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.lifecycle.Service; import org.briarproject.bramble.api.lifecycle.ServiceException; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent; @@ -82,8 +82,7 @@ import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_ import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; @ThreadSafe -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class AndroidNotificationManagerImpl implements AndroidNotificationManager, Service, EventListener { @@ -103,12 +102,12 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, private final Multiset blogCounts = new Multiset<>(); private int introductionTotal = 0; private int nextRequestId = 0; + @Nullable private ContactId blockedContact = null; + @Nullable private GroupId blockedGroup = null; private boolean blockSignInReminder = false; - private boolean blockContacts = false, blockGroups = false; - private boolean blockForums = false, blockBlogs = false; - private boolean blockIntroductions = false; + private boolean blockBlogs = false; private long lastSound = 0; private volatile Settings settings = new Settings(); @@ -283,7 +282,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, private void showContactNotification(ContactId c) { androidExecutor.runOnUiThread(() -> { - if (blockContacts) return; if (c.equals(blockedContact)) return; contactCounts.add(c); updateContactNotification(true); @@ -385,7 +383,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, @UiThread private void showGroupMessageNotification(GroupId g) { androidExecutor.runOnUiThread(() -> { - if (blockGroups) return; if (g.equals(blockedGroup)) return; groupCounts.add(g); updateGroupMessageNotification(true); @@ -456,7 +453,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, @UiThread private void showForumPostNotification(GroupId g) { androidExecutor.runOnUiThread(() -> { - if (blockForums) return; if (g.equals(blockedGroup)) return; forumCounts.add(g); updateForumPostNotification(true); @@ -580,7 +576,6 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager, private void showIntroductionNotification() { androidExecutor.runOnUiThread(() -> { - if (blockIntroductions) return; introductionTotal++; updateIntroductionNotification(); }); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index 5d43222d4..083dcabd5 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -44,6 +44,7 @@ import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION; import static android.os.Build.VERSION.SDK_INT; import static android.support.v4.app.NotificationCompat.VISIBILITY_SECRET; +import static java.util.Objects.requireNonNull; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; @@ -57,11 +58,11 @@ import static org.briarproject.briar.api.android.LockManager.ACTION_LOCK; public class BriarService extends Service { - public static String EXTRA_START_RESULT = + public static final String EXTRA_START_RESULT = "org.briarproject.briar.START_RESULT"; - public static String EXTRA_NOTIFICATION_ID = + public static final String EXTRA_NOTIFICATION_ID = "org.briarproject.briar.FAILURE_NOTIFICATION_ID"; - public static String EXTRA_STARTUP_FAILED = + public static final String EXTRA_STARTUP_FAILED = "org.briarproject.briar.STARTUP_FAILED"; private static final Logger LOG = getLogger(BriarService.class.getName()); @@ -110,7 +111,7 @@ public class BriarService extends Service { // Create notification channels if (SDK_INT >= 26) { NotificationManager nm = (NotificationManager) - getSystemService(NOTIFICATION_SERVICE); + requireNonNull(getSystemService(NOTIFICATION_SERVICE)); NotificationChannel ongoingChannel = new NotificationChannel( ONGOING_CHANNEL_ID, getString(R.string.ongoing_notification_title), @@ -178,8 +179,8 @@ public class BriarService extends Service { i.putExtra(EXTRA_NOTIFICATION_ID, FAILURE_NOTIFICATION_ID); b.setContentIntent(PendingIntent.getActivity(BriarService.this, 0, i, FLAG_UPDATE_CURRENT)); - Object o = getSystemService(NOTIFICATION_SERVICE); - NotificationManager nm = (NotificationManager) o; + NotificationManager nm = (NotificationManager) + requireNonNull(getSystemService(NOTIFICATION_SERVICE)); nm.notify(FAILURE_NOTIFICATION_ID, b.build()); // Bring the dashboard to the front to clear the back stack i = new Intent(BriarService.this, NavDrawerActivity.class); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/DozeWatchdogImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/DozeWatchdogImpl.java index e6cf8e227..92bf48d81 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/DozeWatchdogImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/DozeWatchdogImpl.java @@ -7,7 +7,6 @@ import android.content.IntentFilter; import android.os.PowerManager; import org.briarproject.bramble.api.lifecycle.Service; -import org.briarproject.bramble.api.lifecycle.ServiceException; import org.briarproject.briar.api.android.DozeWatchdog; import java.util.concurrent.atomic.AtomicBoolean; @@ -15,6 +14,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import static android.content.Context.POWER_SERVICE; import static android.os.Build.VERSION.SDK_INT; import static android.os.PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED; +import static java.util.Objects.requireNonNull; class DozeWatchdogImpl implements DozeWatchdog, Service { @@ -32,14 +32,14 @@ class DozeWatchdogImpl implements DozeWatchdog, Service { } @Override - public void startService() throws ServiceException { + public void startService() { if (SDK_INT < 23) return; IntentFilter filter = new IntentFilter(ACTION_DEVICE_IDLE_MODE_CHANGED); appContext.registerReceiver(receiver, filter); } @Override - public void stopService() throws ServiceException { + public void stopService() { if (SDK_INT < 23) return; appContext.unregisterReceiver(receiver); } @@ -49,8 +49,8 @@ class DozeWatchdogImpl implements DozeWatchdog, Service { @Override public void onReceive(Context context, Intent intent) { if (SDK_INT < 23) return; - PowerManager pm = - (PowerManager) appContext.getSystemService(POWER_SERVICE); + PowerManager pm = (PowerManager) + requireNonNull(appContext.getSystemService(POWER_SERVICE)); if (pm.isDeviceIdleMode()) dozed.set(true); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/NotificationCleanupService.java b/briar-android/src/main/java/org/briarproject/briar/android/NotificationCleanupService.java index 56d216111..a72948b17 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/NotificationCleanupService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/NotificationCleanupService.java @@ -38,6 +38,7 @@ public class NotificationCleanupService extends IntentService { protected void onHandleIntent(@Nullable Intent i) { if (i == null || i.getData() == null) return; String uri = i.getData().toString(); + //noinspection IfCanBeSwitch if (uri.equals(CONTACT_URI)) { notificationManager.clearAllContactNotifications(); } else if (uri.equals(GROUP_URI)) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/RecentEmojiImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/RecentEmojiImpl.java index cff0e2cf1..a92403a65 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/RecentEmojiImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/RecentEmojiImpl.java @@ -8,8 +8,7 @@ import com.vanniktech.emoji.emoji.Emoji; import org.briarproject.bramble.api.db.DatabaseExecutor; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.sync.Client; @@ -29,8 +28,7 @@ import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.bramble.util.StringUtils.join; import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class RecentEmojiImpl implements RecentEmoji, Client { private static final Logger LOG = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java index dd3746623..128c48839 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/StartupFailureActivity.java @@ -44,8 +44,8 @@ public class StartupFailureActivity extends BaseActivity implements // cancel notification if (notificationId > -1) { - Object o = getSystemService(NOTIFICATION_SERVICE); - NotificationManager nm = (NotificationManager) requireNonNull(o); + NotificationManager nm = (NotificationManager) + requireNonNull(getSystemService(NOTIFICATION_SERVICE)); nm.cancel(notificationId); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java index 9a6ea2a90..32841f971 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/account/LockManagerImpl.java @@ -14,8 +14,7 @@ import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.event.Event; import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.lifecycle.Service; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.settings.Settings; import org.briarproject.bramble.api.settings.SettingsManager; import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent; @@ -34,6 +33,7 @@ import static android.app.AlarmManager.ELAPSED_REALTIME; import static android.app.PendingIntent.getService; import static android.content.Context.ALARM_SERVICE; import static android.os.SystemClock.elapsedRealtime; +import static java.util.Objects.requireNonNull; import static java.util.concurrent.TimeUnit.MINUTES; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; @@ -44,8 +44,7 @@ import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_ import static org.briarproject.briar.android.util.UiUtils.hasScreenLock; @ThreadSafe -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault public class LockManagerImpl implements LockManager, Service, EventListener { private static final Logger LOG = @@ -79,19 +78,19 @@ public class LockManagerImpl implements LockManager, Service, EventListener { this.settingsManager = settingsManager; this.notificationManager = notificationManager; this.dbExecutor = dbExecutor; - this.alarmManager = - (AlarmManager) appContext.getSystemService(ALARM_SERVICE); + alarmManager = (AlarmManager) + requireNonNull(appContext.getSystemService(ALARM_SERVICE)); Intent i = new Intent(ACTION_LOCK, null, appContext, BriarService.class); - this.lockIntent = getService(appContext, 0, i, 0); - this.timeoutNever = Integer.valueOf( + lockIntent = getService(appContext, 0, i, 0); + timeoutNever = Integer.valueOf( appContext.getString(R.string.pref_lock_timeout_value_never)); - this.timeoutDefault = Integer.valueOf( + timeoutDefault = Integer.valueOf( appContext.getString(R.string.pref_lock_timeout_value_default)); - this.timeoutMinutes = timeoutNever; + timeoutMinutes = timeoutNever; // setting this in the constructor makes #getValue() @NonNull - this.lockable.setValue(false); + lockable.setValue(false); } @Override @@ -145,7 +144,7 @@ public class LockManagerImpl implements LockManager, Service, EventListener { @UiThread @Override public void checkIfLockable() { - boolean oldValue = lockable.getValue(); + boolean oldValue = requireNonNull(lockable.getValue()); boolean newValue = hasScreenLock(appContext) && lockableSetting; if (oldValue != newValue) { this.lockable.setValue(newValue); @@ -201,7 +200,8 @@ public class LockManagerImpl implements LockManager, Service, EventListener { } private boolean timeoutEnabled() { - return timeoutMinutes != timeoutNever && lockable.getValue(); + return timeoutMinutes != timeoutNever + && requireNonNull(lockable.getValue()); } private boolean timedOut() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java index e093e6410..db30f45bb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/activity/BaseActivity.java @@ -212,14 +212,16 @@ public abstract class BaseActivity extends AppCompatActivity } public void showSoftKeyboard(View view) { - Object o = getSystemService(INPUT_METHOD_SERVICE); - ((InputMethodManager) o).showSoftInput(view, SHOW_IMPLICIT); + InputMethodManager im = (InputMethodManager) + getSystemService(INPUT_METHOD_SERVICE); + if (im != null) im.showSoftInput(view, SHOW_IMPLICIT); } public void hideSoftKeyboard(View view) { IBinder token = view.getWindowToken(); - Object o = getSystemService(INPUT_METHOD_SERVICE); - ((InputMethodManager) o).hideSoftInputFromWindow(token, 0); + InputMethodManager im = (InputMethodManager) + getSystemService(INPUT_METHOD_SERVICE); + if (im != null) im.hideSoftInputFromWindow(token, 0); } @UiThread diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java index dcfc63334..a603b61bd 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BasePostFragment.java @@ -54,9 +54,8 @@ abstract class BasePostFragment extends BaseFragment { @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // retrieve MessageId of blog post from arguments - byte[] p = requireNonNull(getArguments()).getByteArray(POST_ID); - if (p == null) throw new IllegalStateException("No post ID in args"); - postId = new MessageId(p); + Bundle args = requireNonNull(getArguments()); + postId = new MessageId(requireNonNull(args.getByteArray(POST_ID))); View view = inflater.inflate(R.layout.fragment_blog_post, container, false); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java index 2851b3fe9..8b59d2562 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogCommentItem.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.blog; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.api.blog.BlogCommentHeader; import org.briarproject.briar.api.blog.BlogPostHeader; @@ -7,9 +8,12 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import javax.annotation.concurrent.NotThreadSafe; + import static java.util.Collections.sort; -// This class is not thread-safe +@NotThreadSafe +@NotNullByDefault class BlogCommentItem extends BlogPostItem { private static final BlogCommentComparator COMPARATOR = diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java index 2d4104f30..f3fd00cf3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogFragment.java @@ -167,7 +167,8 @@ public class BlogFragment extends BaseFragment } @Override - public void onActivityResult(int request, int result, Intent data) { + public void onActivityResult(int request, int result, + @Nullable Intent data) { super.onActivityResult(request, result, data); if (request == REQUEST_WRITE_BLOG_POST && result == RESULT_OK) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java index d7e5d1fef..9b7ab8297 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostAdapter.java @@ -7,13 +7,11 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.util.BriarAdapter; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class BlogPostAdapter extends BriarAdapter { private final OnBlogPostClickListener listener; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java index d64303c07..4ec30f0c3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostItem.java @@ -1,9 +1,8 @@ package org.briarproject.briar.android.blog; -import android.support.annotation.NonNull; - import org.briarproject.bramble.api.identity.Author; import org.briarproject.bramble.api.identity.AuthorInfo; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.api.blog.BlogPostHeader; @@ -12,6 +11,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe +@NotNullByDefault public class BlogPostItem implements Comparable { private final BlogPostHeader header; @@ -67,16 +67,13 @@ public class BlogPostItem implements Comparable { } @Override - public int compareTo(@NonNull BlogPostItem other) { + public int compareTo(BlogPostItem other) { if (this == other) return 0; return compare(getHeader(), other.getHeader()); } protected static int compare(BlogPostHeader h1, BlogPostHeader h2) { // The newest post comes first - long aTime = h1.getTimeReceived(), bTime = h2.getTimeReceived(); - if (aTime > bTime) return -1; - if (aTime < bTime) return 1; - return 0; + return Long.compare(h2.getTimeReceived(), h1.getTimeReceived()); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java index 70ae123b3..86d4a4add 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/BlogPostViewHolder.java @@ -2,7 +2,6 @@ package org.briarproject.briar.android.blog; import android.content.Context; import android.content.Intent; -import android.support.annotation.NonNull; import android.support.annotation.UiThread; import android.support.v4.app.FragmentManager; import android.support.v4.view.ViewCompat; @@ -14,6 +13,7 @@ import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; import org.briarproject.briar.android.view.AuthorView; @@ -33,6 +33,7 @@ import static org.briarproject.briar.android.util.UiUtils.makeLinksClickable; import static org.briarproject.briar.api.blog.MessageType.POST; @UiThread +@NotNullByDefault class BlogPostViewHolder extends RecyclerView.ViewHolder { private final Context ctx; @@ -44,13 +45,12 @@ class BlogPostViewHolder extends RecyclerView.ViewHolder { private final ViewGroup commentContainer; private final boolean fullText; - @NonNull private final OnBlogPostClickListener listener; @Nullable private final FragmentManager fragmentManager; BlogPostViewHolder(View v, boolean fullText, - @NonNull OnBlogPostClickListener listener, + OnBlogPostClickListener listener, @Nullable FragmentManager fragmentManager) { super(v); this.fullText = fullText; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java index 4d0301fdb..ebec7fa3a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java @@ -96,7 +96,8 @@ public class FeedFragment extends BaseFragment implements } @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { + public void onActivityResult(int requestCode, int resultCode, + @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); // The BlogPostAddedEvent arrives when the controller is not listening diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java index ca7ae3fe0..3c17d7fb4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedPostFragment.java @@ -54,9 +54,7 @@ public class FeedPostFragment extends BasePostFragment { @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { Bundle args = requireNonNull(getArguments()); - byte[] b = args.getByteArray(GROUP_ID); - if (b == null) throw new IllegalStateException("No group ID in args"); - blogId = new GroupId(b); + blogId = new GroupId(requireNonNull(args.getByteArray(GROUP_ID))); return super.onCreateView(inflater, container, savedInstanceState); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java index 685b41877..7c84a8958 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/ReblogFragment.java @@ -73,7 +73,6 @@ public class ReblogFragment extends BaseFragment implements SendListener { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - Bundle args = requireNonNull(getArguments()); GroupId blogId = new GroupId(requireNonNull(args.getByteArray(GROUP_ID))); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java index ac5f29214..f9c32769a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedAdapter.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import android.widget.ImageButton; import android.widget.TextView; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.util.BriarAdapter; import org.briarproject.briar.api.feed.Feed; @@ -16,6 +17,7 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; import static org.briarproject.briar.android.util.UiUtils.formatDate; +@NotNullByDefault class RssFeedAdapter extends BriarAdapter { private final RssFeedListener listener; @@ -72,10 +74,7 @@ class RssFeedAdapter extends BriarAdapter { @Override public int compare(Feed a, Feed b) { if (a == b) return 0; - long aTime = a.getAdded(), bTime = b.getAdded(); - if (aTime > bTime) return -1; - if (aTime < bTime) return 1; - return 0; + return Long.compare(b.getAdded(), a.getAdded()); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java index d6e805834..7299fd2e4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedImportActivity.java @@ -5,14 +5,14 @@ import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; import android.util.Patterns; -import android.view.Menu; -import android.view.MenuItem; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.lifecycle.IoExecutor; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -33,6 +33,8 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class RssFeedImportActivity extends BriarActivity { private static final Logger LOG = @@ -47,11 +49,10 @@ public class RssFeedImportActivity extends BriarActivity { Executor ioExecutor; @Inject - @SuppressWarnings("WeakerAccess") volatile FeedManager feedManager; @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rss_feed_import); @@ -80,16 +81,6 @@ public class RssFeedImportActivity extends BriarActivity { progressBar = findViewById(R.id.progressBar); } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - return super.onOptionsItemSelected(item); - } - @Override public void injectActivity(ActivityComponent component) { component.inject(this); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java index 619a58fa5..810cf4376 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/RssFeedManageActivity.java @@ -3,6 +3,7 @@ package org.briarproject.briar.android.blog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDialog; import android.support.v7.widget.LinearLayoutManager; @@ -11,6 +12,8 @@ import android.view.MenuInflater; import android.view.MenuItem; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -30,6 +33,8 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class RssFeedManageActivity extends BriarActivity implements RssFeedListener { @@ -40,11 +45,10 @@ public class RssFeedManageActivity extends BriarActivity private RssFeedAdapter adapter; @Inject - @SuppressWarnings("WeakerAccess") volatile FeedManager feedManager; @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rss_feed_manage); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java index 2cad4f1ad..79997d197 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/WriteBlogPostActivity.java @@ -36,6 +36,7 @@ import javax.inject.Inject; import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static java.util.Objects.requireNonNull; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; @@ -70,9 +71,7 @@ public class WriteBlogPostActivity extends BriarActivity super.onCreate(state); Intent i = getIntent(); - byte[] b = i.getByteArrayExtra(GROUP_ID); - if (b == null) throw new IllegalStateException("No Group in intent."); - groupId = new GroupId(b); + groupId = new GroupId(requireNonNull(i.getByteArrayExtra(GROUP_ID))); setContentView(R.layout.activity_write_blog_post); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java index 5e58597ce..95bee3835 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/BaseContactListAdapter.java @@ -1,10 +1,10 @@ package org.briarproject.briar.android.contact; import android.content.Context; -import android.support.annotation.NonNull; import android.view.View; import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.android.util.BriarAdapter; import javax.annotation.Nullable; @@ -12,6 +12,7 @@ import javax.annotation.Nullable; import static android.support.v7.util.SortedList.INVALID_POSITION; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; +@NotNullByDefault public abstract class BaseContactListAdapter> extends BriarAdapter { @@ -25,7 +26,7 @@ public abstract class BaseContactListAdapter { @@ -28,22 +30,14 @@ public class ContactListAdapter extends public boolean areContentsTheSame(ContactListItem c1, ContactListItem c2) { // check for all properties that influence visual // representation of contact - if (c1.getUnreadCount() != c2.getUnreadCount()) { - return false; - } - if (c1.getTimestamp() != c2.getTimestamp()) { - return false; - } - return c1.isConnected() == c2.isConnected(); + return c1.getUnreadCount() == c2.getUnreadCount() && + c1.getTimestamp() == c2.getTimestamp() && + c1.isConnected() == c2.isConnected(); } @Override public int compare(ContactListItem c1, ContactListItem c2) { - long time1 = c1.getTimestamp(); - long time2 = c2.getTimestamp(); - if (time1 < time2) return 1; - if (time1 > time2) return -1; - return 0; + return Long.compare(c2.getTimestamp(), c1.getTimestamp()); } } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java index 247dc92b5..d6594238a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contactselection/BaseContactSelectorFragment.java @@ -53,11 +53,8 @@ public abstract class BaseContactSelectorFragment { if (contacts.contains(c)) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java index 21d2f82a6..08801e3c8 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AliasDialogFragment.java @@ -3,7 +3,7 @@ package org.briarproject.briar.android.conversation; import android.arch.lifecycle.ViewModelProvider; import android.arch.lifecycle.ViewModelProviders; import android.os.Bundle; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v7.app.AppCompatDialogFragment; import android.view.LayoutInflater; import android.view.View; @@ -12,6 +12,8 @@ import android.widget.Button; import android.widget.EditText; import org.briarproject.bramble.api.contact.Contact; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.BriarActivity; @@ -19,6 +21,8 @@ import javax.inject.Inject; import static java.util.Objects.requireNonNull; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class AliasDialogFragment extends AppCompatDialogFragment { final static String TAG = AliasDialogFragment.class.getName(); @@ -34,7 +38,7 @@ public class AliasDialogFragment extends AppCompatDialogFragment { } @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_TITLE, R.style.BriarDialogTheme); @@ -45,8 +49,9 @@ public class AliasDialogFragment extends AppCompatDialogFragment { } @Override - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_alias_dialog, container, false); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java index 5f93fcd14..70cc56a65 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ConversationViewModel.java @@ -58,7 +58,7 @@ import static org.briarproject.briar.android.util.UiUtils.observeForeverOnce; @NotNullByDefault public class ConversationViewModel extends AndroidViewModel { - private static Logger LOG = + private static final Logger LOG = getLogger(ConversationViewModel.class.getName()); private static final String SHOW_ONBOARDING_IMAGE = "showOnboardingImage"; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java index 76c5b82fe..5f139e376 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumActivity.java @@ -88,7 +88,8 @@ public class ForumActivity extends } @Override - protected void onActivityResult(int request, int result, Intent data) { + protected void onActivityResult(int request, int result, + @Nullable Intent data) { super.onActivityResult(request, result, data); if (request == REQUEST_SHARE_FORUM && result == RESULT_OK) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java index 5f346392d..60a22707a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListAdapter.java @@ -8,6 +8,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; import org.briarproject.briar.android.util.BriarAdapter; @@ -21,6 +22,7 @@ import static org.briarproject.briar.android.activity.BriarActivity.GROUP_ID; import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME; import static org.briarproject.briar.android.util.UiUtils.formatDate; +@NotNullByDefault class ForumListAdapter extends BriarAdapter { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java index a7594c495..db892ab70 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java @@ -94,9 +94,8 @@ public class ForumListFragment extends BaseEventFragment implements @Nullable Bundle savedInstanceState) { requireActivity().setTitle(R.string.forums_button); - View contentView = - inflater.inflate(R.layout.fragment_forum_list, container, - false); + View contentView = inflater.inflate(R.layout.fragment_forum_list, + container, false); adapter = new ForumListAdapter(requireActivity()); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java index 5341d3f1f..aa8ad804a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListItem.java @@ -4,7 +4,9 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.forum.Forum; import org.briarproject.briar.api.forum.ForumPostHeader; -// This class is NOT thread-safe +import javax.annotation.concurrent.NotThreadSafe; + +@NotThreadSafe class ForumListItem { private final Forum forum; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java index 5ddf206f3..1af356b4a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/BaseFragment.java @@ -63,6 +63,7 @@ public abstract class BaseFragment extends Fragment } public interface BaseFragmentListener { + @Deprecated void runOnDbThread(Runnable runnable); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/fragment/ErrorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/fragment/ErrorFragment.java index 6506fcc71..7a845f34d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/fragment/ErrorFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/fragment/ErrorFragment.java @@ -11,6 +11,8 @@ import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; +import static java.util.Objects.requireNonNull; + @MethodsNotNullByDefault @ParametersNotNullByDefault @@ -38,9 +40,7 @@ public class ErrorFragment extends BaseFragment { @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - Bundle args = getArguments(); - if (args == null) throw new AssertionError(); + Bundle args = requireNonNull(getArguments()); errorMessage = args.getString(ERROR_MSG); } @@ -49,8 +49,7 @@ public class ErrorFragment extends BaseFragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View v = inflater - .inflate(R.layout.fragment_error, container, false); + View v = inflater.inflate(R.layout.fragment_error, container, false); TextView msg = v.findViewById(R.id.errorMessage); msg.setText(errorMessage); return v; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java index 137d0c585..d462846b2 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionActivity.java @@ -2,8 +2,11 @@ package org.briarproject.briar.android.introduction; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.Nullable; import org.briarproject.bramble.api.contact.ContactId; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -11,11 +14,13 @@ import org.briarproject.briar.android.fragment.BaseFragment.BaseFragmentListener import static org.briarproject.briar.android.conversation.ConversationActivity.CONTACT_ID; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class IntroductionActivity extends BriarActivity implements BaseFragmentListener { @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java index b8375a74f..ac2108950 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/introduction/IntroductionMessageFragment.java @@ -95,7 +95,6 @@ public class IntroductionMessageFragment extends BaseFragment public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - // change toolbar text ActionBar actionBar = introductionActivity.getSupportActionBar(); if (actionBar != null) { @@ -126,11 +125,6 @@ public class IntroductionMessageFragment extends BaseFragment return v; } - @Override - public void onStart() { - super.onStart(); - } - @Override public String getUniqueTag() { return TAG; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java index fd40da9e5..c8ea5eee9 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/CameraView.java @@ -16,8 +16,7 @@ import android.view.SurfaceView; import android.view.View; import android.view.WindowManager; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import java.io.IOException; import java.util.List; @@ -43,8 +42,7 @@ import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; @SuppressWarnings("deprecation") -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault public class CameraView extends SurfaceView implements SurfaceHolder.Callback, AutoFocusCallback, View.OnClickListener { @@ -61,7 +59,9 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, @Nullable private Camera camera = null; private int cameraIndex = 0; + @Nullable private PreviewConsumer previewConsumer = null; + @Nullable private Surface surface = null; private int displayOrientation = 0, surfaceWidth = 0, surfaceHeight = 0; private boolean previewStarted = false; @@ -126,6 +126,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, } catch (RuntimeException e) { throw new CameraException(e); } + requireNonNull(camera); setDisplayOrientation(getScreenRotationDegrees()); // Use barcode scene mode if it's available Parameters params = requireNonNull(camera).getParameters(); @@ -214,7 +215,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, private void startConsumer() throws CameraException { if (camera == null) throw new CameraException("Camera is null"); startAutoFocus(); - previewConsumer.start(camera, cameraIndex); + requireNonNull(previewConsumer).start(camera, cameraIndex); } @UiThread @@ -234,7 +235,7 @@ public class CameraView extends SurfaceView implements SurfaceHolder.Callback, private void stopConsumer() throws CameraException { if (camera == null) throw new CameraException("Camera is null"); cancelAutoFocus(); - previewConsumer.stop(); + requireNonNull(previewConsumer).stop(); } @UiThread diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java index 224c3209f..995752304 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeActivity.java @@ -22,6 +22,7 @@ import javax.annotation.Nullable; import javax.inject.Inject; import static android.widget.Toast.LENGTH_LONG; +import static java.util.Objects.requireNonNull; import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; import static org.briarproject.bramble.util.LogUtils.logException; @@ -48,7 +49,8 @@ public class ContactExchangeActivity extends KeyAgreementActivity implements @Override public void onCreate(@Nullable Bundle state) { super.onCreate(state); - getSupportActionBar().setTitle(R.string.add_contact_title); + requireNonNull(getSupportActionBar()) + .setTitle(R.string.add_contact_title); } private void startContactExchange(KeyAgreementResult result) { @@ -97,9 +99,8 @@ public class ContactExchangeActivity extends KeyAgreementActivity implements @Override public void contactExchangeFailed() { - runOnUiThreadUnlessDestroyed(() -> { - showErrorFragment(R.string.connection_error_explanation); - }); + runOnUiThreadUnlessDestroyed(() -> + showErrorFragment(R.string.connection_error_explanation)); } @UiThread diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeErrorFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeErrorFragment.java index 5d3fe5d7b..045d6023d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeErrorFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/ContactExchangeErrorFragment.java @@ -18,6 +18,7 @@ import org.briarproject.briar.android.util.UiUtils; import javax.inject.Inject; +import static java.util.Objects.requireNonNull; import static org.briarproject.briar.android.util.UiUtils.onSingleLinkClick; @MethodsNotNullByDefault @@ -59,10 +60,7 @@ public class ContactExchangeErrorFragment extends BaseFragment { // set humanized error message TextView explanation = v.findViewById(R.id.errorMessage); - Bundle args = getArguments(); - if (args == null) { - throw new IllegalArgumentException("Use newInstance()"); - } + Bundle args = requireNonNull(getArguments()); explanation.setText(args.getString(ERROR_MSG)); // make feedback link clickable diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java index 6ee1f45c2..f639cc802 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/IntroFragment.java @@ -54,7 +54,6 @@ public class IntroFragment extends BaseFragment { public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View v = inflater.inflate(R.layout.fragment_keyagreement_id, container, false); scrollView = v.findViewById(R.id.scrollView); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java index a03af44bc..58ea337cb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/keyagreement/QrCodeDecoder.java @@ -5,6 +5,7 @@ import android.hardware.Camera.CameraInfo; import android.hardware.Camera.PreviewCallback; import android.hardware.Camera.Size; import android.os.AsyncTask; +import android.support.annotation.Nullable; import android.support.annotation.UiThread; import com.google.zxing.BinaryBitmap; @@ -16,9 +17,7 @@ import com.google.zxing.Result; import com.google.zxing.common.HybridBinarizer; import com.google.zxing.qrcode.QRCodeReader; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import java.util.logging.Logger; @@ -28,8 +27,7 @@ import static java.util.logging.Level.WARNING; import static java.util.logging.Logger.getLogger; @SuppressWarnings("deprecation") -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class QrCodeDecoder implements PreviewConsumer, PreviewCallback { private static final Logger LOG = getLogger(QrCodeDecoder.class.getName()); @@ -37,6 +35,7 @@ class QrCodeDecoder implements PreviewConsumer, PreviewCallback { private final Reader reader = new QRCodeReader(); private final ResultCallback callback; + @Nullable private Camera camera = null; private int cameraIndex = 0; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java index 35eae1e20..c57a53516 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/ChangePasswordActivity.java @@ -1,7 +1,7 @@ package org.briarproject.briar.android.login; import android.os.Bundle; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.text.Editable; import android.text.TextWatcher; @@ -15,6 +15,8 @@ import android.widget.TextView; import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -27,6 +29,8 @@ import static android.view.View.VISIBLE; import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK; import static org.briarproject.briar.android.util.UiUtils.setError; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class ChangePasswordActivity extends BriarActivity implements OnClickListener, OnEditorActionListener { @@ -44,7 +48,7 @@ public class ChangePasswordActivity extends BriarActivity private ProgressBar progress; @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); setContentView(R.layout.activity_change_password); @@ -127,7 +131,7 @@ public class ChangePasswordActivity extends BriarActivity newPassword.getText().toString(), new UiResultHandler(this) { @Override - public void onResultUi(@NonNull Boolean result) { + public void onResultUi(Boolean result) { if (result) { Toast.makeText(ChangePasswordActivity.this, R.string.password_changed, diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/DozeFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/login/DozeFragment.java index 004f5921e..bf3721d73 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/DozeFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/DozeFragment.java @@ -76,7 +76,8 @@ public class DozeFragment extends SetupFragment } @Override - public void onActivityResult(int request, int result, Intent data) { + public void onActivityResult(int request, int result, + @Nullable Intent data) { super.onActivityResult(request, result, data); if (request == REQUEST_DOZE_WHITELISTING) { if (!dozeView.needsToBeShown() || secondAttempt) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java index 55aa3a8e7..fd6ddfe0e 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/OpenDatabaseActivity.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.event.EventListener; import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState; import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; @@ -24,6 +25,7 @@ import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleS import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.MIGRATING_DATABASE; import static org.briarproject.bramble.api.lifecycle.LifecycleManager.LifecycleState.STARTING_SERVICES; +@MethodsNotNullByDefault @ParametersNotNullByDefault public class OpenDatabaseActivity extends BriarActivity implements EventListener { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java index b7b57ce83..189102c64 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PasswordActivity.java @@ -2,7 +2,7 @@ package org.briarproject.briar.android.login; import android.content.Intent; import android.os.Bundle; -import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.support.v7.app.AlertDialog; import android.text.Editable; @@ -13,6 +13,8 @@ import android.widget.EditText; import android.widget.ProgressBar; import org.briarproject.bramble.api.account.AccountManager; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BaseActivity; @@ -28,6 +30,8 @@ import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; import static org.briarproject.briar.android.util.UiUtils.enterPressed; import static org.briarproject.briar.android.util.UiUtils.setError; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class PasswordActivity extends BaseActivity { @Inject @@ -48,7 +52,7 @@ public class PasswordActivity extends BaseActivity { private EditText password; @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); // fade-in after splash screen instead of default animation overridePendingTransition(R.anim.fade_in, R.anim.fade_out); @@ -146,7 +150,7 @@ public class PasswordActivity extends BaseActivity { passwordController.validatePassword(password.getText().toString(), new UiResultHandler(this) { @Override - public void onResultUi(@NonNull Boolean result) { + public void onResultUi(Boolean result) { if (result) { setResult(RESULT_OK); supportFinishAfterTransition(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/PowerView.java b/briar-android/src/main/java/org/briarproject/briar/android/login/PowerView.java index 54ddfb850..5d2c6844d 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/PowerView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/PowerView.java @@ -84,6 +84,7 @@ abstract class PowerView extends ConstraintLayout { setChecked(ss.value[0]); // also calls listener } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public abstract boolean needsToBeShown(); public void setChecked(boolean checked) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/login/UnlockActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/login/UnlockActivity.java index 0e27152d7..c2493e4ca 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/login/UnlockActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/login/UnlockActivity.java @@ -27,6 +27,7 @@ import static android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_CANCEL import static android.hardware.biometrics.BiometricPrompt.BIOMETRIC_ERROR_USER_CANCELED; import static android.os.Build.VERSION.SDK_INT; import static android.view.View.INVISIBLE; +import static java.util.Objects.requireNonNull; import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_KEYGUARD_UNLOCK; import static org.briarproject.briar.android.util.UiUtils.hasKeyguardLock; @@ -77,7 +78,7 @@ public class UnlockActivity extends BaseActivity { @Override protected void onActivityResult(int requestCode, int resultCode, - Intent data) { + @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_KEYGUARD_UNLOCK) { if (resultCode == RESULT_OK) unlock(); @@ -169,9 +170,8 @@ public class UnlockActivity extends BaseActivity { } private void requestKeyguardUnlock() { - KeyguardManager keyguardManager = - (KeyguardManager) getSystemService(KEYGUARD_SERVICE); - if (keyguardManager == null) throw new AssertionError(); + KeyguardManager keyguardManager = (KeyguardManager) + requireNonNull(getSystemService(KEYGUARD_SERVICE)); Intent intent = keyguardManager.createConfirmDeviceCredentialIntent( SDK_INT < 23 ? getString(R.string.lock_unlock_verbose) : getString(R.string.lock_unlock), null); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java index e104ba3c6..de9f6f695 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logout/ExitActivity.java @@ -2,18 +2,24 @@ package org.briarproject.briar.android.logout; import android.app.Activity; import android.os.Bundle; +import android.support.annotation.Nullable; + +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import java.util.logging.Logger; import static android.os.Build.VERSION.SDK_INT; import static java.util.logging.Logger.getLogger; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class ExitActivity extends Activity { private static final Logger LOG = getLogger(ExitActivity.class.getName()); @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); if (SDK_INT >= 21) finishAndRemoveTask(); else finish(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java index 2a71fb5b2..cc828bd14 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/logout/HideUiActivity.java @@ -2,11 +2,17 @@ package org.briarproject.briar.android.logout; import android.app.Activity; import android.os.Bundle; +import android.support.annotation.Nullable; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; + +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class HideUiActivity extends Activity { @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); finish(); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java index 9c19c78b1..451808efe 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicPreferencesActivity.java @@ -1,18 +1,23 @@ package org.briarproject.briar.android.panic; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.view.MenuItem; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class PanicPreferencesActivity extends BriarActivity { @Override - public void onCreate(Bundle bundle) { - super.onCreate(bundle); + public void onCreate(@Nullable Bundle state) { + super.onCreate(state); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java index 24fd00081..4863fad65 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/panic/PanicResponderActivity.java @@ -3,9 +3,12 @@ package org.briarproject.briar.android.panic; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.preference.PreferenceManager; import org.briarproject.bramble.api.account.AccountManager; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -24,6 +27,8 @@ import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_LOCK; import static org.briarproject.briar.android.panic.PanicPreferencesFragment.KEY_PURGE; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class PanicResponderActivity extends BriarActivity { private static final Logger LOG = @@ -35,7 +40,7 @@ public class PanicResponderActivity extends BriarActivity { protected AndroidExecutor androidExecutor; @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); TrustedIntents trustedIntents = TrustedIntents.get(this); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java index cc60fa1e6..22e9001e4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/conversation/GroupActivity.java @@ -172,7 +172,8 @@ public class GroupActivity extends } @Override - protected void onActivityResult(int request, int result, Intent data) { + protected void onActivityResult(int request, int result, + @Nullable Intent data) { if (request == REQUEST_GROUP_INVITE && result == RESULT_OK) { displaySnackbar(R.string.groups_invitation_sent); } else super.onActivityResult(request, result, data); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java index 540b15df5..e9807e99a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/invitation/GroupInvitationAdapter.java @@ -3,9 +3,11 @@ package org.briarproject.briar.android.privategroup.invitation; import android.content.Context; import android.view.ViewGroup; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.android.sharing.InvitationAdapter; import org.briarproject.briar.api.privategroup.invitation.GroupInvitationItem; +@NotNullByDefault class GroupInvitationAdapter extends InvitationAdapter { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java index e4a69c366..bdbcd8b5b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupItem.java @@ -8,7 +8,9 @@ import org.briarproject.briar.api.client.MessageTracker.GroupCount; import org.briarproject.briar.api.privategroup.GroupMessageHeader; import org.briarproject.briar.api.privategroup.PrivateGroup; -// This class is not thread-safe +import javax.annotation.concurrent.NotThreadSafe; + +@NotThreadSafe @NotNullByDefault class GroupItem { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java index a42bf3a78..5950801f6 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListAdapter.java @@ -5,8 +5,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; import org.briarproject.briar.android.privategroup.list.GroupViewHolder.OnGroupRemoveClickListener; @@ -14,8 +13,7 @@ import org.briarproject.briar.android.util.BriarAdapter; import static android.support.v7.util.SortedList.INVALID_POSITION; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class GroupListAdapter extends BriarAdapter { private final OnGroupRemoveClickListener listener; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java index 5036e5d6f..c5b46441a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupViewHolder.java @@ -8,8 +8,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.GroupId; import org.briarproject.briar.R; import org.briarproject.briar.android.privategroup.conversation.GroupActivity; @@ -22,8 +21,7 @@ import static org.briarproject.briar.android.activity.BriarActivity.GROUP_NAME; import static org.briarproject.briar.android.util.UiUtils.formatDate; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault class GroupViewHolder extends RecyclerView.ViewHolder { private final static float ALPHA = 0.42f; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java index 2b1634c4f..29452778f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/memberlist/MemberListAdapter.java @@ -1,16 +1,17 @@ package org.briarproject.briar.android.privategroup.memberlist; import android.content.Context; -import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.util.BriarAdapter; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; +@NotNullByDefault class MemberListAdapter extends BriarAdapter { @@ -18,18 +19,15 @@ class MemberListAdapter extends super(context, MemberListItem.class); } - @NonNull @Override - public MemberListItemHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, - int i) { + public MemberListItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(ctx).inflate( R.layout.list_item_group_member, viewGroup, false); return new MemberListItemHolder(v); } @Override - public void onBindViewHolder(@NonNull MemberListItemHolder ui, - int position) { + public void onBindViewHolder(MemberListItemHolder ui, int position) { ui.bind(items.get(position)); } @@ -44,10 +42,9 @@ class MemberListAdapter extends @Override public boolean areContentsTheSame(MemberListItem m1, MemberListItem m2) { - if (m1.isOnline() != m2.isOnline()) return false; - if (m1.getContactId() != m2.getContactId()) return false; - if (m1.getStatus() != m2.getStatus()) return false; - return true; + return m1.isOnline() == m2.isOnline() && + m1.getContactId() == m2.getContactId() && + m1.getStatus() == m2.getStatus(); } @Override diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java index 21476821d..17cf88ff7 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportPrimer.java @@ -1,5 +1,6 @@ package org.briarproject.briar.android.reporting; +import android.annotation.SuppressLint; import android.app.ActivityManager; import android.bluetooth.BluetoothAdapter; import android.content.Context; @@ -11,10 +12,10 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.provider.Settings; -import android.support.annotation.NonNull; import org.acra.builder.ReportBuilder; import org.acra.builder.ReportPrimer; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.BuildConfig; import org.briarproject.briar.android.BriarApplication; import org.briarproject.briar.android.logging.BriefLogFormatter; @@ -41,15 +42,17 @@ import static android.net.ConnectivityManager.TYPE_WIFI; import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED; import static android.os.Build.VERSION.SDK_INT; import static java.util.Collections.unmodifiableMap; +import static java.util.Objects.requireNonNull; import static org.briarproject.bramble.util.PrivacyUtils.scrubInetAddress; import static org.briarproject.bramble.util.PrivacyUtils.scrubMacAddress; import static org.briarproject.bramble.util.StringUtils.isNullOrEmpty; +@SuppressLint("HardwareIds") +@NotNullByDefault public class BriarReportPrimer implements ReportPrimer { @Override - public void primeReport(@NonNull Context ctx, - @NonNull ReportBuilder builder) { + public void primeReport(Context ctx, ReportBuilder builder) { CustomDataTask task = new CustomDataTask(ctx); FutureTask> futureTask = new FutureTask<>(task); // Use a new thread as the Android executor thread may have died @@ -85,8 +88,8 @@ public class BriarReportPrimer implements ReportPrimer { customData.put("Log", sb.toString()); // System memory - Object o = ctx.getSystemService(ACTIVITY_SERVICE); - ActivityManager am = (ActivityManager) o; + ActivityManager am = (ActivityManager) + requireNonNull(ctx.getSystemService(ACTIVITY_SERVICE)); ActivityManager.MemoryInfo mem = new ActivityManager.MemoryInfo(); am.getMemoryInfo(mem); String systemMemory; @@ -127,8 +130,8 @@ public class BriarReportPrimer implements ReportPrimer { customData.put("External storage", external); // Is mobile data available? - o = ctx.getSystemService(CONNECTIVITY_SERVICE); - ConnectivityManager cm = (ConnectivityManager) o; + ConnectivityManager cm = (ConnectivityManager) + requireNonNull(ctx.getSystemService(CONNECTIVITY_SERVICE)); NetworkInfo mobile = cm.getNetworkInfo(TYPE_MOBILE); boolean mobileAvailable = mobile != null && mobile.isAvailable(); // Is mobile data enabled? @@ -162,8 +165,8 @@ public class BriarReportPrimer implements ReportPrimer { NetworkInfo wifi = cm.getNetworkInfo(TYPE_WIFI); boolean wifiAvailable = wifi != null && wifi.isAvailable(); // Is wifi enabled? - o = ctx.getApplicationContext().getSystemService(WIFI_SERVICE); - WifiManager wm = (WifiManager) o; + WifiManager wm = (WifiManager) + ctx.getApplicationContext().getSystemService(WIFI_SERVICE); boolean wifiEnabled = wm != null && wm.getWifiState() == WIFI_STATE_ENABLED; // Is wifi connected? diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java index f4d9b5aef..36c9be82c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSender.java @@ -1,11 +1,12 @@ package org.briarproject.briar.android.reporting; import android.content.Context; -import android.support.annotation.NonNull; import org.acra.collector.CrashReportData; import org.acra.sender.ReportSender; import org.acra.sender.ReportSenderException; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.reporting.DevReporter; import org.briarproject.bramble.util.AndroidUtils; import org.briarproject.briar.android.AndroidComponent; @@ -17,6 +18,8 @@ import javax.inject.Inject; import static org.acra.ReportField.REPORT_ID; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class BriarReportSender implements ReportSender { private final AndroidComponent component; @@ -29,8 +32,7 @@ public class BriarReportSender implements ReportSender { } @Override - public void send(@NonNull Context ctx, - @NonNull CrashReportData errorContent) + public void send(Context ctx, CrashReportData errorContent) throws ReportSenderException { component.inject(this); String crashReport = errorContent.toJSON().toString(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java index c474f4a89..8e2c94fd3 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/BriarReportSenderFactory.java @@ -1,19 +1,18 @@ package org.briarproject.briar.android.reporting; import android.content.Context; -import android.support.annotation.NonNull; import org.acra.config.ACRAConfiguration; import org.acra.sender.ReportSender; import org.acra.sender.ReportSenderFactory; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.android.BriarApplication; +@NotNullByDefault public class BriarReportSenderFactory implements ReportSenderFactory { - @NonNull @Override - public ReportSender create(@NonNull Context ctx, - @NonNull ACRAConfiguration config) { + public ReportSender create(Context ctx, ACRAConfiguration config) { // ACRA passes in the Application as context BriarApplication app = (BriarApplication) ctx; return new BriarReportSender(app.getApplicationComponent()); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java index 1a7318682..20833aa6f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/reporting/DevReportActivity.java @@ -74,8 +74,9 @@ public class DevReportActivity extends BaseCrashReportDialog requiredFields.add(STACK_TRACE); } + private final Set excludedFields = new HashSet<>(); + private AppCompatDelegate delegate; - private Set excludedFields = new HashSet<>(); private EditText userCommentView = null; private EditText userEmailView = null; private CheckBox includeDebugReport = null; diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java index 48b4b7fa9..7fcd48b4f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsActivity.java @@ -1,18 +1,23 @@ package org.briarproject.briar.android.settings; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.view.MenuItem; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class SettingsActivity extends BriarActivity { @Override - public void onCreate(Bundle bundle) { - super.onCreate(bundle); + public void onCreate(@Nullable Bundle state) { + super.onCreate(state); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java index e1a9aa981..4a0462785 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java @@ -9,6 +9,7 @@ import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v14.preference.SwitchPreference; import android.support.v4.content.ContextCompat; @@ -242,8 +243,9 @@ public class SettingsFragment extends PreferenceFragmentCompat } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { View view = super.onCreateView(inflater, container, savedInstanceState); ColorDrawable divider = new ColorDrawable( ContextCompat.getColor(requireContext(), R.color.divider)); @@ -630,7 +632,8 @@ public class SettingsFragment extends PreferenceFragmentCompat } @Override - public void onActivityResult(int request, int result, Intent data) { + public void onActivityResult(int request, int result, + @Nullable Intent data) { super.onActivityResult(request, result, data); if (request == REQUEST_RINGTONE && result == RESULT_OK) { Settings s = new Settings(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java index f9747ff5b..93f3f7634 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/BaseMessageFragment.java @@ -40,7 +40,6 @@ public abstract class BaseMessageFragment extends BaseFragment public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - // inflate view View v = inflater.inflate(R.layout.fragment_message, container, false); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java index ab08e79b7..65b5e6630 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/InvitationAdapter.java @@ -1,15 +1,16 @@ package org.briarproject.briar.android.sharing; import android.content.Context; -import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.util.BriarAdapter; import org.briarproject.briar.api.sharing.InvitationItem; +@NotNullByDefault public abstract class InvitationAdapter> extends BriarAdapter { @@ -27,7 +28,7 @@ public abstract class InvitationAdapter { @@ -14,8 +16,7 @@ class SharingInvitationAdapter extends } @Override - public SharingInvitationViewHolder onCreateViewHolder( - ViewGroup parent, + public SharingInvitationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new SharingInvitationViewHolder(getView(parent)); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java index b751b9b2f..ba1cb25df 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/sharing/SharingStatusAdapter.java @@ -5,11 +5,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.contact.BaseContactListAdapter; import org.briarproject.briar.android.contact.ContactItem; import org.briarproject.briar.android.contact.ContactItemViewHolder; +@NotNullByDefault class SharingStatusAdapter extends BaseContactListAdapter> { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java index 93d910739..431f3c02c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/splash/SplashScreenActivity.java @@ -3,10 +3,13 @@ package org.briarproject.briar.android.splash; import android.content.Intent; import android.os.Bundle; import android.os.Handler; +import android.support.annotation.Nullable; import android.support.v7.preference.PreferenceManager; import android.transition.Fade; import org.briarproject.bramble.api.account.AccountManager; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; @@ -24,6 +27,8 @@ import static android.os.Build.VERSION.SDK_INT; import static java.util.logging.Logger.getLogger; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class SplashScreenActivity extends BaseActivity { private static final Logger LOG = @@ -37,7 +42,7 @@ public class SplashScreenActivity extends BaseActivity { protected AndroidExecutor androidExecutor; @Override - public void onCreate(Bundle state) { + public void onCreate(@Nullable Bundle state) { super.onCreate(state); if (SDK_INT >= 21) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java index fad48f249..caf842237 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/test/TestDataActivity.java @@ -2,12 +2,15 @@ package org.briarproject.briar.android.test; import android.content.Intent; import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v7.app.ActionBar; import android.view.MenuItem; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; +import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; import org.briarproject.briar.R; import org.briarproject.briar.android.activity.ActivityComponent; import org.briarproject.briar.android.activity.BriarActivity; @@ -18,6 +21,8 @@ import javax.inject.Inject; import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; +@MethodsNotNullByDefault +@ParametersNotNullByDefault public class TestDataActivity extends BriarActivity { @Inject @@ -39,8 +44,8 @@ public class TestDataActivity extends BriarActivity { private SeekBar forumPostsSeekBar; @Override - public void onCreate(Bundle bundle) { - super.onCreate(bundle); + public void onCreate(@Nullable Bundle state) { + super.onCreate(state); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java index 4a9a51640..1bdf7d353 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItem.java @@ -83,6 +83,7 @@ public abstract class ThreadItem implements MessageNode { this.level = level; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean isRead() { return isRead; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java index 15bd410e6..ed8560c94 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/threaded/ThreadItemAdapter.java @@ -1,6 +1,5 @@ package org.briarproject.briar.android.threaded; -import android.support.annotation.NonNull; import android.support.annotation.UiThread; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -8,6 +7,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.sync.MessageId; import org.briarproject.briar.R; import org.briarproject.briar.android.util.VersionedAdapter; @@ -19,6 +19,7 @@ import javax.annotation.Nullable; import static android.support.v7.widget.RecyclerView.NO_POSITION; @UiThread +@NotNullByDefault public class ThreadItemAdapter extends RecyclerView.Adapter> implements VersionedAdapter { @@ -37,18 +38,16 @@ public class ThreadItemAdapter this.layoutManager = layoutManager; } - @NonNull @Override - public BaseThreadItemViewHolder onCreateViewHolder(@NonNull - ViewGroup parent, int viewType) { + public BaseThreadItemViewHolder onCreateViewHolder(ViewGroup parent, + int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item_thread, parent, false); return new ThreadPostViewHolder<>(v); } @Override - public void onBindViewHolder(@NonNull BaseThreadItemViewHolder ui, - int position) { + public void onBindViewHolder(BaseThreadItemViewHolder ui, int position) { I item = items.get(position); ui.bind(item, listener); } @@ -118,7 +117,7 @@ public class ThreadItemAdapter void setHighlightedItem(@Nullable MessageId id) { for (int i = 0; i < items.size(); i++) { I item = items.get(i); - if (id != null && item.getId().equals(id)) { + if (item.getId().equals(id)) { item.setHighlighted(true); notifyItemChanged(i, item); } else if (item.isHighlighted()) { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java index 889fd57f5..80db68533 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/BriarAdapter.java @@ -6,12 +6,15 @@ import android.support.v7.util.SortedList; import android.support.v7.widget.RecyclerView.Adapter; import android.support.v7.widget.RecyclerView.ViewHolder; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + import java.util.Collection; import javax.annotation.Nullable; import static android.support.v7.util.SortedList.INVALID_POSITION; +@NotNullByDefault public abstract class BriarAdapter extends Adapter implements VersionedAdapter { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java index eb7ecd9af..24e74a56f 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/util/UiUtils.java @@ -42,8 +42,7 @@ import org.acra.ACRA; import org.briarproject.bramble.api.contact.Contact; import org.briarproject.bramble.api.contact.ContactId; import org.briarproject.bramble.api.identity.Author; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.system.AndroidExecutor; import org.briarproject.briar.R; import org.briarproject.briar.android.view.ArticleMovementMethod; @@ -76,11 +75,11 @@ import static android.text.format.DateUtils.YEAR_IN_MILLIS; import static android.view.KeyEvent.ACTION_DOWN; import static android.view.KeyEvent.KEYCODE_ENTER; import static android.view.inputmethod.EditorInfo.IME_NULL; +import static java.util.Objects.requireNonNull; import static org.briarproject.briar.BuildConfig.APPLICATION_ID; import static org.briarproject.briar.android.TestingConstants.EXPIRY_DATE; -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault public class UiUtils { public static final long MIN_DATE_RESOLUTION = MINUTE_IN_MILLIS; @@ -242,9 +241,9 @@ public class UiUtils { public static boolean needsDozeWhitelisting(Context ctx) { if (SDK_INT < 23) return false; - PowerManager pm = (PowerManager) ctx.getSystemService(POWER_SERVICE); + PowerManager pm = (PowerManager) + requireNonNull(ctx.getSystemService(POWER_SERVICE)); String packageName = ctx.getPackageName(); - if (pm == null) throw new AssertionError(); return !pm.isIgnoringBatteryOptimizations(packageName); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java index 0ed3d5932..f6db8fb56 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/AuthorView.java @@ -25,6 +25,7 @@ import static android.graphics.Typeface.BOLD; import static android.util.TypedValue.COMPLEX_UNIT_PX; import static org.briarproject.bramble.api.identity.AuthorInfo.Status.NONE; import static org.briarproject.bramble.api.identity.AuthorInfo.Status.OURSELVES; +import static org.briarproject.bramble.api.nullsafety.NullSafety.requireNonNull; import static org.briarproject.briar.android.util.UiUtils.formatDate; import static org.briarproject.briar.android.util.UiUtils.getContactDisplayName; import static org.briarproject.briar.android.util.UiUtils.resolveAttribute; @@ -49,8 +50,8 @@ public class AuthorView extends ConstraintLayout { public AuthorView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); - LayoutInflater inflater = (LayoutInflater) context - .getSystemService(LAYOUT_INFLATER_SERVICE); + LayoutInflater inflater = (LayoutInflater) requireNonNull( + context.getSystemService(LAYOUT_INFLATER_SERVICE)); inflater.inflate(R.layout.author_view, this, true); avatar = findViewById(R.id.avatar); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java b/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java index c3aa06c68..6e4ad724a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/KeyboardAwareLinearLayout.java @@ -174,9 +174,9 @@ public class KeyboardAwareLinearLayout extends LinearLayout { } private int getDeviceRotation() { - WindowManager windowManager = - (WindowManager) getContext().getSystemService(WINDOW_SERVICE); - return requireNonNull(windowManager).getDefaultDisplay().getRotation(); + WindowManager windowManager = (WindowManager) requireNonNull( + getContext().getSystemService(WINDOW_SERVICE)); + return windowManager.getDefaultDisplay().getRotation(); } private int getKeyboardLandscapeHeight() { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java index 5ed4ce0f1..d19438c3b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/LargeTextInputView.java @@ -7,8 +7,7 @@ import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.Button; -import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault; -import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.briar.R; import javax.annotation.Nullable; @@ -17,8 +16,7 @@ import static android.view.Gravity.BOTTOM; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; @UiThread -@MethodsNotNullByDefault -@ParametersNotNullByDefault +@NotNullByDefault public class LargeTextInputView extends TextInputView { public LargeTextInputView(Context context) { diff --git a/briar-android/src/main/res/layout/fragment_error.xml b/briar-android/src/main/res/layout/fragment_error.xml index 0c8ff3a67..e0675864a 100644 --- a/briar-android/src/main/res/layout/fragment_error.xml +++ b/briar-android/src/main/res/layout/fragment_error.xml @@ -50,6 +50,6 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/errorTitle" - tools:text="@string/qr_code_unsupported"/> + tools:text="@string/startup_failed_service_error"/> diff --git a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java index d649d6d4a..c7b1b25ee 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/forum/ForumActivityTest.java @@ -23,7 +23,6 @@ import org.robolectric.annotation.Config; import static java.util.Arrays.asList; import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; import static org.briarproject.bramble.api.identity.AuthorInfo.Status.UNKNOWN; import static org.briarproject.bramble.test.TestUtils.getAuthor; import static org.briarproject.bramble.test.TestUtils.getRandomId; @@ -103,18 +102,18 @@ public class ForumActivityTest { ThreadItemAdapter adapter = forumActivity.getAdapter(); assertNotNull(adapter); assertEquals(6, adapter.getItemCount()); - assertTrue(dummyData.get(0).getText() - .equals(adapter.getItemAt(0).getText())); - assertTrue(dummyData.get(1).getText() - .equals(adapter.getItemAt(1).getText())); - assertTrue(dummyData.get(2).getText() - .equals(adapter.getItemAt(2).getText())); - assertTrue(dummyData.get(3).getText() - .equals(adapter.getItemAt(3).getText())); - assertTrue(dummyData.get(4).getText() - .equals(adapter.getItemAt(4).getText())); - assertTrue(dummyData.get(5).getText() - .equals(adapter.getItemAt(5).getText())); + assertEquals(dummyData.get(0).getText(), + adapter.getItemAt(0).getText()); + assertEquals(dummyData.get(1).getText(), + adapter.getItemAt(1).getText()); + assertEquals(dummyData.get(2).getText(), + adapter.getItemAt(2).getText()); + assertEquals(dummyData.get(3).getText(), + adapter.getItemAt(3).getText()); + assertEquals(dummyData.get(4).getText(), + adapter.getItemAt(4).getText()); + assertEquals(dummyData.get(5).getText(), + adapter.getItemAt(5).getText()); } } diff --git a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java index 9d41d41a0..0cb1eb072 100644 --- a/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java +++ b/briar-android/src/test/java/org/briarproject/briar/android/login/PasswordFragmentTest.java @@ -15,7 +15,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import static java.util.Objects.requireNonNull; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.NONE; import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_STRONG; import static org.briarproject.bramble.api.crypto.PasswordStrengthEstimator.QUITE_WEAK; @@ -46,7 +49,7 @@ public class PasswordFragmentTest { MockitoAnnotations.initMocks(this); startFragment(passwordFragment, SetupActivity.class); - View v = passwordFragment.getView(); + View v = requireNonNull(passwordFragment.getView()); passwordEntry = v.findViewById(R.id.password_entry); passwordConfirmation = v.findViewById(R.id.password_confirm); passwordConfirmationWrapper = @@ -67,7 +70,7 @@ public class PasswordFragmentTest { passwordEntry.setText(safePass); passwordConfirmation.setText(safePass); // Confirm that the create account button is clickable - assertEquals(createAccountButton.isEnabled(), true); + assertTrue(createAccountButton.isEnabled()); createAccountButton.performClick(); // assert controller has been called properly @@ -98,7 +101,7 @@ public class PasswordFragmentTest { // Password mismatch passwordEntry.setText("really.safe.password"); passwordConfirmation.setText("really.safe.pass"); - assertEquals(createAccountButton.isEnabled(), false); + assertFalse(createAccountButton.isEnabled()); assertEquals(passwordConfirmationWrapper.getError(), passwordFragment.getString(R.string.passwords_do_not_match)); // Button enabled @@ -108,7 +111,7 @@ public class PasswordFragmentTest { assertNotEquals(passwordConfirmationWrapper.getError(), passwordFragment.getString(R.string.passwords_do_not_match)); // Passwords match, so button should be enabled - assertEquals(createAccountButton.isEnabled(), true); + assertTrue(createAccountButton.isEnabled()); } } diff --git a/briar-api/src/main/java/org/briarproject/briar/api/blog/MessageType.java b/briar-api/src/main/java/org/briarproject/briar/api/blog/MessageType.java index e717886b7..96854dc10 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/blog/MessageType.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/blog/MessageType.java @@ -7,7 +7,7 @@ public enum MessageType { WRAPPED_POST(2), WRAPPED_COMMENT(3); - int value; + final int value; MessageType(int value) { this.value = value; diff --git a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java index 80c25bd0b..90f79a56e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/privategroup/event/GroupMessageAddedEvent.java @@ -40,6 +40,7 @@ public class GroupMessageAddedEvent extends Event { return text; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean isLocal() { return local; } diff --git a/briar-core/src/main/java/org/briarproject/briar/client/MessageTreeImpl.java b/briar-core/src/main/java/org/briarproject/briar/client/MessageTreeImpl.java index 2854d197b..97f2796aa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/client/MessageTreeImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/client/MessageTreeImpl.java @@ -25,6 +25,7 @@ public class MessageTreeImpl private final List roots = new ArrayList<>(); private final List> unsortedLists = new ArrayList<>(); + @SuppressWarnings("UseCompareMethod") private Comparator comparator = (o1, o2) -> Long.valueOf(o1.getTimestamp()).compareTo(o2.getTimestamp()); @@ -71,6 +72,7 @@ public class MessageTreeImpl private void sortUnsorted() { for (List list : unsortedLists) { + //noinspection Java8ListSort sort(list, comparator); } unsortedLists.clear(); @@ -85,6 +87,7 @@ public class MessageTreeImpl } } + @SuppressWarnings("Java8ListSort") @Override public synchronized void setComparator(Comparator comparator) { this.comparator = comparator; diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java index 596314ff3..f3849fab0 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/FeedManagerImpl.java @@ -385,6 +385,7 @@ class FeedManagerImpl implements FeedManager, Client, EventListener, long lastEntryTime = feed.getLastEntryTime(); Transaction txn = db.startTransaction(false); try { + //noinspection Java8ListSort sort(entries, getEntryComparator()); for (SyndEntry entry : entries) { long entryTime; @@ -453,6 +454,7 @@ class FeedManagerImpl implements FeedManager, Client, EventListener, if (date == null) time = now; else time = Math.max(0, Math.min(date.getTime(), now)); String text = getPostText(b.toString()); + //noinspection TryWithIdenticalCatches try { // create and store post LocalAuthor localAuthor = feed.getLocalAuthor(); diff --git a/briar-core/src/main/java/org/briarproject/briar/feed/NoDns.java b/briar-core/src/main/java/org/briarproject/briar/feed/NoDns.java index 13f13eec5..0b9b8dcb0 100644 --- a/briar-core/src/main/java/org/briarproject/briar/feed/NoDns.java +++ b/briar-core/src/main/java/org/briarproject/briar/feed/NoDns.java @@ -1,21 +1,26 @@ package org.briarproject.briar.feed; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; +import javax.annotation.concurrent.Immutable; import javax.inject.Inject; import okhttp3.Dns; import static java.util.Collections.singletonList; +@Immutable +@NotNullByDefault class NoDns implements Dns { private static final byte[] UNSPECIFIED_ADDRESS = new byte[4]; @Inject - public NoDns() { + NoDns() { } @Override diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java index 53ad74861..532f58c2a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/AbstractProtocolEngine.java @@ -176,8 +176,7 @@ abstract class AbstractProtocolEngine boolean isInvalidDependency(@Nullable MessageId lastRemoteMessageId, @Nullable MessageId dependency) { if (dependency == null) return lastRemoteMessageId != null; - return lastRemoteMessageId == null || - !dependency.equals(lastRemoteMessageId); + return !dependency.equals(lastRemoteMessageId); } long getLocalTimestamp(long localTimestamp, long requestTimestamp) { diff --git a/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java index 855cce767..350cd6053 100644 --- a/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/introduction/ProtocolEngine.java @@ -1,6 +1,5 @@ package org.briarproject.briar.introduction; -import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -20,21 +19,21 @@ interface ProtocolEngine { throws DbException; S onRequestMessage(Transaction txn, S session, RequestMessage m) - throws DbException, FormatException; + throws DbException; S onAcceptMessage(Transaction txn, S session, AcceptMessage m) - throws DbException, FormatException; + throws DbException; S onDeclineMessage(Transaction txn, S session, DeclineMessage m) - throws DbException, FormatException; + throws DbException; S onAuthMessage(Transaction txn, S session, AuthMessage m) - throws DbException, FormatException; + throws DbException; S onActivateMessage(Transaction txn, S session, ActivateMessage m) - throws DbException, FormatException; + throws DbException; S onAbortMessage(Transaction txn, S session, AbortMessage m) - throws DbException, FormatException; + throws DbException; } diff --git a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java index aa018042e..8b4be1252 100644 --- a/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/privategroup/invitation/AbstractProtocolEngine.java @@ -90,10 +90,11 @@ abstract class AbstractProtocolEngine return group.getClientId().equals(PrivateGroupManager.CLIENT_ID); } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean isValidDependency(S session, @Nullable MessageId dependency) { MessageId expected = session.getLastRemoteMessageId(); if (dependency == null) return expected == null; - return expected != null && dependency.equals(expected); + return dependency.equals(expected); } void setPrivateGroupVisibility(Transaction txn, S session, diff --git a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java index b5741d031..ed3ebeab2 100644 --- a/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/sharing/ProtocolEngineImpl.java @@ -627,7 +627,7 @@ abstract class ProtocolEngineImpl @Nullable MessageId dependency) { MessageId expected = session.getLastRemoteMessageId(); if (dependency == null) return expected != null; - return expected == null || !dependency.equals(expected); + return !dependency.equals(expected); } private long getLocalTimestamp(Session session) { diff --git a/briar-core/src/main/java/org/briarproject/briar/util/HtmlUtils.java b/briar-core/src/main/java/org/briarproject/briar/util/HtmlUtils.java index bc20e8599..454d2fbb9 100644 --- a/briar-core/src/main/java/org/briarproject/briar/util/HtmlUtils.java +++ b/briar-core/src/main/java/org/briarproject/briar/util/HtmlUtils.java @@ -7,8 +7,8 @@ import org.jsoup.safety.Whitelist; @NotNullByDefault public class HtmlUtils { - public static Whitelist STRIP_ALL = Whitelist.none(); - public static Whitelist ARTICLE = + public static final Whitelist STRIP_ALL = Whitelist.none(); + public static final Whitelist ARTICLE = Whitelist.basic().addTags("h1", "h2", "h3", "h4", "h5", "h6"); public static String clean(String s, Whitelist list) { diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java index 5416ad013..59ea981c6 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/InviteeProtocolEngineTest.java @@ -31,6 +31,7 @@ import static org.briarproject.briar.privategroup.invitation.InviteeState.LEFT; import static org.briarproject.briar.privategroup.invitation.InviteeState.START; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -53,43 +54,43 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { // onInviteAction @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromStart() throws Exception { + public void testOnInviteActionFromStart() { engine.onInviteAction(txn, getDefaultSession(START), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromLeft() throws Exception { + public void testOnInviteActionFromLeft() { engine.onInviteAction(txn, getDefaultSession(ACCEPTED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromInvited() throws Exception { + public void testOnInviteActionFromInvited() { engine.onInviteAction(txn, getDefaultSession(INVITED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromDissolved() throws Exception { + public void testOnInviteActionFromDissolved() { engine.onInviteAction(txn, getDefaultSession(DISSOLVED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromAccepted() throws Exception { + public void testOnInviteActionFromAccepted() { engine.onInviteAction(txn, getDefaultSession(ACCEPTED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromJoined() throws Exception { + public void testOnInviteActionFromJoined() { engine.onInviteAction(txn, getDefaultSession(JOINED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromError() throws Exception { + public void testOnInviteActionFromError() { engine.onInviteAction(txn, getDefaultSession(ERROR), null, messageTimestamp, signature); } @@ -263,43 +264,43 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { // onMemberAddedAction @Test - public void testOnMemberAddedFromStart() throws Exception { + public void testOnMemberAddedFromStart() { InviteeSession session = getDefaultSession(START); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromInvited() throws Exception { + public void testOnMemberAddedFromInvited() { InviteeSession session = getDefaultSession(INVITED); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromAccepted() throws Exception { + public void testOnMemberAddedFromAccepted() { InviteeSession session = getDefaultSession(ACCEPTED); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromJoined() throws Exception { + public void testOnMemberAddedFromJoined() { InviteeSession session = getDefaultSession(JOINED); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromLeft() throws Exception { + public void testOnMemberAddedFromLeft() { InviteeSession session = getDefaultSession(LEFT); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromDissolved() throws Exception { + public void testOnMemberAddedFromDissolved() { InviteeSession session = getDefaultSession(DISSOLVED); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @Test - public void testOnMemberAddedFromError() throws Exception { + public void testOnMemberAddedFromError() { InviteeSession session = getDefaultSession(ERROR); assertEquals(session, engine.onMemberAddedAction(txn, session)); } @@ -510,8 +511,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { session.getInviteTimestamp()); assertNotNull(session.getLastRemoteMessageId()); assertNotNull(invalidJoinMessage.getPreviousMessageId()); - assertFalse(session.getLastRemoteMessageId() - .equals(invalidJoinMessage.getPreviousMessageId())); + assertNotEquals(session.getLastRemoteMessageId(), + invalidJoinMessage.getPreviousMessageId()); expectAbortWhenSubscribedToGroup(); InviteeSession newSession = @@ -530,8 +531,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { session.getInviteTimestamp()); assertNotNull(session.getLastRemoteMessageId()); assertNotNull(properJoinMessage.getPreviousMessageId()); - assertTrue(session.getLastRemoteMessageId() - .equals(properJoinMessage.getPreviousMessageId())); + assertEquals(session.getLastRemoteMessageId(), + properJoinMessage.getPreviousMessageId()); expectSetPrivateGroupVisibility(SHARED); @@ -646,8 +647,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { session.getInviteTimestamp()); assertNotNull(session.getLastRemoteMessageId()); assertNotNull(properLeaveMessage.getPreviousMessageId()); - assertTrue(session.getLastRemoteMessageId() - .equals(properLeaveMessage.getPreviousMessageId())); + assertEquals(session.getLastRemoteMessageId(), + properLeaveMessage.getPreviousMessageId()); expectMarkInvitesUnavailableToAnswer(); InviteeSession newSession = @@ -676,8 +677,8 @@ public class InviteeProtocolEngineTest extends AbstractProtocolEngineTest { session.getInviteTimestamp()); assertNotNull(session.getLastRemoteMessageId()); assertNotNull(properLeaveMessage.getPreviousMessageId()); - assertTrue(session.getLastRemoteMessageId() - .equals(properLeaveMessage.getPreviousMessageId())); + assertEquals(session.getLastRemoteMessageId(), + properLeaveMessage.getPreviousMessageId()); expectMarkInvitesUnavailableToAnswer(); InviteeSession newSession = diff --git a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java index 05c0920c5..32044a2fa 100644 --- a/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/privategroup/invitation/PeerProtocolEngineTest.java @@ -17,9 +17,8 @@ import static org.briarproject.briar.privategroup.invitation.PeerState.LOCAL_LEF import static org.briarproject.briar.privategroup.invitation.PeerState.NEITHER_JOINED; import static org.briarproject.briar.privategroup.invitation.PeerState.START; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { @@ -37,43 +36,43 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { // onInviteAction @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromStart() throws Exception { + public void testOnInviteActionFromStart() { engine.onInviteAction(txn, getDefaultSession(START), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromAwaitMember() throws Exception { + public void testOnInviteActionFromAwaitMember() { engine.onInviteAction(txn, getDefaultSession(AWAIT_MEMBER), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromNeitherJoined() throws Exception { + public void testOnInviteActionFromNeitherJoined() { engine.onInviteAction(txn, getDefaultSession(NEITHER_JOINED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromLocalJoined() throws Exception { + public void testOnInviteActionFromLocalJoined() { engine.onInviteAction(txn, getDefaultSession(LOCAL_JOINED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromBothJoined() throws Exception { + public void testOnInviteActionFromBothJoined() { engine.onInviteAction(txn, getDefaultSession(BOTH_JOINED), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromLocalLeft() throws Exception { + public void testOnInviteActionFromLocalLeft() { engine.onInviteAction(txn, getDefaultSession(LOCAL_LEFT), null, messageTimestamp, signature); } @Test(expected = UnsupportedOperationException.class) - public void testOnInviteActionFromError() throws Exception { + public void testOnInviteActionFromError() { engine.onInviteAction(txn, getDefaultSession(ERROR), null, messageTimestamp, signature); } @@ -365,8 +364,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(START); assertNotNull(invalidJoinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidJoinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidJoinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenNotSubscribedToGroup(); PeerSession newSession = @@ -379,8 +378,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(START); assertNotNull(joinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(joinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(joinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); PeerSession newSession = engine.onJoinMessage(txn, session, joinMessage); @@ -403,8 +402,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(NEITHER_JOINED); assertNotNull(invalidJoinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidJoinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidJoinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenNotSubscribedToGroup(); PeerSession newSession = @@ -417,8 +416,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(NEITHER_JOINED); assertNotNull(joinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(joinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(joinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); JoinMessage myJoinMessage = new JoinMessage(messageId, contactGroupId, privateGroupId, messageTimestamp, lastRemoteMessageId); @@ -445,8 +444,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(LOCAL_JOINED); assertNotNull(invalidJoinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidJoinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidJoinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenNotSubscribedToGroup(); PeerSession newSession = @@ -459,8 +458,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(LOCAL_JOINED); assertNotNull(joinMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(joinMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(joinMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectSetPrivateGroupVisibility(SHARED); expectRelationshipRevealed(false); @@ -524,8 +523,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(AWAIT_MEMBER); assertNotNull(invalidLeaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidLeaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidLeaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenSubscribedToGroup(); PeerSession newSession = @@ -538,8 +537,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(AWAIT_MEMBER); assertNotNull(leaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(leaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(leaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); PeerSession newSession = engine.onLeaveMessage(txn, session, leaveMessage); @@ -562,8 +561,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(LOCAL_LEFT); assertNotNull(invalidLeaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidLeaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidLeaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenSubscribedToGroup(); PeerSession newSession = @@ -576,8 +575,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(LOCAL_LEFT); assertNotNull(leaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(leaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(leaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); PeerSession newSession = engine.onLeaveMessage(txn, session, leaveMessage); @@ -600,8 +599,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(BOTH_JOINED); assertNotNull(invalidLeaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertFalse(invalidLeaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertNotEquals(invalidLeaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectAbortWhenSubscribedToGroup(); PeerSession newSession = @@ -614,8 +613,8 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { PeerSession session = getDefaultSession(BOTH_JOINED); assertNotNull(leaveMessage.getPreviousMessageId()); assertNotNull(session.getLastRemoteMessageId()); - assertTrue(leaveMessage.getPreviousMessageId() - .equals(session.getLastRemoteMessageId())); + assertEquals(leaveMessage.getPreviousMessageId(), + session.getLastRemoteMessageId()); expectSetPrivateGroupVisibility(VISIBLE); // FIXME correct? PeerSession newSession = @@ -685,7 +684,7 @@ public class PeerProtocolEngineTest extends AbstractProtocolEngineTest { } private void assertSessionAborted(PeerSession oldSession, - PeerSession newSession) throws Exception { + PeerSession newSession) { assertEquals(ERROR, newSession.getState()); assertSessionRecordedSentMessage(newSession); assertSessionConstantsUnchanged(oldSession, newSession); diff --git a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java index a81abb1ac..24a93da50 100644 --- a/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java +++ b/briar-core/src/test/java/org/briarproject/briar/test/BriarIntegrationTest.java @@ -148,9 +148,9 @@ public abstract class BriarIntegrationTest