diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 150bf8b2b..72cabd856 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -121,7 +121,7 @@ dependencies { implementation("com.fasterxml.jackson.core:jackson-annotations:${JACKSON_VERSION}") implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${JACKSON_VERSION}") implementation("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${JACKSON_VERSION}") - implementation("com.google.code.findbugs:jsr305:3.0.2") + api("org.jspecify:jspecify:1.0.0") antlr("org.antlr:antlr4:${ANTLR_VERSION}") shadowImplementation("org.antlr:antlr4-runtime:${ANTLR_VERSION}") diff --git a/core/src/main/java/io/substrait/extension/SimpleExtension.java b/core/src/main/java/io/substrait/extension/SimpleExtension.java index 9f7d64e6b..517bc8fee 100644 --- a/core/src/main/java/io/substrait/extension/SimpleExtension.java +++ b/core/src/main/java/io/substrait/extension/SimpleExtension.java @@ -26,8 +26,8 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import javax.annotation.Nullable; import org.immutables.value.Value; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,12 +79,10 @@ public interface Argument { String toTypeString(); @JsonProperty() - @Nullable - String name(); + @Nullable String name(); @JsonProperty() - @Nullable - String description(); + @Nullable String description(); boolean required(); } diff --git a/isthmus/build.gradle.kts b/isthmus/build.gradle.kts index 64f9891a4..131f43ee2 100644 --- a/isthmus/build.gradle.kts +++ b/isthmus/build.gradle.kts @@ -139,7 +139,6 @@ dependencies { exclude("com.google.guava", "guava") .because("Brings in Guava for Android, which we don't want (and breaks multimaps).") } - implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("org.immutables:value-annotations:${IMMUTABLES_VERSION}") implementation("org.slf4j:slf4j-api:${SLF4J_VERSION}") annotationProcessor("org.immutables:value:${IMMUTABLES_VERSION}") @@ -150,6 +149,7 @@ dependencies { ) } testImplementation("com.google.protobuf:protobuf-java:${PROTOBUF_VERSION}") + api("org.jspecify:jspecify:1.0.0") } tasks { diff --git a/isthmus/src/main/java/io/substrait/isthmus/TypeConverter.java b/isthmus/src/main/java/io/substrait/isthmus/TypeConverter.java index f94c63f49..c621425c8 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/TypeConverter.java +++ b/isthmus/src/main/java/io/substrait/isthmus/TypeConverter.java @@ -12,11 +12,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import javax.annotation.Nullable; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; import org.apache.calcite.sql.type.MapSqlType; import org.apache.calcite.sql.type.SqlTypeName; +import org.jspecify.annotations.Nullable; public class TypeConverter { diff --git a/isthmus/src/main/java/io/substrait/isthmus/UserTypeMapper.java b/isthmus/src/main/java/io/substrait/isthmus/UserTypeMapper.java index 3394b05b1..2c4665090 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/UserTypeMapper.java +++ b/isthmus/src/main/java/io/substrait/isthmus/UserTypeMapper.java @@ -1,8 +1,8 @@ package io.substrait.isthmus; import io.substrait.type.Type; -import javax.annotation.Nullable; import org.apache.calcite.rel.type.RelDataType; +import org.jspecify.annotations.Nullable; /** Defines conversion of user-defined types between Substrait and Calcite */ public interface UserTypeMapper { @@ -10,13 +10,11 @@ public interface UserTypeMapper { * @param relDataType the Calcite {@link RelDataType} type to convert * @return the Substrait representation of the input type */ - @Nullable - Type toSubstrait(RelDataType relDataType); + @Nullable Type toSubstrait(RelDataType relDataType); /** * @param type the Subtrait {@link Type.UserDefined} type to convert * @return the Calcite {@link RelDataType} representing the input type */ - @Nullable - RelDataType toCalcite(Type.UserDefined type); + @Nullable RelDataType toCalcite(Type.UserDefined type); } diff --git a/isthmus/src/main/java/io/substrait/isthmus/calcite/SubstraitOperatorTable.java b/isthmus/src/main/java/io/substrait/isthmus/calcite/SubstraitOperatorTable.java index c6cc29d6b..b363203e3 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/calcite/SubstraitOperatorTable.java +++ b/isthmus/src/main/java/io/substrait/isthmus/calcite/SubstraitOperatorTable.java @@ -15,7 +15,7 @@ import org.apache.calcite.sql.fun.SqlStdOperatorTable; import org.apache.calcite.sql.util.SqlOperatorTables; import org.apache.calcite.sql.validate.SqlNameMatcher; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Overrides SQL operator lookups to return Substrait specific functions variants (e.g. {@link diff --git a/isthmus/src/main/java/io/substrait/isthmus/expression/CallConverters.java b/isthmus/src/main/java/io/substrait/isthmus/expression/CallConverters.java index f030b61da..5dbd88055 100644 --- a/isthmus/src/main/java/io/substrait/isthmus/expression/CallConverters.java +++ b/isthmus/src/main/java/io/substrait/isthmus/expression/CallConverters.java @@ -10,12 +10,12 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; -import javax.annotation.Nullable; import org.apache.calcite.rex.RexBuilder; import org.apache.calcite.rex.RexCall; import org.apache.calcite.rex.RexNode; import org.apache.calcite.rex.RexUtil; import org.apache.calcite.sql.SqlKind; +import org.jspecify.annotations.Nullable; public class CallConverters { @@ -146,8 +146,7 @@ public static List defaults(TypeConverter typeConverter) { public interface SimpleCallConverter extends CallConverter { - @Nullable - Expression apply(RexCall call, Function topLevelConverter); + @Nullable Expression apply(RexCall call, Function topLevelConverter); @Override default Optional convert( diff --git a/isthmus/src/test/java/io/substrait/isthmus/CalciteTypeTest.java b/isthmus/src/test/java/io/substrait/isthmus/CalciteTypeTest.java index 99a6aa79b..1d751e09e 100644 --- a/isthmus/src/test/java/io/substrait/isthmus/CalciteTypeTest.java +++ b/isthmus/src/test/java/io/substrait/isthmus/CalciteTypeTest.java @@ -8,9 +8,9 @@ import io.substrait.type.TypeCreator; import java.util.Arrays; import java.util.List; -import javax.annotation.Nullable; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.sql.type.SqlTypeName; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; diff --git a/isthmus/src/test/java/io/substrait/isthmus/ComplexSortTest.java b/isthmus/src/test/java/io/substrait/isthmus/ComplexSortTest.java index 3f7407530..dff92e557 100644 --- a/isthmus/src/test/java/io/substrait/isthmus/ComplexSortTest.java +++ b/isthmus/src/test/java/io/substrait/isthmus/ComplexSortTest.java @@ -15,7 +15,7 @@ import org.apache.calcite.rel.externalize.RelWriterImpl; import org.apache.calcite.sql.SqlExplainLevel; import org.apache.calcite.util.Pair; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; public class ComplexSortTest extends PlanTestBase { diff --git a/isthmus/src/test/java/io/substrait/isthmus/CustomFunctionTest.java b/isthmus/src/test/java/io/substrait/isthmus/CustomFunctionTest.java index 4772468ad..de63c38d1 100644 --- a/isthmus/src/test/java/io/substrait/isthmus/CustomFunctionTest.java +++ b/isthmus/src/test/java/io/substrait/isthmus/CustomFunctionTest.java @@ -21,7 +21,6 @@ import io.substrait.type.TypeCreator; import java.io.IOException; import java.util.List; -import javax.annotation.Nullable; import org.apache.calcite.rel.RelNode; import org.apache.calcite.rel.type.RelDataType; import org.apache.calcite.rel.type.RelDataTypeFactory; @@ -34,6 +33,7 @@ import org.apache.calcite.sql.type.SqlTypeFactoryImpl; import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.tools.RelBuilder; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; /** Verify that custom functions can convert from Substrait to Calcite and back. */