From f84f49bf60aa62a8cae0b6c7bbf7d9a2aae496ed Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 09:37:11 +0100 Subject: [PATCH 01/14] Add Error-Prone annotation processor --- pom.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pom.xml b/pom.xml index 034f6cb4..50d8b1f2 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,7 @@ 2.11.3 4.13.1 5.7.0 + 2.4.0 @@ -157,7 +158,24 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + + + + + + + com.google.errorprone + error_prone_core + ${errorProneVersion} + + + + org.apache.maven.plugins maven-failsafe-plugin From efea76c95ec315c6783e1188e1855d52bf951820 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 09:43:54 +0100 Subject: [PATCH 02/14] Enable ErrorProne --- pom.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 50d8b1f2..cb99a095 100644 --- a/pom.xml +++ b/pom.xml @@ -165,9 +165,11 @@ maven-compiler-plugin - + -XDcompilePolicy=simple + -Xplugin:ErrorProne + com.google.errorprone error_prone_core From 612c8fec8bc26467fe5b1159961a12d99fd3c2c0 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 12:23:22 +0100 Subject: [PATCH 03/14] Suppress warnings about StreamToString --- .../concurrency/completablefuture/stackoverflow/So61957439.java | 1 + 1 file changed, 1 insertion(+) diff --git a/concurrency/src/main/java/io/mincong/concurrency/completablefuture/stackoverflow/So61957439.java b/concurrency/src/main/java/io/mincong/concurrency/completablefuture/stackoverflow/So61957439.java index 05761377..06aed3a3 100644 --- a/concurrency/src/main/java/io/mincong/concurrency/completablefuture/stackoverflow/So61957439.java +++ b/concurrency/src/main/java/io/mincong/concurrency/completablefuture/stackoverflow/So61957439.java @@ -32,6 +32,7 @@ * 08:20:10.165436 - [Result{name='C3'}, Result{name='C1'}, Result{name='C2'}] * */ +@SuppressWarnings("StreamToString") public class So61957439 { public static void main(String[] args) throws Exception { From c88830f3047c1996e3d183f2ccacccb57641fb73 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 12:32:24 +0100 Subject: [PATCH 04/14] Fix ReturnValueIgnored --- date/src/test/java/io/mincongh/date/so42364818/DateTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/date/src/test/java/io/mincongh/date/so42364818/DateTest.java b/date/src/test/java/io/mincongh/date/so42364818/DateTest.java index 80035fcd..c6d1383e 100644 --- a/date/src/test/java/io/mincongh/date/so42364818/DateTest.java +++ b/date/src/test/java/io/mincongh/date/so42364818/DateTest.java @@ -20,7 +20,6 @@ void testDate() throws Exception { assertEquals(45, d.getMinute()); assertEquals(30, d.getSecond()); - d.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME); assertEquals("2009-06-15T13:45:30", d.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); } } From 089c49e419dc079cfde37f02c97d90edb1717130 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 12:39:15 +0100 Subject: [PATCH 05/14] Suppress warnings about EqualsHashCode --- .../java/io/mincongh/hashcode/bad/AthleteOnlyOverrideEquals.java | 1 + .../main/java/io/mincongh/hashcode/bad/PhoneNumberNoHash.java | 1 + 2 files changed, 2 insertions(+) diff --git a/hashcode/src/main/java/io/mincongh/hashcode/bad/AthleteOnlyOverrideEquals.java b/hashcode/src/main/java/io/mincongh/hashcode/bad/AthleteOnlyOverrideEquals.java index 68eb46a1..f170cc32 100644 --- a/hashcode/src/main/java/io/mincongh/hashcode/bad/AthleteOnlyOverrideEquals.java +++ b/hashcode/src/main/java/io/mincongh/hashcode/bad/AthleteOnlyOverrideEquals.java @@ -6,6 +6,7 @@ * * @author Mincong Huang */ +@SuppressWarnings("EqualsHashCode") // hashCode() unimplemented for demo purpose public class AthleteOnlyOverrideEquals { private String email; diff --git a/hashcode/src/main/java/io/mincongh/hashcode/bad/PhoneNumberNoHash.java b/hashcode/src/main/java/io/mincongh/hashcode/bad/PhoneNumberNoHash.java index 2103c3b0..3ef95296 100644 --- a/hashcode/src/main/java/io/mincongh/hashcode/bad/PhoneNumberNoHash.java +++ b/hashcode/src/main/java/io/mincongh/hashcode/bad/PhoneNumberNoHash.java @@ -1,6 +1,7 @@ package io.mincongh.hashcode.bad; /** @author Mincong Huang */ +@SuppressWarnings("EqualsHashCode") // hashCode() unimplemented for demo purpose public class PhoneNumberNoHash { private final short areaCode; From 76113c2b5ca1400ea47559a42e4d3a5c67fd50a3 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 12:59:38 +0100 Subject: [PATCH 06/14] Add org.immutables:value as annotation processor --- immutables/pom.xml | 5 ----- pom.xml | 11 +++++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/immutables/pom.xml b/immutables/pom.xml index c58b8639..ee0761e0 100644 --- a/immutables/pom.xml +++ b/immutables/pom.xml @@ -14,15 +14,10 @@ java-examples-immutables Java Examples - Immutables - - 2.8.8 - - org.immutables value - ${immutables.version} provided 3.17.2 + 2.8.8 2.11.3 4.13.1 5.7.0 @@ -100,6 +101,11 @@ assertj-core ${assertjVersion} + + org.immutables + value + ${immutablesVersion} + @@ -175,6 +181,11 @@ error_prone_core ${errorProneVersion} + + org.immutables + value + ${immutablesVersion} + From dbba2dbfeea97d2fe2e539598968044df57aa9eb Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 13:10:32 +0100 Subject: [PATCH 07/14] Fix ReturnValueIgnored --- .../java8/so2607289/ConvertArrayToListTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java8/src/test/java/io/mincongh/java8/so2607289/ConvertArrayToListTest.java b/java8/src/test/java/io/mincongh/java8/so2607289/ConvertArrayToListTest.java index f7dba0d9..bb9fb804 100644 --- a/java8/src/test/java/io/mincongh/java8/so2607289/ConvertArrayToListTest.java +++ b/java8/src/test/java/io/mincongh/java8/so2607289/ConvertArrayToListTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.fail; import java.util.*; -import java.util.function.Predicate; +import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.jupiter.api.Test; @@ -71,13 +71,13 @@ private void assertListValues(List list) { assertEquals(3, list.get(2).intValue()); } - private void assertOperationSupported(List list, Predicate> predicate) { - predicate.test(list); + private void assertOperationSupported(List list, Consumer> action) { + action.accept(list); } - private void assertOperationUnsupported(List list, Predicate> predicate) { + private void assertOperationUnsupported(List list, Consumer> action) { try { - predicate.test(list); + action.accept(list); fail(); } catch (UnsupportedOperationException e) { // Ok From 843097facd6a8b8c0fbd863f352eebf1ffae43f1 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 13:19:41 +0100 Subject: [PATCH 08/14] Add JMH generator as annotation processor --- jmh/pom.xml | 7 ------- pom.xml | 6 ++++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/jmh/pom.xml b/jmh/pom.xml index 3498999d..ace0ac40 100644 --- a/jmh/pom.xml +++ b/jmh/pom.xml @@ -16,7 +16,6 @@ 1.15 - 1.26 @@ -32,12 +31,6 @@ ${jmh.version} test - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - test - org.junit.jupiter junit-jupiter-api diff --git a/pom.xml b/pom.xml index b75f1dac..35f37a3b 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ 3.17.2 2.8.8 2.11.3 + 1.26 4.13.1 5.7.0 2.4.0 @@ -186,6 +187,11 @@ value ${immutablesVersion} + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + From aa6178d6e0c5d7d5442f4ce44a9a6e3d681374a4 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 13:35:55 +0100 Subject: [PATCH 09/14] Suppress warnings about ReturnValueIgnored --- .../test/java/io/mincong/ocajp/chapter3/ReviewQuestionTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/oca/src/test/java/io/mincong/ocajp/chapter3/ReviewQuestionTest.java b/oca/src/test/java/io/mincong/ocajp/chapter3/ReviewQuestionTest.java index 7c8b8892..438598d1 100644 --- a/oca/src/test/java/io/mincong/ocajp/chapter3/ReviewQuestionTest.java +++ b/oca/src/test/java/io/mincong/ocajp/chapter3/ReviewQuestionTest.java @@ -56,6 +56,7 @@ public void testLegalArrayDeclaration() { /** Question 31. */ @Test + @SuppressWarnings("ReturnValueIgnored") public void testLocalDateImmutability() { LocalDate date = LocalDate.of(2018, Month.APRIL, 30); date.plusDays(2); From 69d6e0f1967e2c2ef14080dead6a2312a5496f88 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 15:00:48 +0100 Subject: [PATCH 10/14] Fix ReturnValueIgnored --- ocp/src/test/java/io/mincong/ocpjp/nio/PathTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ocp/src/test/java/io/mincong/ocpjp/nio/PathTest.java b/ocp/src/test/java/io/mincong/ocpjp/nio/PathTest.java index 79ec6e43..c74b7b0c 100644 --- a/ocp/src/test/java/io/mincong/ocpjp/nio/PathTest.java +++ b/ocp/src/test/java/io/mincong/ocpjp/nio/PathTest.java @@ -1,6 +1,6 @@ package io.mincong.ocpjp.nio; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; import java.io.FileInputStream; import java.io.IOException; @@ -102,9 +102,10 @@ public void toAbsolutePath_nonexistent() throws Exception { assertThat(p.getFileName().toString()).isEqualTo("nonexistent"); } - @Test(expected = NoSuchFileException.class) + @Test public void toRealPath_nonexistent() throws Exception { - r.resolve("nonexistent").toRealPath(); + assertThatThrownBy(() -> r.resolve("nonexistent").toRealPath()) + .isInstanceOf(NoSuchFileException.class); } @Test From 48870b3238850cad2fab20e3facc430d4e4d4fa0 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 15:02:16 +0100 Subject: [PATCH 11/14] Suppress warnings about FormatString and ArrayToString --- ocp/src/test/java/io/mincong/ocpjp/regex/FormattingTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ocp/src/test/java/io/mincong/ocpjp/regex/FormattingTest.java b/ocp/src/test/java/io/mincong/ocpjp/regex/FormattingTest.java index 492ee946..dc95ed34 100644 --- a/ocp/src/test/java/io/mincong/ocpjp/regex/FormattingTest.java +++ b/ocp/src/test/java/io/mincong/ocpjp/regex/FormattingTest.java @@ -41,6 +41,7 @@ * * @author Mincong Huang */ +@SuppressWarnings({"FormatString", "ArrayToString"}) public class FormattingTest { @Rule public final TemporaryFolder tempFolder = new TemporaryFolder(); From c47ffd9da32d708814300ff0336709ed90a17f8d Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 15:05:54 +0100 Subject: [PATCH 12/14] Fix more warnings --- .../test/java/io/mincong/ocpjp/autoboxing/WrapperClassTest.java | 1 + ocp/src/test/java/io/mincong/ocpjp/collection/HashSetTest.java | 1 + ocp/src/test/java/io/mincong/ocpjp/date/Java8DateTest.java | 1 + 3 files changed, 3 insertions(+) diff --git a/ocp/src/test/java/io/mincong/ocpjp/autoboxing/WrapperClassTest.java b/ocp/src/test/java/io/mincong/ocpjp/autoboxing/WrapperClassTest.java index e1e55740..fe186c17 100644 --- a/ocp/src/test/java/io/mincong/ocpjp/autoboxing/WrapperClassTest.java +++ b/ocp/src/test/java/io/mincong/ocpjp/autoboxing/WrapperClassTest.java @@ -62,6 +62,7 @@ public void comparingObjects() throws Exception { * Cannot use a `Float` object to retrieve the value that was * added to a `HashMap` using a `Double` instance. */ + @SuppressWarnings("CollectionIncompatibleType") String value2 = map.get(new Float(2.0)); assertThat(value2).isNull(); } diff --git a/ocp/src/test/java/io/mincong/ocpjp/collection/HashSetTest.java b/ocp/src/test/java/io/mincong/ocpjp/collection/HashSetTest.java index 4baa058c..a8993378 100644 --- a/ocp/src/test/java/io/mincong/ocpjp/collection/HashSetTest.java +++ b/ocp/src/test/java/io/mincong/ocpjp/collection/HashSetTest.java @@ -146,6 +146,7 @@ public int hashCode() { } /** Only {@link #equals(Object)} is overridden. */ + @SuppressWarnings("EqualsHashCode") private static class Person_E extends Person { Person_E(String name) { diff --git a/ocp/src/test/java/io/mincong/ocpjp/date/Java8DateTest.java b/ocp/src/test/java/io/mincong/ocpjp/date/Java8DateTest.java index 825838dd..4546be2f 100644 --- a/ocp/src/test/java/io/mincong/ocpjp/date/Java8DateTest.java +++ b/ocp/src/test/java/io/mincong/ocpjp/date/Java8DateTest.java @@ -49,6 +49,7 @@ public void localDate_constructWithMonth() throws Exception { } @Test + @SuppressWarnings("TemporalAccessorGetChronoField") // Fail on purpose public void localDate_temporalField() throws Exception { LocalDate d = LocalDate.of(2018, 1, 2); assertThat(d.get(ChronoField.YEAR)).isEqualTo(2018); From df851daf7164ce387cbb6dccbd75df1eab11e5f4 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 15:16:04 +0100 Subject: [PATCH 13/14] Fix CollectionIncompatibleType --- vavr/src/test/java/io/mincongh/vavr/JavaListTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/vavr/src/test/java/io/mincongh/vavr/JavaListTest.java b/vavr/src/test/java/io/mincongh/vavr/JavaListTest.java index 5da653f1..69431100 100644 --- a/vavr/src/test/java/io/mincongh/vavr/JavaListTest.java +++ b/vavr/src/test/java/io/mincongh/vavr/JavaListTest.java @@ -150,6 +150,7 @@ public void remove_ArraysArrayList() { } @Test + @SuppressWarnings("CollectionIncompatibleType") public void remove_ArrayList() { List animals = new ArrayList<>(); animals.add("🐱"); From 0e9172172ba60cafc325845d16611437c7da256e Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 8 Nov 2020 15:35:19 +0100 Subject: [PATCH 14/14] Fix FormatString --- .../io/mincongh/xml/xstream/model/PhoneNumber.java | 2 +- .../xml/xstream/model/PhoneNumberTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 xml/src/test/java/io/mincongh/xml/xstream/model/PhoneNumberTest.java diff --git a/xml/src/main/java/io/mincongh/xml/xstream/model/PhoneNumber.java b/xml/src/main/java/io/mincongh/xml/xstream/model/PhoneNumber.java index e3beaa2a..2f41d50f 100644 --- a/xml/src/main/java/io/mincongh/xml/xstream/model/PhoneNumber.java +++ b/xml/src/main/java/io/mincongh/xml/xstream/model/PhoneNumber.java @@ -40,6 +40,6 @@ public int hashCode() { @Override public String toString() { - return String.format(Locale.ENGLISH, "+%.2d %s", code, number); + return String.format(Locale.ENGLISH, "+%02d %s", code, number); } } diff --git a/xml/src/test/java/io/mincongh/xml/xstream/model/PhoneNumberTest.java b/xml/src/test/java/io/mincongh/xml/xstream/model/PhoneNumberTest.java new file mode 100644 index 00000000..b9afca17 --- /dev/null +++ b/xml/src/test/java/io/mincongh/xml/xstream/model/PhoneNumberTest.java @@ -0,0 +1,14 @@ +package io.mincongh.xml.xstream.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class PhoneNumberTest { + + @Test + void toStr() { + var phoneNumber = new PhoneNumber(1, "2345"); + assertThat(String.valueOf(phoneNumber)).isEqualTo("+01 2345"); + } +}