diff --git a/core/pom.xml b/core/pom.xml index dfcd42af9..a01adb66b 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -15,8 +15,8 @@ guava - org.checkerframework - checker-qual + org.jspecify + jspecify junit diff --git a/core/src/main/java/com/google/common/truth/AbstractArraySubject.java b/core/src/main/java/com/google/common/truth/AbstractArraySubject.java index 8eff47a14..760c18042 100644 --- a/core/src/main/java/com/google/common/truth/AbstractArraySubject.java +++ b/core/src/main/java/com/google/common/truth/AbstractArraySubject.java @@ -20,13 +20,15 @@ import static com.google.common.truth.Fact.simpleFact; import java.lang.reflect.Array; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A common supertype for Array subjects, abstracting some common display and error infrastructure. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked abstract class AbstractArraySubject extends Subject { private final @Nullable Object actual; diff --git a/core/src/main/java/com/google/common/truth/ActualValueInference.java b/core/src/main/java/com/google/common/truth/ActualValueInference.java index db49c1da2..26d813665 100644 --- a/core/src/main/java/com/google/common/truth/ActualValueInference.java +++ b/core/src/main/java/com/google/common/truth/ActualValueInference.java @@ -33,7 +33,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Map.Entry; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.Handle; @@ -69,6 +70,7 @@ */ @GwtIncompatible @J2ktIncompatible +@NullMarked final class ActualValueInference { /** Call {@link Platform#inferDescription} rather than calling this directly. */ static @Nullable String describeActualValue(String className, String methodName, int lineNumber) { diff --git a/core/src/main/java/com/google/common/truth/AssertionErrorWithFacts.java b/core/src/main/java/com/google/common/truth/AssertionErrorWithFacts.java index ffdc720c6..48232c7f7 100644 --- a/core/src/main/java/com/google/common/truth/AssertionErrorWithFacts.java +++ b/core/src/main/java/com/google/common/truth/AssertionErrorWithFacts.java @@ -19,13 +19,15 @@ import static com.google.common.truth.Fact.makeMessage; import com.google.common.collect.ImmutableList; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * An {@link AssertionError} composed of structured {@link Fact} instances and other string * messages. */ @SuppressWarnings("OverrideThrowableToString") // We intentionally hide the class name. +@NullMarked final class AssertionErrorWithFacts extends AssertionError implements ErrorWithFacts { private final ImmutableList facts; diff --git a/core/src/main/java/com/google/common/truth/BigDecimalSubject.java b/core/src/main/java/com/google/common/truth/BigDecimalSubject.java index dbba59170..0bde0e79f 100644 --- a/core/src/main/java/com/google/common/truth/BigDecimalSubject.java +++ b/core/src/main/java/com/google/common/truth/BigDecimalSubject.java @@ -20,13 +20,15 @@ import static com.google.common.truth.Fact.simpleFact; import java.math.BigDecimal; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link BigDecimal} typed subjects. * * @author Kurt Alfred Kluever */ +@NullMarked public final class BigDecimalSubject extends ComparableSubject { private final @Nullable BigDecimal actual; diff --git a/core/src/main/java/com/google/common/truth/BooleanSubject.java b/core/src/main/java/com/google/common/truth/BooleanSubject.java index 4e7f3da0a..406845e8d 100644 --- a/core/src/main/java/com/google/common/truth/BooleanSubject.java +++ b/core/src/main/java/com/google/common/truth/BooleanSubject.java @@ -17,13 +17,15 @@ import static com.google.common.truth.Fact.simpleFact; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for boolean subjects. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class BooleanSubject extends Subject { private final @Nullable Boolean actual; diff --git a/core/src/main/java/com/google/common/truth/ClassSubject.java b/core/src/main/java/com/google/common/truth/ClassSubject.java index 1ef1b9508..2e32da77a 100644 --- a/core/src/main/java/com/google/common/truth/ClassSubject.java +++ b/core/src/main/java/com/google/common/truth/ClassSubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtIncompatible; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Class} subjects. * * @author Kurt Alfred Kluever */ +@NullMarked @GwtIncompatible("reflection") @J2ktIncompatible public final class ClassSubject extends Subject { diff --git a/core/src/main/java/com/google/common/truth/ComparableSubject.java b/core/src/main/java/com/google/common/truth/ComparableSubject.java index 857f21495..567333008 100644 --- a/core/src/main/java/com/google/common/truth/ComparableSubject.java +++ b/core/src/main/java/com/google/common/truth/ComparableSubject.java @@ -18,7 +18,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.Range; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Comparable} typed subjects. @@ -26,6 +27,7 @@ * @author Kurt Alfred Kluever * @param the type of the object being tested by this {@code ComparableSubject} */ +@NullMarked // TODO(b/136040841): Consider further tightening this to the proper `extends Comparable` public abstract class ComparableSubject> extends Subject { /** diff --git a/core/src/main/java/com/google/common/truth/ComparisonFailureWithFacts.java b/core/src/main/java/com/google/common/truth/ComparisonFailureWithFacts.java index 47608db2c..bf49932a2 100644 --- a/core/src/main/java/com/google/common/truth/ComparisonFailureWithFacts.java +++ b/core/src/main/java/com/google/common/truth/ComparisonFailureWithFacts.java @@ -21,12 +21,14 @@ import com.google.common.collect.ImmutableList; import com.google.common.truth.Platform.PlatformComparisonFailure; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * An {@link AssertionError} (usually a JUnit {@code ComparisonFailure}, but not under GWT) composed * of structured {@link Fact} instances and other string messages. */ +@NullMarked final class ComparisonFailureWithFacts extends PlatformComparisonFailure implements ErrorWithFacts { private final ImmutableList facts; diff --git a/core/src/main/java/com/google/common/truth/ComparisonFailures.java b/core/src/main/java/com/google/common/truth/ComparisonFailures.java index 1e50f49c5..c1cdf5a62 100644 --- a/core/src/main/java/com/google/common/truth/ComparisonFailures.java +++ b/core/src/main/java/com/google/common/truth/ComparisonFailures.java @@ -26,7 +26,8 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Contains part of the code responsible for creating a JUnit {@code ComparisonFailure} (if @@ -42,6 +43,7 @@ * different implementation under GWT/j2cl, where {@code ComparisonFailure} is also unavailable but * we can't just recover from that at runtime. */ +@NullMarked final class ComparisonFailures { static ImmutableList makeComparisonFailureFacts( ImmutableList headFacts, diff --git a/core/src/main/java/com/google/common/truth/Correspondence.java b/core/src/main/java/com/google/common/truth/Correspondence.java index 8059779e6..bedb35ae3 100644 --- a/core/src/main/java/com/google/common/truth/Correspondence.java +++ b/core/src/main/java/com/google/common/truth/Correspondence.java @@ -31,7 +31,8 @@ import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Determines whether an instance of type {@code A} corresponds in some way to an instance of type @@ -65,6 +66,7 @@ * * @author Pete Gillin */ +@NullMarked public abstract class Correspondence { /** diff --git a/core/src/main/java/com/google/common/truth/CustomSubjectBuilder.java b/core/src/main/java/com/google/common/truth/CustomSubjectBuilder.java index 0b84ef88c..20a130e06 100644 --- a/core/src/main/java/com/google/common/truth/CustomSubjectBuilder.java +++ b/core/src/main/java/com/google/common/truth/CustomSubjectBuilder.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; +import org.jspecify.annotations.NullMarked; /** * In a fluent assertion chain, exposes one or more "custom" {@code that} methods, which accept a @@ -35,6 +36,7 @@ * extensions. It explains the cases in which {@code CustomSubjectBuilder} is necessary, and it * links to further instructions. */ +@NullMarked public abstract class CustomSubjectBuilder { /** * In a fluent assertion chain, the argument to the "custom" overload of {@link diff --git a/core/src/main/java/com/google/common/truth/DiffUtils.java b/core/src/main/java/com/google/common/truth/DiffUtils.java index b8b4122e5..c90d3a19d 100644 --- a/core/src/main/java/com/google/common/truth/DiffUtils.java +++ b/core/src/main/java/com/google/common/truth/DiffUtils.java @@ -23,6 +23,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.jspecify.annotations.NullMarked; /** * A custom implementation of the diff algorithm based on the solution described at @@ -30,6 +31,7 @@ * * @author Yun Peng (pcloudy@google.com) */ +@NullMarked final class DiffUtils { // A list of unique strings appeared in compared texts. // The index of each string is its incremental Id. diff --git a/core/src/main/java/com/google/common/truth/DoubleSubject.java b/core/src/main/java/com/google/common/truth/DoubleSubject.java index 58cd50d61..4da26c149 100644 --- a/core/src/main/java/com/google/common/truth/DoubleSubject.java +++ b/core/src/main/java/com/google/common/truth/DoubleSubject.java @@ -26,13 +26,15 @@ import static java.lang.Double.NaN; import static java.lang.Double.doubleToLongBits; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Double} subjects. * * @author Kurt Alfred Kluever */ +@NullMarked public final class DoubleSubject extends ComparableSubject { private static final long NEG_ZERO_BITS = doubleToLongBits(-0.0); diff --git a/core/src/main/java/com/google/common/truth/ErrorWithFacts.java b/core/src/main/java/com/google/common/truth/ErrorWithFacts.java index 61f404b60..9c9e71c85 100644 --- a/core/src/main/java/com/google/common/truth/ErrorWithFacts.java +++ b/core/src/main/java/com/google/common/truth/ErrorWithFacts.java @@ -17,11 +17,13 @@ package com.google.common.truth; import com.google.common.collect.ImmutableList; +import org.jspecify.annotations.NullMarked; /** * Supertype of Truth's {@link AssertionError} subclasses that are created from a list of {@link * Fact} instances. */ +@NullMarked interface ErrorWithFacts { ImmutableList facts(); } diff --git a/core/src/main/java/com/google/common/truth/Expect.java b/core/src/main/java/com/google/common/truth/Expect.java index c5f61010b..b495cebeb 100644 --- a/core/src/main/java/com/google/common/truth/Expect.java +++ b/core/src/main/java/com/google/common/truth/Expect.java @@ -30,7 +30,8 @@ import com.google.errorprone.annotations.concurrent.GuardedBy; import java.util.ArrayList; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import org.junit.internal.AssumptionViolatedException; import org.junit.rules.ErrorCollector; import org.junit.rules.TestRule; @@ -83,6 +84,7 @@ */ @GwtIncompatible("JUnit4") @J2ktIncompatible +@NullMarked public final class Expect extends StandardSubjectBuilder implements TestRule { private static final class ExpectationGatherer implements FailureStrategy { diff --git a/core/src/main/java/com/google/common/truth/ExpectFailure.java b/core/src/main/java/com/google/common/truth/ExpectFailure.java index 5b0360857..9625886cc 100644 --- a/core/src/main/java/com/google/common/truth/ExpectFailure.java +++ b/core/src/main/java/com/google/common/truth/ExpectFailure.java @@ -24,7 +24,8 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.truth.Truth.SimpleAssertionError; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import org.junit.runner.Description; import org.junit.runners.model.Statement; @@ -66,6 +67,7 @@ * also checks that the assertion you're testing uses the supplied {@link FailureStrategy} and calls * {@link FailureStrategy#fail} only once. */ +@NullMarked public final class ExpectFailure implements Platform.JUnitTestRule { private boolean inRuleContext = false; private boolean failureExpected = false; diff --git a/core/src/main/java/com/google/common/truth/Fact.java b/core/src/main/java/com/google/common/truth/Fact.java index b2dadad2d..173a929db 100644 --- a/core/src/main/java/com/google/common/truth/Fact.java +++ b/core/src/main/java/com/google/common/truth/Fact.java @@ -22,7 +22,8 @@ import com.google.common.collect.ImmutableList; import java.io.Serializable; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A string key-value pair in a failure message, such as "expected: abc" or "but was: xyz." @@ -34,6 +35,7 @@ *

If you are writing a custom {@code Subject}, see our tips on writing failure messages. */ +@NullMarked public final class Fact implements Serializable { /** * Creates a fact with the given key and value, which will be printed in a format like "key: diff --git a/core/src/main/java/com/google/common/truth/FailureMetadata.java b/core/src/main/java/com/google/common/truth/FailureMetadata.java index e6d86a740..df13c7db3 100644 --- a/core/src/main/java/com/google/common/truth/FailureMetadata.java +++ b/core/src/main/java/com/google/common/truth/FailureMetadata.java @@ -29,7 +29,8 @@ import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * An opaque, immutable object containing state from the previous calls in the fluent assertion @@ -51,6 +52,7 @@ * using their {@link CustomSubjectBuilder#metadata()} method to get an instance to pass to the * constructor.) */ +@NullMarked public final class FailureMetadata { static FailureMetadata forFailureStrategy(FailureStrategy failureStrategy) { return new FailureMetadata( diff --git a/core/src/main/java/com/google/common/truth/FailureStrategy.java b/core/src/main/java/com/google/common/truth/FailureStrategy.java index b10d5509a..b1cbd225f 100644 --- a/core/src/main/java/com/google/common/truth/FailureStrategy.java +++ b/core/src/main/java/com/google/common/truth/FailureStrategy.java @@ -15,6 +15,7 @@ */ package com.google.common.truth; +import org.jspecify.annotations.NullMarked; /** * Defines what to do when a check fails. @@ -53,6 +54,7 @@ * StandardSubjectBuilder#forCustomFailureStrategy * StandardSubjectBuilder.forCustomFailureStrategy(STRATEGY)}. */ +@NullMarked public interface FailureStrategy { /** * Handles a failure. The parameter is an {@code AssertionError} or subclass thereof, and it diff --git a/core/src/main/java/com/google/common/truth/FloatSubject.java b/core/src/main/java/com/google/common/truth/FloatSubject.java index 19dff124b..47a5db2c1 100644 --- a/core/src/main/java/com/google/common/truth/FloatSubject.java +++ b/core/src/main/java/com/google/common/truth/FloatSubject.java @@ -26,13 +26,15 @@ import static java.lang.Float.NaN; import static java.lang.Float.floatToIntBits; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Float} subjects. * * @author Kurt Alfred Kluever */ +@NullMarked public final class FloatSubject extends ComparableSubject { private static final int NEG_ZERO_BITS = floatToIntBits(-0.0f); diff --git a/core/src/main/java/com/google/common/truth/GraphMatching.java b/core/src/main/java/com/google/common/truth/GraphMatching.java index ef21fef5b..58f37f68d 100644 --- a/core/src/main/java/com/google/common/truth/GraphMatching.java +++ b/core/src/main/java/com/google/common/truth/GraphMatching.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Queue; +import org.jspecify.annotations.NullMarked; /** * Helper routines related to graph @@ -34,6 +35,7 @@ * * @author Pete Gillin */ +@NullMarked final class GraphMatching { /** diff --git a/core/src/main/java/com/google/common/truth/GuavaOptionalSubject.java b/core/src/main/java/com/google/common/truth/GuavaOptionalSubject.java index 86a7f2c9c..fb530b2fd 100644 --- a/core/src/main/java/com/google/common/truth/GuavaOptionalSubject.java +++ b/core/src/main/java/com/google/common/truth/GuavaOptionalSubject.java @@ -19,7 +19,8 @@ import static com.google.common.truth.Fact.simpleFact; import com.google.common.base.Optional; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for Guava {@link Optional} subjects. @@ -28,6 +29,7 @@ * * @author Christian Gruber */ +@NullMarked public final class GuavaOptionalSubject extends Subject { @SuppressWarnings("NullableOptional") // Truth always accepts nulls, no matter the type private final @Nullable Optional actual; diff --git a/core/src/main/java/com/google/common/truth/IgnoreJRERequirement.java b/core/src/main/java/com/google/common/truth/IgnoreJRERequirement.java index a2d484272..96f0b7b7d 100644 --- a/core/src/main/java/com/google/common/truth/IgnoreJRERequirement.java +++ b/core/src/main/java/com/google/common/truth/IgnoreJRERequirement.java @@ -21,9 +21,11 @@ import static java.lang.annotation.ElementType.TYPE; import java.lang.annotation.Target; +import org.jspecify.annotations.NullMarked; /** * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. */ @Target({METHOD, CONSTRUCTOR, TYPE}) +@NullMarked @interface IgnoreJRERequirement {} diff --git a/core/src/main/java/com/google/common/truth/IntStreamSubject.java b/core/src/main/java/com/google/common/truth/IntStreamSubject.java index 9503747c8..1c1a6f6a7 100644 --- a/core/src/main/java/com/google/common/truth/IntStreamSubject.java +++ b/core/src/main/java/com/google/common/truth/IntStreamSubject.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.stream.IntStream; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link IntStream} subjects. diff --git a/core/src/main/java/com/google/common/truth/IntegerSubject.java b/core/src/main/java/com/google/common/truth/IntegerSubject.java index ba3119c2d..2ceca9179 100644 --- a/core/src/main/java/com/google/common/truth/IntegerSubject.java +++ b/core/src/main/java/com/google/common/truth/IntegerSubject.java @@ -20,7 +20,8 @@ import static com.google.common.truth.Fact.fact; import static com.google.common.truth.MathUtil.equalWithinTolerance; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Integer} subjects. @@ -29,6 +30,7 @@ * @author Christian Gruber (cgruber@israfil.net) * @author Kurt Alfred Kluever */ +@NullMarked public class IntegerSubject extends ComparableSubject { private final @Nullable Integer actual; diff --git a/core/src/main/java/com/google/common/truth/IterableSubject.java b/core/src/main/java/com/google/common/truth/IterableSubject.java index 1f5a64270..312655837 100644 --- a/core/src/main/java/com/google/common/truth/IterableSubject.java +++ b/core/src/main/java/com/google/common/truth/IterableSubject.java @@ -67,7 +67,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Iterable} subjects. @@ -88,6 +89,7 @@ * @author Pete Gillin */ // Can't be final since MultisetSubject and SortedSetSubject extend it +@NullMarked public class IterableSubject extends Subject { private final @Nullable Iterable actual; diff --git a/core/src/main/java/com/google/common/truth/LazyMessage.java b/core/src/main/java/com/google/common/truth/LazyMessage.java index 2e6861a76..a70e94da1 100644 --- a/core/src/main/java/com/google/common/truth/LazyMessage.java +++ b/core/src/main/java/com/google/common/truth/LazyMessage.java @@ -20,8 +20,10 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; +@NullMarked final class LazyMessage { private final String format; private final @Nullable Object[] args; diff --git a/core/src/main/java/com/google/common/truth/LongStreamSubject.java b/core/src/main/java/com/google/common/truth/LongStreamSubject.java index 073c2d847..01e680ca7 100644 --- a/core/src/main/java/com/google/common/truth/LongStreamSubject.java +++ b/core/src/main/java/com/google/common/truth/LongStreamSubject.java @@ -23,7 +23,7 @@ import java.util.List; import java.util.stream.LongStream; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link LongStream} subjects. diff --git a/core/src/main/java/com/google/common/truth/LongSubject.java b/core/src/main/java/com/google/common/truth/LongSubject.java index 32ca51593..4b0ae7bb8 100644 --- a/core/src/main/java/com/google/common/truth/LongSubject.java +++ b/core/src/main/java/com/google/common/truth/LongSubject.java @@ -20,7 +20,8 @@ import static com.google.common.truth.Fact.fact; import static com.google.common.truth.MathUtil.equalWithinTolerance; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@code long} subjects. @@ -29,6 +30,7 @@ * @author Christian Gruber (cgruber@israfil.net) * @author Kurt Alfred Kluever */ +@NullMarked public class LongSubject extends ComparableSubject { private final @Nullable Long actual; diff --git a/core/src/main/java/com/google/common/truth/MapSubject.java b/core/src/main/java/com/google/common/truth/MapSubject.java index 0f8db9d5e..b1009de9c 100644 --- a/core/src/main/java/com/google/common/truth/MapSubject.java +++ b/core/src/main/java/com/google/common/truth/MapSubject.java @@ -42,7 +42,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Map} subjects. @@ -50,6 +51,7 @@ * @author Christian Gruber * @author Kurt Alfred Kluever */ +@NullMarked public class MapSubject extends Subject { private final @Nullable Map actual; diff --git a/core/src/main/java/com/google/common/truth/MathUtil.java b/core/src/main/java/com/google/common/truth/MathUtil.java index 2fb44da5c..986cd1e5c 100644 --- a/core/src/main/java/com/google/common/truth/MathUtil.java +++ b/core/src/main/java/com/google/common/truth/MathUtil.java @@ -19,8 +19,10 @@ import static java.lang.Math.subtractExact; import com.google.common.primitives.Doubles; +import org.jspecify.annotations.NullMarked; /** Math utilities to be shared by numeric subjects. */ +@NullMarked final class MathUtil { private MathUtil() {} diff --git a/core/src/main/java/com/google/common/truth/MultimapSubject.java b/core/src/main/java/com/google/common/truth/MultimapSubject.java index 4a02216fc..4f767350e 100644 --- a/core/src/main/java/com/google/common/truth/MultimapSubject.java +++ b/core/src/main/java/com/google/common/truth/MultimapSubject.java @@ -46,7 +46,8 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Multimap} subjects. @@ -54,6 +55,7 @@ * @author Daniel Ploch * @author Kurt Alfred Kluever */ +@NullMarked public class MultimapSubject extends Subject { /** Ordered implementation that does nothing because an earlier check already caused a failure. */ diff --git a/core/src/main/java/com/google/common/truth/MultisetSubject.java b/core/src/main/java/com/google/common/truth/MultisetSubject.java index da1be3585..0ab2450c0 100644 --- a/core/src/main/java/com/google/common/truth/MultisetSubject.java +++ b/core/src/main/java/com/google/common/truth/MultisetSubject.java @@ -19,13 +19,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.collect.Multiset; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Multiset} subjects. * * @author Kurt Alfred Kluever */ +@NullMarked public final class MultisetSubject extends IterableSubject { private final @Nullable Multiset actual; diff --git a/core/src/main/java/com/google/common/truth/ObjectArraySubject.java b/core/src/main/java/com/google/common/truth/ObjectArraySubject.java index bfba31476..b50caac56 100644 --- a/core/src/main/java/com/google/common/truth/ObjectArraySubject.java +++ b/core/src/main/java/com/google/common/truth/ObjectArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.Arrays; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code Object[]} and more generically {@code T[]}. * * @author Christian Gruber */ +@NullMarked public final class ObjectArraySubject extends AbstractArraySubject { private final T @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/OptionalDoubleSubject.java b/core/src/main/java/com/google/common/truth/OptionalDoubleSubject.java index fa9d94025..2aefa170f 100644 --- a/core/src/main/java/com/google/common/truth/OptionalDoubleSubject.java +++ b/core/src/main/java/com/google/common/truth/OptionalDoubleSubject.java @@ -19,7 +19,7 @@ import static com.google.common.truth.Fact.simpleFact; import java.util.OptionalDouble; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for Java 8 {@link OptionalDouble} subjects. diff --git a/core/src/main/java/com/google/common/truth/OptionalIntSubject.java b/core/src/main/java/com/google/common/truth/OptionalIntSubject.java index b4350536c..12d0ed932 100644 --- a/core/src/main/java/com/google/common/truth/OptionalIntSubject.java +++ b/core/src/main/java/com/google/common/truth/OptionalIntSubject.java @@ -19,7 +19,7 @@ import static com.google.common.truth.Fact.simpleFact; import java.util.OptionalInt; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for Java 8 {@link OptionalInt} subjects. diff --git a/core/src/main/java/com/google/common/truth/OptionalLongSubject.java b/core/src/main/java/com/google/common/truth/OptionalLongSubject.java index 535fd1b3b..ddf51066a 100644 --- a/core/src/main/java/com/google/common/truth/OptionalLongSubject.java +++ b/core/src/main/java/com/google/common/truth/OptionalLongSubject.java @@ -19,7 +19,7 @@ import static com.google.common.truth.Fact.simpleFact; import java.util.OptionalLong; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for Java 8 {@link OptionalLong} subjects. diff --git a/core/src/main/java/com/google/common/truth/OptionalSubject.java b/core/src/main/java/com/google/common/truth/OptionalSubject.java index f6cac1ef5..246888041 100644 --- a/core/src/main/java/com/google/common/truth/OptionalSubject.java +++ b/core/src/main/java/com/google/common/truth/OptionalSubject.java @@ -19,7 +19,7 @@ import static com.google.common.truth.Fact.simpleFact; import java.util.Optional; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for Java 8 {@link Optional} subjects. diff --git a/core/src/main/java/com/google/common/truth/Ordered.java b/core/src/main/java/com/google/common/truth/Ordered.java index 2f7efed38..2eb1f0d18 100644 --- a/core/src/main/java/com/google/common/truth/Ordered.java +++ b/core/src/main/java/com/google/common/truth/Ordered.java @@ -15,6 +15,7 @@ */ package com.google.common.truth; +import org.jspecify.annotations.NullMarked; /** * Returned by calls like {@link IterableSubject#containsExactly}, {@code Ordered} lets the caller @@ -26,6 +27,7 @@ * assertThat(supportedCharsets).containsExactly("UTF-8", "US-ASCII").inOrder(); // does check order * } */ +@NullMarked public interface Ordered { /** diff --git a/core/src/main/java/com/google/common/truth/Platform.java b/core/src/main/java/com/google/common/truth/Platform.java index 30f7277dd..69944c1e4 100644 --- a/core/src/main/java/com/google/common/truth/Platform.java +++ b/core/src/main/java/com/google/common/truth/Platform.java @@ -32,7 +32,8 @@ import java.lang.reflect.Method; import java.util.List; import java.util.regex.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import org.junit.ComparisonFailure; import org.junit.rules.TestRule; @@ -42,6 +43,7 @@ * * @author Christian Gruber (cgruber@google.com) */ +@NullMarked final class Platform { private Platform() {} diff --git a/core/src/main/java/com/google/common/truth/PrimitiveBooleanArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveBooleanArraySubject.java index 33ff6d895..30e221d9c 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveBooleanArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveBooleanArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Booleans; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code boolean[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveBooleanArraySubject extends AbstractArraySubject { private final boolean @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveByteArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveByteArraySubject.java index f8169ca4d..510d953d6 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveByteArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveByteArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Bytes; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code byte[]}. * * @author Kurt Alfred Kluever */ +@NullMarked public final class PrimitiveByteArraySubject extends AbstractArraySubject { private final byte @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveCharArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveCharArraySubject.java index 79e6f12eb..bfeceea06 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveCharArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveCharArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Chars; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code char[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveCharArraySubject extends AbstractArraySubject { private final char @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveDoubleArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveDoubleArraySubject.java index 6fdb27507..840b6f704 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveDoubleArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveDoubleArraySubject.java @@ -23,13 +23,15 @@ import com.google.common.primitives.Doubles; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.Arrays; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code double[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveDoubleArraySubject extends AbstractArraySubject { private final double @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveFloatArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveFloatArraySubject.java index 339a4d5be..c53267d0f 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveFloatArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveFloatArraySubject.java @@ -23,13 +23,15 @@ import com.google.common.primitives.Floats; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.Arrays; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code float[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveFloatArraySubject extends AbstractArraySubject { private final float @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveIntArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveIntArraySubject.java index b6c64634d..f2458b88c 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveIntArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveIntArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Ints; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code int[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveIntArraySubject extends AbstractArraySubject { private final int @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveLongArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveLongArraySubject.java index 074410863..4b5ed5ebe 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveLongArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveLongArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Longs; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code long[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveLongArraySubject extends AbstractArraySubject { private final long @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/PrimitiveShortArraySubject.java b/core/src/main/java/com/google/common/truth/PrimitiveShortArraySubject.java index dcefab478..ff36a947e 100644 --- a/core/src/main/java/com/google/common/truth/PrimitiveShortArraySubject.java +++ b/core/src/main/java/com/google/common/truth/PrimitiveShortArraySubject.java @@ -18,13 +18,15 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.primitives.Shorts; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * A Subject for {@code short[]}. * * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class PrimitiveShortArraySubject extends AbstractArraySubject { private final short @Nullable [] actual; diff --git a/core/src/main/java/com/google/common/truth/SimpleSubjectBuilder.java b/core/src/main/java/com/google/common/truth/SimpleSubjectBuilder.java index 80caa364c..7bae5be04 100644 --- a/core/src/main/java/com/google/common/truth/SimpleSubjectBuilder.java +++ b/core/src/main/java/com/google/common/truth/SimpleSubjectBuilder.java @@ -17,7 +17,8 @@ import static com.google.common.base.Preconditions.checkNotNull; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * In a fluent assertion chain, exposes the most common {@code that} method, which accepts a value @@ -31,6 +32,7 @@ *

You won't extend this type. When you write a custom subject, see our doc on extensions. */ +@NullMarked public final class SimpleSubjectBuilder { private final FailureMetadata metadata; private final Subject.Factory subjectFactory; diff --git a/core/src/main/java/com/google/common/truth/StackTraceCleaner.java b/core/src/main/java/com/google/common/truth/StackTraceCleaner.java index 5efc43a0f..290aea0d1 100644 --- a/core/src/main/java/com/google/common/truth/StackTraceCleaner.java +++ b/core/src/main/java/com/google/common/truth/StackTraceCleaner.java @@ -27,11 +27,13 @@ import java.util.List; import java.util.ListIterator; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** Utility that cleans stack traces to remove noise from common frameworks. */ @GwtIncompatible @J2ktIncompatible +@NullMarked final class StackTraceCleaner { static final String CLEANER_LINK = "https://goo.gl/aH3UyP"; diff --git a/core/src/main/java/com/google/common/truth/StandardSubjectBuilder.java b/core/src/main/java/com/google/common/truth/StandardSubjectBuilder.java index 5413182f7..7a450367d 100644 --- a/core/src/main/java/com/google/common/truth/StandardSubjectBuilder.java +++ b/core/src/main/java/com/google/common/truth/StandardSubjectBuilder.java @@ -33,7 +33,8 @@ import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * In a fluent assertion chain, an object with which you can do any of the following: @@ -53,6 +54,7 @@ *

You won't extend this type. When you write a custom subject, see our doc on extensions. */ +@NullMarked public class StandardSubjectBuilder { /** * Returns a new instance that invokes the given {@code FailureStrategy} when a check fails. Most diff --git a/core/src/main/java/com/google/common/truth/StreamSubject.java b/core/src/main/java/com/google/common/truth/StreamSubject.java index a774cc994..2baed2ccd 100644 --- a/core/src/main/java/com/google/common/truth/StreamSubject.java +++ b/core/src/main/java/com/google/common/truth/StreamSubject.java @@ -25,7 +25,7 @@ import java.util.Comparator; import java.util.List; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Stream} subjects. diff --git a/core/src/main/java/com/google/common/truth/StringSubject.java b/core/src/main/java/com/google/common/truth/StringSubject.java index 597bcd9bb..8e71cc113 100644 --- a/core/src/main/java/com/google/common/truth/StringSubject.java +++ b/core/src/main/java/com/google/common/truth/StringSubject.java @@ -23,7 +23,8 @@ import com.google.common.annotations.GwtIncompatible; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for string subjects. @@ -31,6 +32,7 @@ * @author David Saff * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public class StringSubject extends ComparableSubject { private final @Nullable String actual; diff --git a/core/src/main/java/com/google/common/truth/Subject.java b/core/src/main/java/com/google/common/truth/Subject.java index bcb8e4d0d..d97f3791b 100644 --- a/core/src/main/java/com/google/common/truth/Subject.java +++ b/core/src/main/java/com/google/common/truth/Subject.java @@ -53,7 +53,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * An object that lets you perform checks on the value under test. For example, {@code Subject} @@ -72,6 +73,7 @@ * @author David Saff * @author Christian Gruber */ +@NullMarked public class Subject { /** * In a fluent assertion chain, the argument to the common overload of {@link diff --git a/core/src/main/java/com/google/common/truth/SubjectUtils.java b/core/src/main/java/com/google/common/truth/SubjectUtils.java index 7668beb52..20fe72e15 100644 --- a/core/src/main/java/com/google/common/truth/SubjectUtils.java +++ b/core/src/main/java/com/google/common/truth/SubjectUtils.java @@ -36,7 +36,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Utility methods used in {@code Subject} implementors. @@ -44,6 +45,7 @@ * @author Christian Gruber * @author Jens Nyman */ +@NullMarked final class SubjectUtils { private SubjectUtils() {} diff --git a/core/src/main/java/com/google/common/truth/TableSubject.java b/core/src/main/java/com/google/common/truth/TableSubject.java index 9ab8f5c3e..21e9e1041 100644 --- a/core/src/main/java/com/google/common/truth/TableSubject.java +++ b/core/src/main/java/com/google/common/truth/TableSubject.java @@ -23,13 +23,15 @@ import com.google.common.collect.Table; import com.google.common.collect.Table.Cell; import com.google.common.collect.Tables; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Table} subjects. * * @author Kurt Alfred Kluever */ +@NullMarked public final class TableSubject extends Subject { private final @Nullable Table actual; diff --git a/core/src/main/java/com/google/common/truth/ThrowableSubject.java b/core/src/main/java/com/google/common/truth/ThrowableSubject.java index 08306bcb2..8566dbd70 100644 --- a/core/src/main/java/com/google/common/truth/ThrowableSubject.java +++ b/core/src/main/java/com/google/common/truth/ThrowableSubject.java @@ -17,7 +17,8 @@ import static com.google.common.base.Preconditions.checkNotNull; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Propositions for {@link Throwable} subjects. @@ -38,6 +39,7 @@ * * @author Kurt Alfred Kluever */ +@NullMarked public class ThrowableSubject extends Subject { private final @Nullable Throwable actual; diff --git a/core/src/main/java/com/google/common/truth/Truth.java b/core/src/main/java/com/google/common/truth/Truth.java index 8b16b6c44..7ece562cf 100644 --- a/core/src/main/java/com/google/common/truth/Truth.java +++ b/core/src/main/java/com/google/common/truth/Truth.java @@ -32,7 +32,8 @@ import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * The primary entry point for Truth, a library for fluent test @@ -78,6 +79,7 @@ * @author David Saff * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked public final class Truth { private Truth() {} diff --git a/core/src/main/java/com/google/common/truth/Truth8.java b/core/src/main/java/com/google/common/truth/Truth8.java index 23bd46764..e28ad49e0 100644 --- a/core/src/main/java/com/google/common/truth/Truth8.java +++ b/core/src/main/java/com/google/common/truth/Truth8.java @@ -25,7 +25,7 @@ import java.util.stream.IntStream; import java.util.stream.LongStream; import java.util.stream.Stream; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * The obsolete entry point for assertions about Java 8 types. diff --git a/core/src/main/java/com/google/common/truth/TruthFailureSubject.java b/core/src/main/java/com/google/common/truth/TruthFailureSubject.java index eb9f93878..d4b6d6066 100644 --- a/core/src/main/java/com/google/common/truth/TruthFailureSubject.java +++ b/core/src/main/java/com/google/common/truth/TruthFailureSubject.java @@ -23,7 +23,8 @@ import static com.google.common.truth.Fact.simpleFact; import com.google.common.collect.ImmutableList; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** * Subject for {@link AssertionError} objects thrown by Truth. {@code TruthFailureSubject} contains @@ -38,6 +39,7 @@ *

This class accepts any {@code AssertionError} value, but it will throw an exception if a * caller tries to access the facts of an error that wasn't produced by Truth. */ +@NullMarked public final class TruthFailureSubject extends ThrowableSubject { static final Fact HOW_TO_TEST_KEYS_WITHOUT_VALUES = simpleFact( diff --git a/core/src/main/java/com/google/common/truth/TruthJUnit.java b/core/src/main/java/com/google/common/truth/TruthJUnit.java index 648d51236..94f47cb75 100644 --- a/core/src/main/java/com/google/common/truth/TruthJUnit.java +++ b/core/src/main/java/com/google/common/truth/TruthJUnit.java @@ -15,6 +15,7 @@ */ package com.google.common.truth; +import org.jspecify.annotations.NullMarked; import org.junit.AssumptionViolatedException; /** @@ -39,6 +40,7 @@ * @author David Saff * @author Christian Gruber (cgruber@israfil.net) */ +@NullMarked @com.google.common.annotations.GwtIncompatible("JUnit4") public final class TruthJUnit { @SuppressWarnings("ConstantCaseForConstants") // Despite the "Builder" name, it's not mutable. diff --git a/core/src/main/java/com/google/common/truth/UsedByReflection.java b/core/src/main/java/com/google/common/truth/UsedByReflection.java index ce41dfd8d..50713931e 100644 --- a/core/src/main/java/com/google/common/truth/UsedByReflection.java +++ b/core/src/main/java/com/google/common/truth/UsedByReflection.java @@ -20,6 +20,8 @@ import static java.lang.annotation.ElementType.METHOD; import java.lang.annotation.Target; +import org.jspecify.annotations.NullMarked; @Target({METHOD, FIELD, CONSTRUCTOR}) +@NullMarked @interface UsedByReflection {} diff --git a/core/src/main/java/com/google/common/truth/super/com/google/common/truth/Platform.java b/core/src/main/java/com/google/common/truth/super/com/google/common/truth/Platform.java index 3bb24af2e..e50bd28ea 100644 --- a/core/src/main/java/com/google/common/truth/super/com/google/common/truth/Platform.java +++ b/core/src/main/java/com/google/common/truth/super/com/google/common/truth/Platform.java @@ -23,7 +23,8 @@ import jsinterop.annotations.JsMethod; import jsinterop.annotations.JsProperty; import jsinterop.annotations.JsType; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; /** @@ -32,6 +33,7 @@ * * @author Christian Gruber (cgruber@google.com) */ +@NullMarked final class Platform { private Platform() {} diff --git a/core/src/test/java/com/google/common/truth/DoubleSubjectTest.java b/core/src/test/java/com/google/common/truth/DoubleSubjectTest.java index e6535584d..f65e2603c 100644 --- a/core/src/test/java/com/google/common/truth/DoubleSubjectTest.java +++ b/core/src/test/java/com/google/common/truth/DoubleSubjectTest.java @@ -23,7 +23,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.truth.ExpectFailure.SimpleSubjectBuilderCallback; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/core/src/test/java/com/google/common/truth/FloatSubjectTest.java b/core/src/test/java/com/google/common/truth/FloatSubjectTest.java index b528ab090..b14da38fc 100644 --- a/core/src/test/java/com/google/common/truth/FloatSubjectTest.java +++ b/core/src/test/java/com/google/common/truth/FloatSubjectTest.java @@ -23,7 +23,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.truth.ExpectFailure.SimpleSubjectBuilderCallback; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/core/src/test/java/com/google/common/truth/SubjectTest.java b/core/src/test/java/com/google/common/truth/SubjectTest.java index 9544f52f4..48b74b3dc 100644 --- a/core/src/test/java/com/google/common/truth/SubjectTest.java +++ b/core/src/test/java/com/google/common/truth/SubjectTest.java @@ -42,7 +42,7 @@ import java.math.BigDecimal; import java.util.Arrays; import java.util.Iterator; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/core/src/test/java/com/google/common/truth/TestCorrespondences.java b/core/src/test/java/com/google/common/truth/TestCorrespondences.java index d2488d5ca..0c5c3af7c 100644 --- a/core/src/test/java/com/google/common/truth/TestCorrespondences.java +++ b/core/src/test/java/com/google/common/truth/TestCorrespondences.java @@ -23,7 +23,7 @@ import com.google.common.base.Splitter; import com.google.common.primitives.Ints; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** {@link Correspondence} implementations for testing purposes. */ final class TestCorrespondences { diff --git a/core/src/test/java/com/google/common/truth/extension/EmployeeSubject.java b/core/src/test/java/com/google/common/truth/extension/EmployeeSubject.java index 224bf6539..72c6a1778 100644 --- a/core/src/test/java/com/google/common/truth/extension/EmployeeSubject.java +++ b/core/src/test/java/com/google/common/truth/extension/EmployeeSubject.java @@ -23,7 +23,7 @@ import com.google.common.truth.LongSubject; import com.google.common.truth.StringSubject; import com.google.common.truth.Subject; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * A Truth subject for {@link Employee}. diff --git a/extensions/java8/pom.xml b/extensions/java8/pom.xml index 951dc43a8..95fb6505a 100644 --- a/extensions/java8/pom.xml +++ b/extensions/java8/pom.xml @@ -20,8 +20,8 @@ truth - org.checkerframework - checker-qual + org.jspecify + jspecify diff --git a/extensions/liteproto/pom.xml b/extensions/liteproto/pom.xml index 7474ee5a4..a70faa5d8 100644 --- a/extensions/liteproto/pom.xml +++ b/extensions/liteproto/pom.xml @@ -25,8 +25,8 @@ guava - org.checkerframework - checker-qual + org.jspecify + jspecify com.google.auto.value diff --git a/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoSubject.java b/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoSubject.java index 3a0774eed..0fcea474f 100644 --- a/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoSubject.java +++ b/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoSubject.java @@ -27,7 +27,7 @@ import com.google.errorprone.annotations.CheckReturnValue; import com.google.protobuf.MessageLite; import java.util.regex.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subjects for the Lite version of Protocol Buffers. diff --git a/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoTruth.java b/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoTruth.java index 94895d931..d3179b588 100644 --- a/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoTruth.java +++ b/extensions/liteproto/src/main/java/com/google/common/truth/extensions/proto/LiteProtoTruth.java @@ -21,7 +21,7 @@ import com.google.common.truth.Subject; import com.google.errorprone.annotations.CheckReturnValue; import com.google.protobuf.MessageLite; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * A set of static methods to begin a Truth assertion chain for the lite version of protocol diff --git a/extensions/liteproto/src/test/java/com/google/common/truth/extensions/proto/LiteProtoSubjectTest.java b/extensions/liteproto/src/test/java/com/google/common/truth/extensions/proto/LiteProtoSubjectTest.java index 372100e45..eba52260c 100644 --- a/extensions/liteproto/src/test/java/com/google/common/truth/extensions/proto/LiteProtoSubjectTest.java +++ b/extensions/liteproto/src/test/java/com/google/common/truth/extensions/proto/LiteProtoSubjectTest.java @@ -30,7 +30,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.regex.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/extensions/proto/pom.xml b/extensions/proto/pom.xml index 7c07acc58..d52855799 100644 --- a/extensions/proto/pom.xml +++ b/extensions/proto/pom.xml @@ -29,8 +29,8 @@ guava - org.checkerframework - checker-qual + org.jspecify + jspecify com.google.auto.value diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/FluentEqualityConfig.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/FluentEqualityConfig.java index 1c425bd46..b3c994a4e 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/FluentEqualityConfig.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/FluentEqualityConfig.java @@ -34,7 +34,7 @@ import com.google.protobuf.ExtensionRegistry; import com.google.protobuf.Message; import com.google.protobuf.TypeRegistry; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * A specification for a {@link ProtoTruthMessageDifferencer} for comparing two individual diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosSubject.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosSubject.java index b5f342bb7..427fe4b9f 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosSubject.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosSubject.java @@ -34,7 +34,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Comparator; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subject for the iterables of protocol buffers. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosUsingCorrespondence.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosUsingCorrespondence.java index 9c366f588..f7a15b35e 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosUsingCorrespondence.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/IterableOfProtosUsingCorrespondence.java @@ -19,7 +19,7 @@ import com.google.common.truth.Ordered; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.protobuf.Message; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Comparison methods, which enforce the rules set in prior calls to {@link diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesFluentAssertion.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesFluentAssertion.java index f1aa7af10..f0ff0bed6 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesFluentAssertion.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesFluentAssertion.java @@ -22,7 +22,7 @@ import com.google.protobuf.Message; import com.google.protobuf.TypeRegistry; import java.util.Map; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Fluent API to perform detailed, customizable comparison of maps containing protocol buffers as diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesSubject.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesSubject.java index 9248843e9..662ddb0d9 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesSubject.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MapWithProtoValuesSubject.java @@ -32,7 +32,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subject for maps with protocol buffers for values. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesFluentAssertion.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesFluentAssertion.java index 838389b4e..937bed8c3 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesFluentAssertion.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesFluentAssertion.java @@ -22,7 +22,7 @@ import com.google.protobuf.ExtensionRegistry; import com.google.protobuf.Message; import com.google.protobuf.TypeRegistry; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Fluent API to perform detailed, customizable comparison of {@link Multimap}s containing protocol diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesSubject.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesSubject.java index 8b37ee95f..00bf56050 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesSubject.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/MultimapWithProtoValuesSubject.java @@ -35,7 +35,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subject for {@link Multimap}s with protocol buffers for values. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoFluentAssertion.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoFluentAssertion.java index 3047caba0..6b5624f9c 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoFluentAssertion.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoFluentAssertion.java @@ -19,7 +19,7 @@ import com.google.protobuf.ExtensionRegistry; import com.google.protobuf.Message; import com.google.protobuf.TypeRegistry; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Fluent API to perform detailed, customizable comparison of Protocol buffers. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubject.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubject.java index ba96333d9..1388f9004 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubject.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubject.java @@ -29,7 +29,7 @@ import com.google.protobuf.Message; import com.google.protobuf.TypeRegistry; import java.util.Arrays; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subject for the full version of Protocol Buffers. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubjectBuilder.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubjectBuilder.java index 0d813aa20..e7015c189 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubjectBuilder.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoSubjectBuilder.java @@ -22,7 +22,7 @@ import com.google.protobuf.Message; import com.google.protobuf.MessageLite; import java.util.Map; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * {@link CustomSubjectBuilder} which aggregates all Proto-related {@link diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruth.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruth.java index fbdaa9e01..7daa0d1dc 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruth.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruth.java @@ -27,7 +27,7 @@ import com.google.protobuf.Message; import com.google.protobuf.MessageLite; import java.util.Map; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * A set of static methods to begin a Truth assertion chain for protocol buffers. diff --git a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruthMessageDifferencer.java b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruthMessageDifferencer.java index 8ecfe0b45..d5ec1a803 100644 --- a/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruthMessageDifferencer.java +++ b/extensions/proto/src/main/java/com/google/common/truth/extensions/proto/ProtoTruthMessageDifferencer.java @@ -49,7 +49,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Tool to differentiate two messages with the same {@link Descriptor}, subject to the rules set out diff --git a/extensions/proto/src/test/java/com/google/common/truth/extensions/proto/ProtoSubjectTestBase.java b/extensions/proto/src/test/java/com/google/common/truth/extensions/proto/ProtoSubjectTestBase.java index cc7fd0a3e..e686a4f4a 100644 --- a/extensions/proto/src/test/java/com/google/common/truth/extensions/proto/ProtoSubjectTestBase.java +++ b/extensions/proto/src/test/java/com/google/common/truth/extensions/proto/ProtoSubjectTestBase.java @@ -45,7 +45,7 @@ import java.util.Map; import java.util.Set; import java.util.regex.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; import org.junit.Rule; /** Base class for testing {@link ProtoSubject} methods. */ diff --git a/extensions/re2j/src/main/java/com/google/common/truth/extensions/re2j/Re2jSubjects.java b/extensions/re2j/src/main/java/com/google/common/truth/extensions/re2j/Re2jSubjects.java index 1dc387f5d..ecaa6a61d 100644 --- a/extensions/re2j/src/main/java/com/google/common/truth/extensions/re2j/Re2jSubjects.java +++ b/extensions/re2j/src/main/java/com/google/common/truth/extensions/re2j/Re2jSubjects.java @@ -21,7 +21,7 @@ import com.google.common.truth.FailureMetadata; import com.google.common.truth.Subject; import com.google.re2j.Pattern; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Truth subjects for re2j regular expressions. diff --git a/pom.xml b/pom.xml index 26067bf64..c502b7ad9 100644 --- a/pom.xml +++ b/pom.xml @@ -71,9 +71,9 @@ ${guava.android.version} - org.checkerframework - checker-qual - 3.44.0 + org.jspecify + jspecify + 0.3.0 junit diff --git a/refactorings/src/main/java/com/google/common/truth/refactorings/CorrespondenceSubclassToFactoryCall.java b/refactorings/src/main/java/com/google/common/truth/refactorings/CorrespondenceSubclassToFactoryCall.java index 8b298f351..7bd0076cd 100644 --- a/refactorings/src/main/java/com/google/common/truth/refactorings/CorrespondenceSubclassToFactoryCall.java +++ b/refactorings/src/main/java/com/google/common/truth/refactorings/CorrespondenceSubclassToFactoryCall.java @@ -83,7 +83,7 @@ import java.util.Optional; import java.util.Set; import javax.lang.model.element.Modifier; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Refactors some subclasses of {@code Correspondence} to instead call {@code Correspondence.from}. diff --git a/refactorings/src/main/java/com/google/common/truth/refactorings/FailWithFacts.java b/refactorings/src/main/java/com/google/common/truth/refactorings/FailWithFacts.java index 30cb5207d..f2fa8506a 100644 --- a/refactorings/src/main/java/com/google/common/truth/refactorings/FailWithFacts.java +++ b/refactorings/src/main/java/com/google/common/truth/refactorings/FailWithFacts.java @@ -40,7 +40,7 @@ import com.sun.source.tree.MemberSelectTree; import com.sun.source.tree.MethodInvocationTree; import java.util.List; -import org.checkerframework.checker.nullness.qual.Nullable; +import org.jspecify.annotations.Nullable; /** * Migrates Truth subjects from the old {@code fail(String, Object)} to the new {@code