diff --git a/core/pom.xml b/core/pom.xml
index 64a141e4..e6d27979 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -50,6 +50,11 @@
hamcrest-optional
test
+
+ com.google.errorprone
+ error_prone_annotations
+ test
+
jakarta.json
diff --git a/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/MultipleOfKeywordType.java b/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/MultipleOfKeywordType.java
index aa9fa431..6d3ff4d6 100644
--- a/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/MultipleOfKeywordType.java
+++ b/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/MultipleOfKeywordType.java
@@ -63,6 +63,7 @@ public boolean hasName(final String name) {
}
@Override
+ @SuppressWarnings("BigDecimalEquals")
public boolean isValidFor(final JsonValue instance) {
return (
!InstanceType.NUMBER.isInstance(instance) ||
diff --git a/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/UniqueItemsKeywordType.java b/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/UniqueItemsKeywordType.java
index c2747423..892ca6d3 100644
--- a/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/UniqueItemsKeywordType.java
+++ b/core/src/main/java/io/github/sebastiantoepfer/jsonschema/core/vocab/validation/UniqueItemsKeywordType.java
@@ -119,11 +119,12 @@ public int hashCode() {
@Override
public boolean equals(final Object obj) {
return (
- this == obj || (obj != null && getClass() == obj.getClass() && equals((JsonValueNumberEqualsFix) obj))
+ this == obj || (obj != null && getClass() == obj.getClass() && isEquals((JsonValueNumberEqualsFix) obj))
);
}
- private boolean equals(final JsonValueNumberEqualsFix other) {
+ @SuppressWarnings("BigDecimalEquals")
+ private boolean isEquals(final JsonValueNumberEqualsFix other) {
final boolean result;
if (isNumber() && other.isNumber()) {
result = normalizeValue().equals(other.normalizeValue());
diff --git a/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/JsonTestSuiteTestCaseProvider.java b/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/JsonTestSuiteTestCaseProvider.java
index 2ea4fb8a..a12a7709 100644
--- a/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/JsonTestSuiteTestCaseProvider.java
+++ b/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/JsonTestSuiteTestCaseProvider.java
@@ -37,6 +37,7 @@
class JsonTestSuiteTestCaseProvider implements ArgumentsProvider {
@Override
+ @SuppressWarnings("MustBeClosedChecker")
public Stream extends Arguments> provideArguments(final ExtensionContext context) throws Exception {
return new Resources()
.all()
diff --git a/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/Resources.java b/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/Resources.java
index 26f785d8..9c7c2c3c 100644
--- a/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/Resources.java
+++ b/core/src/test/java/io/github/sebastiantoepfer/jsonschema/core/testsuite/Resources.java
@@ -48,6 +48,7 @@ public Resources(final String baseDir) {
this.baseDir = baseDir;
}
+ @com.google.errorprone.annotations.MustBeClosed
Stream all() {
try {
return StreamSupport
@@ -83,6 +84,7 @@ public PathResources(final Path path) {
this.path = Objects.requireNonNull(path);
}
+ @SuppressWarnings("StreamResourceLeak")
Stream toResources() {
final Stream result;
try {
diff --git a/core/src/test/java/module-info.java b/core/src/test/java/module-info.java
index b7ce75fd..2950fd11 100644
--- a/core/src/test/java/module-info.java
+++ b/core/src/test/java/module-info.java
@@ -26,6 +26,7 @@
requires io.github.sebastiantoepfer.jsonschema.vocabulary.spi;
requires jakarta.json;
+ requires com.google.errorprone.annotations;
requires org.junit.jupiter.api;
requires org.junit.jupiter.params;
requires org.junit.jupiter.engine;
diff --git a/pom.xml b/pom.xml
index 85476c59..53864323 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,11 @@
spotbugs-annotations
4.8.1
+
+ com.google.errorprone
+ error_prone_annotations
+ 2.23.0
+
org.junit
@@ -121,7 +126,21 @@
-XDcompilePolicy=simple
- -Xplugin:ErrorProne
+
+ -Xplugin:ErrorProne \
+ -XepExcludedPaths:.*/target/generated-sources/.* \
+ -Xep:EqualsGetClass:OFF \
+ -Xep:MissingOverride:ERROR \
+ -Xep:DefaultCharset:ERROR \
+ -Xep:BadImport:ERROR \
+ -Xep:TypeParameterShadowing:ERROR \
+ -Xep:NonCanonicalType:ERROR \
+ -Xep:EqualsIncompatibleType:ERROR \
+ -Xep:BigDecimalEquals:ERROR \
+ -Xep:UndefinedEquals:ERROR \
+ -Xep:StreamResourceLeak:ERROR \
+ -Xep:NonOverridingEquals:ERROR
+
diff --git a/testsuite-junit-platform-engine/pom.xml b/testsuite-junit-platform-engine/pom.xml
index 8bdd3673..c8de0c64 100644
--- a/testsuite-junit-platform-engine/pom.xml
+++ b/testsuite-junit-platform-engine/pom.xml
@@ -27,6 +27,10 @@
com.github.spotbugs
spotbugs-annotations
+
+ com.google.errorprone
+ error_prone_annotations
+
org.junit.jupiter
diff --git a/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/JsonSchemaTestSuiteEngine.java b/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/JsonSchemaTestSuiteEngine.java
index a8cec808..d14e28fe 100644
--- a/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/JsonSchemaTestSuiteEngine.java
+++ b/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/JsonSchemaTestSuiteEngine.java
@@ -41,11 +41,12 @@ public String getId() {
@Override
public TestDescriptor discover(final EngineDiscoveryRequest discoveryRequest, final UniqueId uniqueId) {
final TestDescriptor result = new EngineDescriptor(uniqueId, "Json Schema Test");
- new Resources()
- .all()
- .filter(resource -> resource.hasExtension("json"))
- .map(JsonSchemaSuitesTestDescriptor::new)
- .forEach(result::addChild);
+ try (final Stream res = new Resources().all()) {
+ res
+ .filter(resource -> resource.hasExtension("json"))
+ .map(JsonSchemaSuitesTestDescriptor::new)
+ .forEach(result::addChild);
+ }
return result;
}
diff --git a/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/Resources.java b/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/Resources.java
index 4fa18af1..f98fd551 100644
--- a/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/Resources.java
+++ b/testsuite-junit-platform-engine/src/main/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/Resources.java
@@ -48,6 +48,7 @@ public Resources(final String baseDir) {
this.baseDir = baseDir;
}
+ @com.google.errorprone.annotations.MustBeClosed
Stream all() {
try {
return StreamSupport
@@ -83,6 +84,7 @@ public PathResources(final Path path) {
this.path = Objects.requireNonNull(path);
}
+ @SuppressWarnings("StreamResourceLeak")
Stream toResources() {
final Stream result;
try {
diff --git a/testsuite-junit-platform-engine/src/main/java/module-info.java b/testsuite-junit-platform-engine/src/main/java/module-info.java
index 84e5715a..c7ad8af1 100644
--- a/testsuite-junit-platform-engine/src/main/java/module-info.java
+++ b/testsuite-junit-platform-engine/src/main/java/module-info.java
@@ -31,5 +31,6 @@
requires org.junit.platform.engine;
requires org.junit.platform.commons;
requires com.github.spotbugs.annotations;
+ requires com.google.errorprone.annotations;
requires jakarta.json;
}
diff --git a/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourceTest.java b/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourceTest.java
index 0fe880d8..e4d2fc4a 100644
--- a/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourceTest.java
+++ b/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourceTest.java
@@ -26,7 +26,8 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
-import io.github.sebastiantoepfer.jsonschema.testsuite.junit.engine.Resource;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
import nl.jqno.equalsverifier.EqualsVerifier;
import org.junit.jupiter.api.Test;
@@ -45,16 +46,18 @@ void should_determine_name() {
@Test
void should_return_content() throws Exception {
- assertThat(
- new String(new Resource("tests/test_resource.json").content().readAllBytes()),
- is(
- """
- {
- "name": "sebastian"
- }
- """
- )
- );
+ try (final InputStream content = new Resource("tests/test_resource.json").content()) {
+ assertThat(
+ new String(content.readAllBytes(), StandardCharsets.UTF_8),
+ is(
+ """
+ {
+ "name": "sebastian"
+ }
+ """
+ )
+ );
+ }
}
@Test
diff --git a/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourcesTest.java b/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourcesTest.java
index 3c5aa2d6..352c1990 100644
--- a/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourcesTest.java
+++ b/testsuite-junit-platform-engine/src/test/java/io/github/sebastiantoepfer/jsonschema/testsuite/junit/engine/ResourcesTest.java
@@ -26,28 +26,30 @@
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasItems;
-import io.github.sebastiantoepfer.jsonschema.testsuite.junit.engine.Resource;
-import io.github.sebastiantoepfer.jsonschema.testsuite.junit.engine.Resources;
+import java.util.stream.Stream;
import org.junit.jupiter.api.Test;
class ResourcesTest {
@Test
void should_find_resources_from_classpath() {
- assertThat(new Resources().all().toList(), hasItems(new Resource("tests/test_resource.json")));
+ try (final Stream res = new Resources().all()) {
+ assertThat(res.toList(), hasItems(new Resource("tests/test_resource.json")));
+ }
}
@Test
void should_find_resources_in_subdir_from_classpath() {
- assertThat(new Resources("tests").all().toList(), hasItems(new Resource("tests/test_resource.json")));
+ try (final Stream res = new Resources("tests").all()) {
+ assertThat(res.toList(), hasItems(new Resource("tests/test_resource.json")));
+ }
}
@Test
void should_find_resources_in_metainf() {
- //to kill all mutants, we need a resource from non-test classpath
- assertThat(
- new Resources("META-INF").all().toList(),
- hasItems(new Resource("META-INF/services/org.junit.platform.engine.TestEngine"))
- );
+ try (final Stream res = new Resources("META-INF").all()) {
+ //to kill all mutants, we need a resource from non-test classpath
+ assertThat(res.toList(), hasItems(new Resource("META-INF/services/org.junit.platform.engine.TestEngine")));
+ }
}
}