diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/truth/SpannedSubject.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/truth/SpannedSubject.java index 9a30b04202..4b8d31e6e1 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/truth/SpannedSubject.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/truth/SpannedSubject.java @@ -16,6 +16,7 @@ */ package androidx.media3.test.utils.truth; +import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.truth.Fact.fact; import static com.google.common.truth.Fact.simpleFact; import static com.google.common.truth.Truth.assertAbout; @@ -761,9 +762,9 @@ public final class SpannedSubject extends Subject { private static final class SpanFlagsSubject extends Subject implements AndSpanFlags, WithSpanFlags { - private final List flags; + @Nullable private final List flags; - private SpanFlagsSubject(FailureMetadata metadata, List flags) { + private SpanFlagsSubject(FailureMetadata metadata, @Nullable List flags) { super(metadata, flags); this.flags = flags; } @@ -795,17 +796,19 @@ public final class SpannedSubject extends Subject { private static Factory> alignmentSpans( Spanned actualSpanned) { - return (FailureMetadata metadata, List spans) -> + return (FailureMetadata metadata, @Nullable List spans) -> new AlignmentSpansSubject(metadata, spans, actualSpanned); } private static final class AlignmentSpansSubject extends Subject implements Aligned { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private AlignmentSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -816,7 +819,7 @@ public final class SpannedSubject extends Subject { List matchingSpanFlags = new ArrayList<>(); List spanAlignments = new ArrayList<>(); - for (AlignmentSpan span : actualSpans) { + for (AlignmentSpan span : checkNotNull(actualSpans)) { spanAlignments.add(span.getAlignment()); if (span.getAlignment().equals(alignment)) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -850,11 +853,13 @@ public final class SpannedSubject extends Subject { private static final class ForegroundColorSpansSubject extends Subject implements Colored { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private ForegroundColorSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -866,7 +871,7 @@ public final class SpannedSubject extends Subject { // Use hex strings for comparison so the values in error messages are more human readable. List spanColors = new ArrayList<>(); - for (ForegroundColorSpan span : actualSpans) { + for (ForegroundColorSpan span : checkNotNull(actualSpans)) { spanColors.add(String.format("0x%08X", span.getForegroundColor())); if (span.getForegroundColor() == color) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -887,11 +892,13 @@ public final class SpannedSubject extends Subject { private static final class BackgroundColorSpansSubject extends Subject implements Colored { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private BackgroundColorSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -903,7 +910,7 @@ public final class SpannedSubject extends Subject { // Use hex strings for comparison so the values in error messages are more human readable. List spanColors = new ArrayList<>(); - for (BackgroundColorSpan span : actualSpans) { + for (BackgroundColorSpan span : checkNotNull(actualSpans)) { spanColors.add(String.format("0x%08X", span.getBackgroundColor())); if (span.getBackgroundColor() == color) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -932,17 +939,17 @@ public final class SpannedSubject extends Subject { private static Factory> typefaceSpans( Spanned actualSpanned) { - return (FailureMetadata metadata, List spans) -> + return (FailureMetadata metadata, @Nullable List spans) -> new TypefaceSpansSubject(metadata, spans, actualSpanned); } private static final class TypefaceSpansSubject extends Subject implements Typefaced { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private TypefaceSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, @Nullable List actualSpans, Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -953,7 +960,7 @@ public final class SpannedSubject extends Subject { List matchingSpanFlags = new ArrayList<>(); List<@NullableType String> spanFontFamilies = new ArrayList<>(); - for (TypefaceSpan span : actualSpans) { + for (TypefaceSpan span : checkNotNull(actualSpans)) { spanFontFamilies.add(span.getFamily()); if (Util.areEqual(span.getFamily(), fontFamily)) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -988,11 +995,13 @@ public final class SpannedSubject extends Subject { private static final class AbsoluteSizeSpansSubject extends Subject implements AbsoluteSized { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private AbsoluteSizeSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -1003,7 +1012,7 @@ public final class SpannedSubject extends Subject { List matchingSpanFlags = new ArrayList<>(); List spanSizes = new ArrayList<>(); - for (AbsoluteSizeSpan span : actualSpans) { + for (AbsoluteSizeSpan span : checkNotNull(actualSpans)) { spanSizes.add(span.getSize()); if (span.getSize() == size) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -1031,17 +1040,19 @@ public final class SpannedSubject extends Subject { private static Factory> relativeSizeSpans( Spanned actualSpanned) { - return (FailureMetadata metadata, List spans) -> + return (FailureMetadata metadata, @Nullable List spans) -> new RelativeSizeSpansSubject(metadata, spans, actualSpanned); } private static final class RelativeSizeSpansSubject extends Subject implements RelativeSized { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private RelativeSizeSpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -1052,7 +1063,7 @@ public final class SpannedSubject extends Subject { List matchingSpanFlags = new ArrayList<>(); List spanSizes = new ArrayList<>(); - for (RelativeSizeSpan span : actualSpans) { + for (RelativeSizeSpan span : checkNotNull(actualSpans)) { spanSizes.add(span.getSizeChange()); if (span.getSizeChange() == size) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -1087,11 +1098,11 @@ public final class SpannedSubject extends Subject { private static final class RubySpansSubject extends Subject implements RubyText { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private RubySpansSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, @Nullable List actualSpans, Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -1101,7 +1112,7 @@ public final class SpannedSubject extends Subject { public AndSpanFlags withTextAndPosition(String text, @TextAnnotation.Position int position) { List matchingSpanFlags = new ArrayList<>(); List spanTextsAndPositions = new ArrayList<>(); - for (RubySpan span : actualSpans) { + for (RubySpan span : checkNotNull(actualSpans)) { spanTextsAndPositions.add(new TextAndPosition(span.rubyText, span.position)); if (span.rubyText.equals(text)) { matchingSpanFlags.add(actualSpanned.getSpanFlags(span)); @@ -1174,17 +1185,19 @@ public final class SpannedSubject extends Subject { private static Factory> textEmphasisSubjects( Spanned actualSpanned) { - return (FailureMetadata metadata, List spans) -> + return (FailureMetadata metadata, @Nullable List spans) -> new TextEmphasisSubject(metadata, spans, actualSpanned); } private static final class TextEmphasisSubject extends Subject implements EmphasizedText { - private final List actualSpans; + @Nullable private final List actualSpans; private final Spanned actualSpanned; private TextEmphasisSubject( - FailureMetadata metadata, List actualSpans, Spanned actualSpanned) { + FailureMetadata metadata, + @Nullable List actualSpans, + Spanned actualSpanned) { super(metadata, actualSpans); this.actualSpans = actualSpans; this.actualSpanned = actualSpanned; @@ -1197,7 +1210,7 @@ public final class SpannedSubject extends Subject { @TextAnnotation.Position int position) { List matchingSpanFlags = new ArrayList<>(); List textEmphasisMarksAndPositions = new ArrayList<>(); - for (TextEmphasisSpan span : actualSpans) { + for (TextEmphasisSpan span : checkNotNull(actualSpans)) { textEmphasisMarksAndPositions.add( new MarkAndPosition(span.markShape, span.markFill, span.position)); if (span.markFill == markFill && span.markShape == markShape && span.position == position) {