Skip to content

Commit 7f6a229

Browse files
committed
build: add ErrorProne + NullAway
1 parent 456fad3 commit 7f6a229

File tree

17 files changed

+121
-11
lines changed

17 files changed

+121
-11
lines changed

buildSrc/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ repositories {
1010
dependencies {
1111
implementation("com.adarshr:gradle-test-logger-plugin:4.0.0")
1212
implementation("io.github.joselion:strict-null-check:3.5.0")
13+
implementation("net.ltgt.gradle:gradle-errorprone-plugin:4.1.0")
14+
implementation("net.ltgt.gradle:gradle-nullaway-plugin:2.1.0")
1315
}

buildSrc/src/main/kotlin/framefork.java.gradle.kts

Lines changed: 96 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
import net.ltgt.gradle.errorprone.errorprone
2+
import net.ltgt.gradle.nullaway.nullaway
13

24
plugins {
35
`java-library`
46
id("idea")
57
id("com.adarshr.test-logger")
68
id("io.github.joselion.strict-null-check")
9+
id("net.ltgt.errorprone")
10+
id("net.ltgt.nullaway")
711
}
812

913
repositories {
@@ -23,6 +27,17 @@ java {
2327
dependencies {
2428
api("org.jspecify:jspecify:1.0.0")
2529

30+
compileOnly("org.checkerframework:checker-qual:3.48.2")
31+
32+
errorprone("com.google.errorprone:error_prone_core:2.36.0")
33+
errorprone("com.uber.nullaway:nullaway:0.12.1")
34+
35+
constraints {
36+
errorprone("org.checkerframework:checker-qual:3.48.2")
37+
errorprone("org.checkerframework:dataflow-errorprone:3.48.2")
38+
errorprone("org.checkerframework:dataflow-nullaway:3.48.2")
39+
errorprone("com.google.guava:guava:33.3.1-jre")
40+
}
2641
}
2742

2843
strictNullCheck {
@@ -53,9 +68,89 @@ tasks.withType<Test> {
5368
}
5469
}
5570

71+
nullaway {
72+
annotatedPackages.add("org.framefork")
73+
}
74+
5675
tasks.withType<JavaCompile> {
5776
options.encoding = "UTF-8"
58-
options.compilerArgs.addAll(listOf("-parameters"))
77+
options.compilerArgs.add("-Xlint:all,-fallthrough,-processing,-serial,-classfile,-path,-this-escape")
78+
options.compilerArgs.add("-parameters")
79+
options.compilerArgs.add("-Werror") // treat warnings as errors
80+
81+
// useful when debugging lint errors:
82+
// options.isVerbose = true
83+
// options.isDebug = true
84+
85+
options.errorprone {
86+
disableWarningsInGeneratedCode.set(true)
87+
allDisabledChecksAsWarnings.set(true)
88+
allErrorsAsWarnings.set(true)
89+
disable("AndroidJdkLibsChecker")
90+
disable("AnnotationPosition")
91+
disable("AvoidObjectArrays")
92+
disable("BooleanParameter")
93+
disable("CanIgnoreReturnValueSuggester")
94+
disable("CatchingUnchecked")
95+
disable("ConstantPatternCompile")
96+
disable("DefaultLocale")
97+
disable("DeduplicateConstants")
98+
disable("DistinctVarargsChecker")
99+
disable("FieldCanBeFinal")
100+
disable("ImmutableMemberCollection")
101+
disable("InconsistentOverloads")
102+
disable("InlineMeSuggester")
103+
disable("InterfaceWithOnlyStatics")
104+
disable("Interruption")
105+
disable("InvalidBlockTag")
106+
disable("Java7ApiChecker")
107+
disable("Java8ApiChecker")
108+
disable("MemberName")
109+
disable("MethodCanBeStatic")
110+
disable("MissingSummary")
111+
disable("MockitoDoSetup")
112+
disable("OptionalOfRedundantMethod")
113+
disable("PreferredInterfaceType")
114+
disable("ReturnMissingNullable")
115+
disable("SameNameButDifferent")
116+
disable("StatementSwitchToExpressionSwitch")
117+
disable("StaticOrDefaultInterfaceMethod")
118+
disable("StaticQualifiedUsingExpression")
119+
disable("StringSplitter")
120+
disable("SuppressWarningsWithoutExplanation")
121+
disable("TooManyParameters")
122+
disable("TraditionalSwitchExpression")
123+
disable("TryFailRefactoring")
124+
disable("TypeParameterNaming")
125+
disable("UnnecessaryFinal")
126+
disable("UnnecessaryStringBuilder")
127+
disable("Var")
128+
disable("WildcardImport")
129+
disable("YodaCondition")
130+
}
131+
132+
options.errorprone.nullaway {
133+
warn()
134+
treatGeneratedAsUnannotated.set(true)
135+
acknowledgeRestrictiveAnnotations.set(true)
136+
handleTestAssertionLibraries.set(true)
137+
checkContracts.set(true)
138+
knownInitializers.addAll(setOf(
139+
"org.springframework.beans.factory.InitializingBean.afterPropertiesSet",
140+
))
141+
customInitializerAnnotations.addAll(setOf(
142+
"org.junit.jupiter.api.BeforeAll",
143+
"org.junit.jupiter.api.BeforeEach",
144+
))
145+
excludedFieldAnnotations.addAll(setOf(
146+
"jakarta.persistence.PersistenceContext",
147+
"org.springframework.beans.factory.annotation.Autowired",
148+
"org.springframework.boot.test.mock.mockito.MockBean",
149+
"org.mockito.Captor",
150+
"org.springframework.beans.factory.annotation.Value",
151+
"com.github.rvesse.airline.annotations.Option"
152+
))
153+
}
59154
}
60155

61156
tasks.withType<Javadoc> {

modules/typed-ids-hibernate-62/src/main/java/org/framefork/typedIds/uuid/hibernate/ObjectUuidTypesContributor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Comparator;
2525
import java.util.List;
2626

27+
@SuppressWarnings("rawtypes")
2728
@AutoService(TypeContributor.class)
2829
public class ObjectUuidTypesContributor implements TypeContributor
2930
{
@@ -36,11 +37,12 @@ public class ObjectUuidTypesContributor implements TypeContributor
3637
private static final boolean CLASS_INDEX_PRESENT;
3738

3839
static {
39-
boolean found = false;
40+
boolean found;
4041
try {
4142
Class.forName("org.atteo.classindex.ClassIndex");
4243
found = true;
4344
} catch (ClassNotFoundException ignored) {
45+
found = false;
4446
}
4547

4648
CLASS_INDEX_PRESENT = found;

modules/typed-ids-hibernate-62/src/test/java/org/framefork/typedIds/uuid/hibernate/ArticleDefaultExplicitMapping.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public ArticleDefaultExplicitMapping(final String title)
2929
this.title = title;
3030
}
3131

32+
@SuppressWarnings("NullAway")
3233
protected ArticleDefaultExplicitMapping()
3334
{
3435
}

modules/typed-ids-hibernate-63/src/main/java/org/framefork/typedIds/uuid/hibernate/ObjectUuidTypesContributor.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Comparator;
2525
import java.util.List;
2626

27+
@SuppressWarnings("rawtypes")
2728
@AutoService(TypeContributor.class)
2829
public class ObjectUuidTypesContributor implements TypeContributor
2930
{
@@ -36,11 +37,12 @@ public class ObjectUuidTypesContributor implements TypeContributor
3637
private static final boolean CLASS_INDEX_PRESENT;
3738

3839
static {
39-
boolean found = false;
40+
boolean found;
4041
try {
4142
Class.forName("org.atteo.classindex.ClassIndex");
4243
found = true;
4344
} catch (ClassNotFoundException ignored) {
45+
found = false;
4446
}
4547

4648
CLASS_INDEX_PRESENT = found;

modules/typed-ids-hibernate-63/src/test/java/org/framefork/typedIds/uuid/hibernate/ArticleDefaultExplicitMapping.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public ArticleDefaultExplicitMapping(final String title)
2929
this.title = title;
3030
}
3131

32+
@SuppressWarnings("NullAway")
3233
protected ArticleDefaultExplicitMapping()
3334
{
3435
}

modules/typed-ids-testing/src/main/java/org/framefork/typedIds/hibernate/tests/AbstractContainerDataSourceProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.testcontainers.containers.JdbcDatabaseContainer;
55

66
import javax.sql.DataSource;
7+
import java.util.Objects;
78
import java.util.concurrent.atomic.AtomicReference;
89

910
public abstract class AbstractContainerDataSourceProvider implements DataSourceProvider
@@ -21,7 +22,7 @@ public JdbcDatabaseContainer<?> getContainer()
2122
}
2223
}
2324

24-
return container.get();
25+
return Objects.requireNonNull(container.get(), "database container must not be null");
2526
}
2627

2728
private JdbcDatabaseContainer<?> initContainer()

modules/typed-ids-testing/src/main/java/org/framefork/typedIds/hibernate/tests/MySQLDataSourceProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public String hibernateDialect()
3333
return MySQLDialect.class.getName();
3434
}
3535

36+
@Override
3637
protected DataSource newDataSource()
3738
{
3839
var dataSource = new MysqlDataSource();

modules/typed-ids-testing/src/main/java/org/framefork/typedIds/hibernate/tests/PostgreSQLDataSourceProvider.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public String hibernateDialect()
3333
return PostgreSQLDialect.class.getName();
3434
}
3535

36+
@Override
3637
protected DataSource newDataSource()
3738
{
3839
var dataSource = new PGSimpleDataSource();

modules/typed-ids/src/main/java/org/framefork/typedIds/uuid/ObjectUuid.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public String toString()
179179
@Override
180180
public boolean equals(@Nullable final Object o)
181181
{
182-
if (!(o instanceof ObjectUuid)) {
182+
if (!(o instanceof ObjectUuid<?>)) {
183183
return false;
184184
}
185185
if (!this.getClass().isInstance(o)) {
@@ -233,7 +233,7 @@ static UuidGenerator getGenerator(final Function<?, ?> constructor)
233233
{
234234
return GENERATORS.computeIfAbsent(
235235
constructor,
236-
c -> FACTORY.get().getGenerator(c)
236+
c -> Objects.requireNonNull(FACTORY.get(), "generator factory must not be null").getGenerator(c)
237237
);
238238
}
239239

modules/typed-ids/src/main/java/org/framefork/typedIds/uuid/json/jackson/ObjectUuidJacksonModule.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import com.fasterxml.jackson.databind.module.SimpleDeserializers;
66
import com.fasterxml.jackson.databind.module.SimpleSerializers;
77
import com.google.auto.service.AutoService;
8-
import org.framefork.typedIds.uuid.ObjectUuid;
8+
import org.framefork.typedIds.uuid.ObjectUuidTypeUtils;
99

1010
@AutoService(Module.class)
1111
public class ObjectUuidJacksonModule extends Module
@@ -34,7 +34,7 @@ private static SimpleSerializers getSerializers()
3434
{
3535
var serializers = new SimpleSerializers();
3636

37-
serializers.addSerializer(ObjectUuid.class, new ObjectUuidSerializer());
37+
serializers.addSerializer(ObjectUuidTypeUtils.getObjectUuidRawClass(), new ObjectUuidSerializer());
3838

3939
return serializers;
4040
}

modules/typed-ids/src/main/java/org/framefork/typedIds/uuid/json/jackson/ObjectUuidSerializer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,12 @@
77

88
import java.io.IOException;
99

10-
@SuppressWarnings("rawtypes")
11-
public class ObjectUuidSerializer extends JsonSerializer<ObjectUuid>
10+
public class ObjectUuidSerializer extends JsonSerializer<ObjectUuid<?>>
1211
{
1312

1413
@Override
1514
public void serialize(
16-
final ObjectUuid uuid,
15+
final ObjectUuid<?> uuid,
1716
final JsonGenerator jsonGenerator,
1817
final SerializerProvider serializerProvider
1918
) throws

testing/testing-typed-ids-hibernate-62-indexed/src/main/java/org/framefork/typedIds/uuid/hibernate/v63/ArticleTestingEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ArticleTestingEntity(final String title)
2727
this.title = title;
2828
}
2929

30+
@SuppressWarnings("NullAway")
3031
protected ArticleTestingEntity()
3132
{
3233
}

testing/testing-typed-ids-hibernate-63-indexed/src/main/java/org/framefork/typedIds/uuid/hibernate/v63/ArticleTestingEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ArticleTestingEntity(final String title)
2727
this.title = title;
2828
}
2929

30+
@SuppressWarnings("NullAway")
3031
protected ArticleTestingEntity()
3132
{
3233
}

testing/testing-typed-ids-hibernate-64-indexed/src/main/java/org/framefork/typedIds/uuid/hibernate/v64/ArticleTestingEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ArticleTestingEntity(final String title)
2727
this.title = title;
2828
}
2929

30+
@SuppressWarnings("NullAway")
3031
protected ArticleTestingEntity()
3132
{
3233
}

testing/testing-typed-ids-hibernate-65-indexed/src/main/java/org/framefork/typedIds/uuid/hibernate/v65/ArticleTestingEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ArticleTestingEntity(final String title)
2727
this.title = title;
2828
}
2929

30+
@SuppressWarnings("NullAway")
3031
protected ArticleTestingEntity()
3132
{
3233
}

testing/testing-typed-ids-hibernate-66-indexed/src/main/java/org/framefork/typedIds/uuid/hibernate/v66/ArticleTestingEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public ArticleTestingEntity(final String title)
2727
this.title = title;
2828
}
2929

30+
@SuppressWarnings("NullAway")
3031
protected ArticleTestingEntity()
3132
{
3233
}

0 commit comments

Comments
 (0)