From 816a5b89c5ddb8e295b8e8e46075da3cb694b2a7 Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <carlo@zancanaro.id.au>
Date: Mon, 1 Jun 2015 13:10:49 +1000
Subject: Fix up static analysis issues (FindBugs and Intellij IDEA analysis)

---
 .../java/au/id/zancanaro/javacheck/Generator.java  |  4 +---
 .../java/au/id/zancanaro/javacheck/Generators.java |  8 +++----
 .../java/au/id/zancanaro/javacheck/Iterators.java  | 17 ++++++++-------
 .../java/au/id/zancanaro/javacheck/RoseTree.java   | 11 +++++-----
 .../au/id/zancanaro/javacheck/ShrinkResult.java    |  4 +++-
 .../id/zancanaro/javacheck/junit/Properties.java   | 24 ++++++++++-----------
 .../zancanaro/javacheck/junit/PropertyError.java   | 25 +++++++++-------------
 7 files changed, 44 insertions(+), 49 deletions(-)

(limited to 'src/main/java/au/id')

diff --git a/src/main/java/au/id/zancanaro/javacheck/Generator.java b/src/main/java/au/id/zancanaro/javacheck/Generator.java
index 076f7c2..2d2e556 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Generator.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Generator.java
@@ -40,8 +40,6 @@ public interface Generator<T> {
     }
 
     default <R> Generator<R> flatMap(Function<T, Generator<R>> action) {
-        return (random, size) -> {
-            return RoseTree.join(this.generate(random, size).map(action).map(g -> g.generate(random, size)));
-        };
+        return (random, size) -> RoseTree.join(this.generate(random, size).map(action).map(g -> g.generate(random, size)));
     }
 }
diff --git a/src/main/java/au/id/zancanaro/javacheck/Generators.java b/src/main/java/au/id/zancanaro/javacheck/Generators.java
index 08b9989..bf1b1b3 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Generators.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Generators.java
@@ -15,13 +15,13 @@ public final class Generators {
         return (random, size) -> makeGenerator.apply(size).generate(random, size);
     }
 
