diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java index 7142677c2a..37e7769454 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/truth/SpannedSubject.java @@ -16,6 +16,7 @@ */ package com.google.android.exoplayer2.testutil.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; @@ -759,9 +760,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; } @@ -793,17 +794,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; @@ -814,7 +817,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)); @@ -848,11 +851,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; @@ -864,7 +869,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)); @@ -885,11 +890,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; @@ -901,7 +908,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)); @@ -930,17 +937,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; @@ -951,7 +958,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)); @@ -986,11 +993,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; @@ -1001,7 +1010,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)); @@ -1029,17 +1038,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; @@ -1050,7 +1061,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)); @@ -1085,11 +1096,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; @@ -1099,7 +1110,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)); @@ -1172,17 +1183,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; @@ -1195,7 +1208,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) {