From 7c5d5f6b0d82942195ae12fb987c5dfd8eabaff5 Mon Sep 17 00:00:00 2001 From: Christopher O'Connell Date: Sat, 19 Oct 2019 13:04:44 -0400 Subject: [PATCH] 1010: Fixed all of the blocking and critical Sonarcloud errors (#1020) * 1011: Added SuppressWarnings for SonarCloud errors All of these files are causing SonarCloud to report the following error: Loops should not be infinite Since these instances all require an infinite loop that will never end, these warnings should be disabled so that SonarCloud no longer reports them as error. The rule is: squid:S2189 * 1011: Made all of the randoms static and final According to SonarCloud rule: "Random" objects should be reused, randoms should not be recreated. This commit has taken all of the Randoms and made them constant variables in the files that are using them. --- .../src/main/java/com/iluwatar/circuitbreaker/App.java | 1 + commander/src/main/java/com/iluwatar/commander/Order.java | 4 ++-- commander/src/main/java/com/iluwatar/commander/Retry.java | 5 +++-- commander/src/main/java/com/iluwatar/commander/Service.java | 4 ++-- .../java/com/iluwatar/hexagonal/sampledata/SampleData.java | 4 ++-- .../java/com/iluwatar/leaderelection/AbstractInstance.java | 1 + .../java/com/iluwatar/masterworker/ArrayUtilityMethods.java | 5 +++-- .../src/main/java/com/iluwatar/priority/queue/Worker.java | 1 + .../main/java/com/iluwatar/producer/consumer/Producer.java | 5 +++-- .../java/com/iluwatar/retry/RetryExponentialBackoff.java | 4 ++-- .../src/main/java/com/iluwatar/spatialpartition/Bubble.java | 6 +++--- .../src/main/java/com/iluwatar/typeobject/CellPool.java | 4 ++-- 12 files changed, 25 insertions(+), 19 deletions(-) diff --git a/circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/App.java b/circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/App.java index d1d361b16..2520b64ce 100644 --- a/circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/App.java +++ b/circuit-breaker/src/main/java/com/iluwatar/circuitbreaker/App.java @@ -66,6 +66,7 @@ public class App { * * @param args command line args */ + @SuppressWarnings("squid:S2189") public static void main(String[] args) { //Create an object of monitoring service which makes both local and remote calls var obj = new MonitoringService(); diff --git a/commander/src/main/java/com/iluwatar/commander/Order.java b/commander/src/main/java/com/iluwatar/commander/Order.java index 9a454a5f7..959ebd93c 100644 --- a/commander/src/main/java/com/iluwatar/commander/Order.java +++ b/commander/src/main/java/com/iluwatar/commander/Order.java @@ -44,6 +44,7 @@ public class Order { //can store all transactions ids also public final String id; final float price; final long createdTime; + private static final Random RANDOM = new Random(); private static final String ALL_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; private static final Hashtable USED_IDS = new Hashtable(); PaymentStatus paid; @@ -70,9 +71,8 @@ public class Order { //can store all transactions ids also String createUniqueId() { StringBuilder random = new StringBuilder(); - Random rand = new Random(); while (random.length() < 12) { // length of the random string. - int index = (int) (rand.nextFloat() * ALL_CHARS.length()); + int index = (int) (RANDOM.nextFloat() * ALL_CHARS.length()); random.append(ALL_CHARS.charAt(index)); } return random.toString(); diff --git a/commander/src/main/java/com/iluwatar/commander/Retry.java b/commander/src/main/java/com/iluwatar/commander/Retry.java index d4da5e8da..e9c9fb1f6 100644 --- a/commander/src/main/java/com/iluwatar/commander/Retry.java +++ b/commander/src/main/java/com/iluwatar/commander/Retry.java @@ -51,6 +51,8 @@ public class Retry { public interface HandleErrorIssue { void handleIssue(T obj, Exception e); } + + private static final Random RANDOM = new Random(); private final Operation op; private final HandleErrorIssue handleError; @@ -89,8 +91,7 @@ public class Retry { return; //return here...dont go further } try { - Random rand = new Random(); - long testDelay = (long) Math.pow(2, this.attempts.intValue()) * 1000 + rand.nextInt(1000); + long testDelay = (long) Math.pow(2, this.attempts.intValue()) * 1000 + RANDOM.nextInt(1000); long delay = testDelay < this.maxDelay ? testDelay : maxDelay; Thread.sleep(delay); } catch (InterruptedException f) { diff --git a/commander/src/main/java/com/iluwatar/commander/Service.java b/commander/src/main/java/com/iluwatar/commander/Service.java index 8c64d1d18..259b8c6cc 100644 --- a/commander/src/main/java/com/iluwatar/commander/Service.java +++ b/commander/src/main/java/com/iluwatar/commander/Service.java @@ -42,6 +42,7 @@ public abstract class Service { protected final Database database; public ArrayList exceptionsList; + private static final Random RANDOM = new Random(); private static final String ALL_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; private static final Hashtable USED_IDS = new Hashtable(); @@ -55,9 +56,8 @@ public abstract class Service { protected String generateId() { StringBuilder random = new StringBuilder(); - Random rand = new Random(); while (random.length() < 12) { // length of the random string. - int index = (int) (rand.nextFloat() * ALL_CHARS.length()); + int index = (int) (RANDOM.nextFloat() * ALL_CHARS.length()); random.append(ALL_CHARS.charAt(index)); } String id = random.toString(); diff --git a/hexagonal/src/main/java/com/iluwatar/hexagonal/sampledata/SampleData.java b/hexagonal/src/main/java/com/iluwatar/hexagonal/sampledata/SampleData.java index 3dddb6d9b..bc4e963e1 100644 --- a/hexagonal/src/main/java/com/iluwatar/hexagonal/sampledata/SampleData.java +++ b/hexagonal/src/main/java/com/iluwatar/hexagonal/sampledata/SampleData.java @@ -40,6 +40,7 @@ import java.util.Random; public class SampleData { private static final List PLAYERS; + private static final Random RANDOM = new Random(); static { PLAYERS = new ArrayList<>(); @@ -83,10 +84,9 @@ public class SampleData { PLAYERS.add(new PlayerDetails("xavier@google.com", "143-947", "+375245")); PLAYERS.add(new PlayerDetails("harriet@google.com", "842-404", "+131243252")); InMemoryBank wireTransfers = new InMemoryBank(); - Random random = new Random(); for (PlayerDetails player : PLAYERS) { wireTransfers.setFunds(player.getBankAccount(), - random.nextInt(LotteryConstants.PLAYER_MAX_BALANCE)); + RANDOM.nextInt(LotteryConstants.PLAYER_MAX_BALANCE)); } } diff --git a/leader-election/src/main/java/com/iluwatar/leaderelection/AbstractInstance.java b/leader-election/src/main/java/com/iluwatar/leaderelection/AbstractInstance.java index 556d725da..abece1edc 100644 --- a/leader-election/src/main/java/com/iluwatar/leaderelection/AbstractInstance.java +++ b/leader-election/src/main/java/com/iluwatar/leaderelection/AbstractInstance.java @@ -58,6 +58,7 @@ public abstract class AbstractInstance implements Instance, Runnable { * The instance will execute the message in its message queue periodically once it is alive. */ @Override + @SuppressWarnings("squid:S2189") public void run() { while (true) { if (!this.messageQueue.isEmpty()) { diff --git a/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayUtilityMethods.java b/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayUtilityMethods.java index fb27e5b48..576ffb6bf 100644 --- a/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayUtilityMethods.java +++ b/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayUtilityMethods.java @@ -34,6 +34,8 @@ import java.util.Random; public class ArrayUtilityMethods { private static final Logger LOGGER = LoggerFactory.getLogger(ArrayUtilityMethods.class); + + private static final Random RANDOM = new Random(); /** * Method arraysSame compares 2 arrays @param a1 and @param a2 * and @return whether their values are equal (boolean). @@ -86,11 +88,10 @@ public class ArrayUtilityMethods { public static int[][] createRandomIntMatrix(int rows, int columns) { int[][] matrix = new int[rows][columns]; - Random rand = new Random(); for (int i = 0; i < rows; i++) { for (int j = 0; j < columns; j++) { //filling cells in matrix - matrix[i][j] = rand.nextInt(10); + matrix[i][j] = RANDOM.nextInt(10); } } return matrix; diff --git a/priority-queue/src/main/java/com/iluwatar/priority/queue/Worker.java b/priority-queue/src/main/java/com/iluwatar/priority/queue/Worker.java index dbccd5d66..e37feb679 100644 --- a/priority-queue/src/main/java/com/iluwatar/priority/queue/Worker.java +++ b/priority-queue/src/main/java/com/iluwatar/priority/queue/Worker.java @@ -41,6 +41,7 @@ public class Worker { /** * Keep checking queue for message */ + @SuppressWarnings("squid:S2189") public void run() throws Exception { while (true) { Message message = queueManager.receiveMessage(); diff --git a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java index 4cc1a6567..3681c017d 100644 --- a/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java +++ b/producer-consumer/src/main/java/com/iluwatar/producer/consumer/Producer.java @@ -29,6 +29,8 @@ import java.util.Random; * to queue */ public class Producer { + + private static final Random RANDOM = new Random(); private final ItemQueue queue; @@ -48,7 +50,6 @@ public class Producer { Item item = new Item(name, itemId++); queue.put(item); - Random random = new Random(); - Thread.sleep(random.nextInt(2000)); + Thread.sleep(RANDOM.nextInt(2000)); } } diff --git a/retry/src/main/java/com/iluwatar/retry/RetryExponentialBackoff.java b/retry/src/main/java/com/iluwatar/retry/RetryExponentialBackoff.java index 551914dad..b7024c918 100644 --- a/retry/src/main/java/com/iluwatar/retry/RetryExponentialBackoff.java +++ b/retry/src/main/java/com/iluwatar/retry/RetryExponentialBackoff.java @@ -37,6 +37,7 @@ import java.util.function.Predicate; * @param the remote op's return type */ public final class RetryExponentialBackoff implements BusinessOperation { + private static final Random RANDOM = new Random(); private final BusinessOperation op; private final int maxAttempts; private final long maxDelay; @@ -98,8 +99,7 @@ public final class RetryExponentialBackoff implements BusinessOperation { } try { - Random rand = new Random(); - long testDelay = (long) Math.pow(2, this.attempts()) * 1000 + rand.nextInt(1000); + long testDelay = (long) Math.pow(2, this.attempts()) * 1000 + RANDOM.nextInt(1000); long delay = testDelay < this.maxDelay ? testDelay : maxDelay; Thread.sleep(delay); } catch (InterruptedException f) { diff --git a/spatial-partition/src/main/java/com/iluwatar/spatialpartition/Bubble.java b/spatial-partition/src/main/java/com/iluwatar/spatialpartition/Bubble.java index 01faa8371..8147c4ea3 100644 --- a/spatial-partition/src/main/java/com/iluwatar/spatialpartition/Bubble.java +++ b/spatial-partition/src/main/java/com/iluwatar/spatialpartition/Bubble.java @@ -36,6 +36,7 @@ import java.util.Random; public class Bubble extends Point { private static final Logger LOGGER = LoggerFactory.getLogger(Bubble.class); + private static final Random RANDOM = new Random(); final int radius; @@ -45,10 +46,9 @@ public class Bubble extends Point { } void move() { - Random rand = new Random(); //moves by 1 unit in either direction - this.x += rand.nextInt(3) - 1; - this.y += rand.nextInt(3) - 1; + this.x += RANDOM.nextInt(3) - 1; + this.y += RANDOM.nextInt(3) - 1; } boolean touches(Bubble b) { diff --git a/typeobjectpattern/src/main/java/com/iluwatar/typeobject/CellPool.java b/typeobjectpattern/src/main/java/com/iluwatar/typeobject/CellPool.java index 9e855b4d6..e04cce4f0 100644 --- a/typeobjectpattern/src/main/java/com/iluwatar/typeobject/CellPool.java +++ b/typeobjectpattern/src/main/java/com/iluwatar/typeobject/CellPool.java @@ -37,6 +37,7 @@ import com.iluwatar.typeobject.Candy.Type; */ public class CellPool { + private static final Random RANDOM = new Random(); ArrayList pool; int pointer; Candy[] randomCode; @@ -57,8 +58,7 @@ public class CellPool { } for (int i = 0; i < num; i++) { Cell c = new Cell(); - Random rand = new Random(); - c.candy = randomCode[rand.nextInt(randomCode.length)]; + c.candy = randomCode[RANDOM.nextInt(randomCode.length)]; this.pool.add(c); } this.pointer = num - 1;