-    public static <T> Generator<T> suchThat(Generator<T> gen, Predicate<T> pred) {
+    public static <T> Generator<T> suchThat(Generator<T> gen, Predicate<T> predicate) {
         return (random, size) -> {
             RoseTree<T> result = gen.generate(random, size);
-            if (pred.test(result.getValue())) {
-                return result.filter(pred);
+            if (predicate.test(result.getValue())) {
+                return result.filter(predicate);
             } else {
-                return suchThat(gen, pred).generate(random, size);
+                return suchThat(gen, predicate).generate(random, size);
             }
         };
     }
diff --git a/src/main/java/au/id/zancanaro/javacheck/Iterators.java b/src/main/java/au/id/zancanaro/javacheck/Iterators.java
index 347a927..33652b2 100644
--- a/src/main/java/au/id/zancanaro/javacheck/Iterators.java
+++ b/src/main/java/au/id/zancanaro/javacheck/Iterators.java
@@ -3,6 +3,7 @@ package au.id.zancanaro.javacheck;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.NoSuchElementException;
 import java.util.function.Function;
 import java.util.function.Predicate;
 
@@ -11,7 +12,7 @@ public final class Iterators {
     }
 
     public static <T> RangeIterator<T> rangeIterator(int countTo, Function<Integer,T> fn) {
-        return new RangeIterator<T>(countTo, fn);
+        return new RangeIterator<>(countTo, fn);
     }
 
     private static class RangeIterator<T> implements Iterator<T> {
@@ -39,9 +40,9 @@ public final class Iterators {
         return new FlattenIterator<>(iterators);
     }
     public static class FlattenIterator<T> implements Iterator<T> {
-        private Iterator<T> current;
+        private final Iterator<Iterator<T>> iterators;
 
-        private Iterator<Iterator<T>> iterators;
+        private Iterator<T> current;
 
         public FlattenIterator(Iterator<Iterator<T>> iterators) {
             this.current = Iterators.emptyIterator();
@@ -105,7 +106,7 @@ public final class Iterators {
         }
         @Override
         public T next() {
-            return null;
+            throw new NoSuchElementException("Empty iterators contain no elements");
         }
 
     }
@@ -134,8 +135,8 @@ public final class Iterators {
 
     }
 
-    public static <T> FilteringIterator<T> filteringIterator(Predicate<T> pred, Iterator<T> iterator) {
-        return new FilteringIterator<>(pred, iterator);
+    public static <T> FilteringIterator<T> filteringIterator(Predicate<T> predicate, Iterator<T> iterator) {
+        return new FilteringIterator<>(predicate, iterator);
     }
 
     private static class FilteringIterator<T> implements Iterator<T> {
@@ -143,8 +144,8 @@ public final class Iterators {
         private final Iterator<T> iterator;
         private List<T> nextValue;
 
-        public FilteringIterator(Predicate<T> pred, Iterator<T> iterator) {
-            this.predicate = pred;
+        public FilteringIterator(Predicate<T> predicate, Iterator<T> iterator) {
+            this.predicate = predicate;
             this.iterator = iterator;
             this.nextValue = null;
         }
diff --git a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
index 86952da..5a54d6f 100644
--- a/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
+++ b/src/main/java/au/id/zancanaro/javacheck/RoseTree.java
@@ -36,8 +36,9 @@ public class RoseTree<T> {
     }
 
     private static <T> Iterator<RoseTree<T>[]> permutations(RoseTree<T>[] trees) {
-        return Iterators.flatten(Iterators.rangeIterator(trees.length, index ->
-                        Iterators.mappingIterator(child -> {
+        return Iterators.flatten(
+                Iterators.rangeIterator(trees.length,
+                        index -> Iterators.mappingIterator(child -> {
                             @SuppressWarnings("unchecked")
                             RoseTree<T>[] result = (RoseTree<T>[]) new RoseTree[trees.length];
                             for (int i = 0; i < trees.length; ++i) {
@@ -45,14 +46,14 @@ public class RoseTree<T> {
                             }
                             return result;
                         }, trees[index].getChildren())
-        ));
+                ));
     }
 
     public static <T, R> RoseTree<R> zip(Function<List<T>, R> fn, RoseTree<T>[] trees) {
         @SuppressWarnings("unchecked")
         List<T> heads = new ArrayList(trees.length);
-        for (int i = 0; i < trees.length; ++i) {
-            heads.add(trees[i].getValue());
+        for (RoseTree<T> tree : trees) {
+            heads.add(tree.getValue());
         }
         return new RoseTree<>(
                 fn.apply(heads),
diff --git a/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java b/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
index e1463f0..8776f4e 100644
--- a/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
+++ b/src/main/java/au/id/zancanaro/javacheck/ShrinkResult.java
@@ -1,11 +1,13 @@
 package au.id.zancanaro.javacheck;
 
+import java.util.Arrays;
+
 public class ShrinkResult {
     public final Object[] args;
     public final Throwable thrown;
 
     public ShrinkResult(Object[] args, Throwable thrown) {
-        this.args = args;
+        this.args = Arrays.copyOf(args, args.length);
         this.thrown = thrown;
     }
 }
diff --git a/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java b/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
index 0507413..64bd9ab 100644
--- a/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
+++ b/src/main/java/au/id/zancanaro/javacheck/junit/Properties.java
@@ -16,12 +16,11 @@ import org.junit.runners.model.TestClass;
 import java.lang.reflect.*;
 import java.util.*;
 
-
 public class Properties extends BlockJUnit4ClassRunner {
     private final Map<Type, Generator<?>> generators = new HashMap<>();
 
-    public Properties(Class<?> klass) throws InitializationError {
-        super(klass);
+    public Properties(Class<?> classObject) throws InitializationError {
+        super(classObject);
     }
 
     @Override
@@ -43,11 +42,11 @@ public class Properties extends BlockJUnit4ClassRunner {
             if (!(type instanceof ParameterizedType)) {
                 continue;
             }
-            ParameterizedType ptype = (ParameterizedType) type;
-            if (!(ptype.getRawType() instanceof Class)) {
+            ParameterizedType parameterizedType = (ParameterizedType) type;
+            if (!(parameterizedType.getRawType() instanceof Class)) {
                 continue;
             }
-            Class<?> c = (Class) ptype.getRawType();
+            Class<?> c = (Class) parameterizedType.getRawType();
             if (c != Generator.class) {
                 continue;
             }
@@ -61,7 +60,7 @@ public class Properties extends BlockJUnit4ClassRunner {
                 error = true;
             }
             if (!error) {
-                result.add(ptype.getActualTypeArguments()[0]);
+                result.add(parameterizedType.getActualTypeArguments()[0]);
             }
         }
         return result;
@@ -105,16 +104,16 @@ public class Properties extends BlockJUnit4ClassRunner {
                 if (!(type instanceof ParameterizedType)) {
                     continue;
                 }
-                ParameterizedType ptype = (ParameterizedType) type;
-                if (!(ptype.getRawType() instanceof Class)) {
+                ParameterizedType parameterizedType = (ParameterizedType) type;
+                if (!(parameterizedType.getRawType() instanceof Class)) {
                     continue;
                 }
-                Class<?> c = (Class) ptype.getRawType();
+                Class<?> c = (Class) parameterizedType.getRawType();
                 if (c != Generator.class) {
                     continue;
                 }
                 try {
-                    Type target = ptype.getActualTypeArguments()[0];
+                    Type target = parameterizedType.getActualTypeArguments()[0];
                     @SuppressWarnings("unchecked")
                     Generator<Object> generator = (Generator<Object>) field.get(null);
                     generators.put(target, generator);
@@ -122,7 +121,7 @@ public class Properties extends BlockJUnit4ClassRunner {
                         generators.put(rawTypes.get(target), generator);
                     }
                 } catch (IllegalAccessException ex) {
-
+                    throw new RuntimeException(ex);
                 }
             }
         }
@@ -213,7 +212,6 @@ public class Properties extends BlockJUnit4ClassRunner {
                         if (assumptionsViolated++ == 50) {
                             throw new Error("Violated 50 assumptions in a row: failing test");
                         }
-                        ;
                     } catch (Throwable ex) {
 //                        tree.print(new OutputStreamWriter(System.out), Arrays::toString);
                         throw new PropertyError(method.getName(), seed, shrink(tree, ex));
diff --git a/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java b/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
index 138c47f..2cd1325 100644
--- a/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
+++ b/src/main/java/au/id/zancanaro/javacheck/junit/PropertyError.java
@@ -3,35 +3,30 @@ package au.id.zancanaro.javacheck.junit;
 import au.id.zancanaro.javacheck.ShrinkResult;
 
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Iterator;
 
 public class PropertyError extends AssertionError {
     public PropertyError(String methodName, long seed, ShrinkResult shrunk) {
         super(shrunk.thrown.getMessage() == null ?
-                String.format("%s(%s)\n\tSeed: %s",
-                        methodName, join(", ", shrunk.args),
+                String.format("%s(%s)%n\tSeed: %s",
+                        methodName, joinArgs(shrunk.args),
                         seed):
-                String.format("%s(%s)\n\tSeed: %s\n%s",
-                        methodName, join(", ", shrunk.args),
+                String.format("%s(%s)%n\tSeed: %s%n%s",
+                        methodName, joinArgs(shrunk.args),
                         seed,
                         shrunk.thrown.getMessage()));
         initCause(shrunk.thrown);
     }
 
 
-    public static String join(String delimiter, Object... params) {
-        return join(delimiter, Arrays.asList(params));
-    }
-
-    public static String join(String delimiter, Collection<Object> values) {
+    public static String joinArgs(Object... params) {
         StringBuilder sb = new StringBuilder();
-        Iterator<Object> iter = values.iterator();
-        while (iter.hasNext()) {
-            Object next = iter.next();
+        Iterator<Object> iterator = Arrays.asList(params).iterator();
+        while (iterator.hasNext()) {
+            Object next = iterator.next();
             sb.append(stringValueOf(next));
-            if (iter.hasNext()) {
-                sb.append(delimiter);
+            if (iterator.hasNext()) {
+                sb.append(", ");
             }
         }
         return sb.toString();
-- 
cgit v1.2.3