Replace truth.FailureStrategy with truth.FailureMetadata in bazel's Subjects.

Also changed truth.SubjectFactory to truth.Subject.Factory (plain renaming) and use method reference instead of anonymous class to create the factory when applicable.

FailureMetadata, an opaque object to its users, is introduced to replace FailureStrategy in in custom Subject in order to resolve some existing flaws of FailureStrategy as well as enable new features to be added to Truth.

New API is available in Truth-0.36, if there is a build/pom.xml, it's also updated to use this version.

PiperOrigin-RevId: 175308179
diff --git a/src/test/java/com/google/devtools/build/android/AndroidDataMergerTest.java b/src/test/java/com/google/devtools/build/android/AndroidDataMergerTest.java
index e28d65c..80bf338 100644
--- a/src/test/java/com/google/devtools/build/android/AndroidDataMergerTest.java
+++ b/src/test/java/com/google/devtools/build/android/AndroidDataMergerTest.java
@@ -22,8 +22,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.jimfs.Jimfs;
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import com.google.devtools.build.android.AndroidDataBuilder.ResourceType;
 import com.google.devtools.build.android.AndroidDataMerger.MergeConflictException;
 import com.google.devtools.build.android.AndroidDataMerger.SourceChecker;
@@ -1300,15 +1299,8 @@
     assertAbout(unwrittenMergedAndroidData).that(data).isEqualTo(expected);
   }
 
-  final SubjectFactory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>
-      unwrittenMergedAndroidData =
-          new SubjectFactory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>() {
-            @Override
-            public UnwrittenMergedAndroidDataSubject getSubject(
-                FailureStrategy fs, UnwrittenMergedAndroidData that) {
-              return new UnwrittenMergedAndroidDataSubject(fs, that);
-            }
-          };
+  final Subject.Factory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>
+      unwrittenMergedAndroidData = UnwrittenMergedAndroidDataSubject::new;
 
   private static final class TestLoggingHandler extends Handler {
     public final List<String> warnings = new ArrayList<String>();
diff --git a/src/test/java/com/google/devtools/build/android/AndroidDataWriterTest.java b/src/test/java/com/google/devtools/build/android/AndroidDataWriterTest.java
index a8cbd21..8698750 100644
--- a/src/test/java/com/google/devtools/build/android/AndroidDataWriterTest.java
+++ b/src/test/java/com/google/devtools/build/android/AndroidDataWriterTest.java
@@ -20,8 +20,7 @@
 import com.android.ide.common.internal.PngException;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.jimfs.Jimfs;
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.io.File;
 import java.io.IOException;
@@ -391,11 +390,5 @@
     assertAbout(paths).that(actual.getAssetDir().resolve(asset)).exists();
   }
 
-  private static final SubjectFactory<PathsSubject, Path> paths =
-      new SubjectFactory<PathsSubject, Path>() {
-        @Override
-        public PathsSubject getSubject(FailureStrategy failureStrategy, Path path) {
-          return new PathsSubject(failureStrategy, path);
-        }
-      };
+  private static final Subject.Factory<PathsSubject, Path> paths = PathsSubject::new;
 }
diff --git a/src/test/java/com/google/devtools/build/android/AndroidResourceClassWriterTest.java b/src/test/java/com/google/devtools/build/android/AndroidResourceClassWriterTest.java
index 72eac32..4fdaaa7 100644
--- a/src/test/java/com/google/devtools/build/android/AndroidResourceClassWriterTest.java
+++ b/src/test/java/com/google/devtools/build/android/AndroidResourceClassWriterTest.java
@@ -19,8 +19,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.jimfs.Jimfs;
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import java.io.IOException;
 import java.nio.file.FileSystem;
 import java.nio.file.Files;
@@ -686,11 +685,5 @@
     }
   }
 
-  private static final SubjectFactory<ClassPathsSubject, Path> paths =
-      new SubjectFactory<ClassPathsSubject, Path>() {
-        @Override
-        public ClassPathsSubject getSubject(FailureStrategy failureStrategy, Path path) {
-          return new ClassPathsSubject(failureStrategy, path);
-        }
-      };
+  private static final Subject.Factory<ClassPathsSubject, Path> paths = ClassPathsSubject::new;
 }
diff --git a/src/test/java/com/google/devtools/build/android/ClassPathsSubject.java b/src/test/java/com/google/devtools/build/android/ClassPathsSubject.java
index 3bc266c..e869256 100644
--- a/src/test/java/com/google/devtools/build/android/ClassPathsSubject.java
+++ b/src/test/java/com/google/devtools/build/android/ClassPathsSubject.java
@@ -19,7 +19,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.Subject;
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -38,8 +38,8 @@
  */
 public class ClassPathsSubject extends Subject<ClassPathsSubject, Path> {
 
-  ClassPathsSubject(FailureStrategy failureStrategy, @Nullable Path subject) {
-    super(failureStrategy, subject);
+  ClassPathsSubject(FailureMetadata failureMetadata, @Nullable Path subject) {
+    super(failureMetadata, subject);
   }
 
   void exists() {
@@ -113,19 +113,27 @@
       fail("should not be null.");
     }
     exists();
-    return new ClassNameSubject(failureStrategy, getSubject(), className);
+    return check().about(ClassNameSubject.classNames(getSubject())).that(className);
   }
 
   static final class ClassNameSubject extends Subject<ClassNameSubject, String> {
 
     private final Path basePath;
 
-    public ClassNameSubject(
-        FailureStrategy failureStrategy, Path basePath, String subject) {
-      super(failureStrategy, subject);
+    public ClassNameSubject(FailureMetadata failureMetadata, Path basePath, String subject) {
+      super(failureMetadata, subject);
       this.basePath = basePath;
     }
 
+    static Subject.Factory<ClassNameSubject, String> classNames(Path basePath) {
+      return new Subject.Factory<ClassNameSubject, String>() {
+        @Override
+        public ClassNameSubject createSubject(FailureMetadata metadata, String actual) {
+          return new ClassNameSubject(metadata, basePath, actual);
+        }
+      };
+    }
+
     public void classContentsIsEqualTo(
         ImmutableMap<String, Integer> intFields,
         ImmutableMap<String, List<Integer>> intArrayFields,
diff --git a/src/test/java/com/google/devtools/build/android/DataResourceXmlTest.java b/src/test/java/com/google/devtools/build/android/DataResourceXmlTest.java
index ee04e88..315a9c9 100644
--- a/src/test/java/com/google/devtools/build/android/DataResourceXmlTest.java
+++ b/src/test/java/com/google/devtools/build/android/DataResourceXmlTest.java
@@ -24,8 +24,7 @@
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.jimfs.Jimfs;
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import com.google.devtools.build.android.AndroidResourceMerger.MergingException;
 import com.google.devtools.build.android.xml.ArrayXmlResourceValue;
 import com.google.devtools.build.android.xml.ArrayXmlResourceValue.ArrayType;
@@ -1359,13 +1358,7 @@
     return mergedDataWriter.resourceDirectory().resolve("values/values.xml");
   }
 
-  private static final SubjectFactory<PathsSubject, Path> resourcePaths =
-      new SubjectFactory<PathsSubject, Path>() {
-        @Override
-        public PathsSubject getSubject(FailureStrategy failureStrategy, Path path) {
-          return new PathsSubject(failureStrategy, path);
-        }
-      };
+  private static final Subject.Factory<PathsSubject, Path> resourcePaths = PathsSubject::new;
 
   private static class FakeConsumer
       implements ParsedAndroidData.KeyValueConsumer<DataKey, DataResource> {
diff --git a/src/test/java/com/google/devtools/build/android/ParsedAndroidDataSubject.java b/src/test/java/com/google/devtools/build/android/ParsedAndroidDataSubject.java
index 876c3fe..07c6fa4 100644
--- a/src/test/java/com/google/devtools/build/android/ParsedAndroidDataSubject.java
+++ b/src/test/java/com/google/devtools/build/android/ParsedAndroidDataSubject.java
@@ -16,7 +16,7 @@
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Sets;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.Subject;
 import java.util.ArrayList;
 import java.util.List;
@@ -25,8 +25,8 @@
 /** Testing Subject for comparing ParsedAndroidData instances. */
 class ParsedAndroidDataSubject extends Subject<ParsedAndroidDataSubject, ParsedAndroidData> {
 
-  public ParsedAndroidDataSubject(FailureStrategy failureStrategy, ParsedAndroidData actual) {
-    super(failureStrategy, actual);
+  public ParsedAndroidDataSubject(FailureMetadata failureMetadata, ParsedAndroidData actual) {
+    super(failureMetadata, actual);
   }
 
   public void isEqualTo(ParsedAndroidData expectation) {
diff --git a/src/test/java/com/google/devtools/build/android/ParsedAndroidDataTest.java b/src/test/java/com/google/devtools/build/android/ParsedAndroidDataTest.java
index 78d9789..1ac6938 100644
--- a/src/test/java/com/google/devtools/build/android/ParsedAndroidDataTest.java
+++ b/src/test/java/com/google/devtools/build/android/ParsedAndroidDataTest.java
@@ -21,8 +21,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.jimfs.Jimfs;
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 import com.google.devtools.build.android.AndroidResourceMerger.MergingException;
 import com.google.devtools.build.android.FullyQualifiedName.Factory;
@@ -664,12 +663,6 @@
     }
   }
 
-  final SubjectFactory<ParsedAndroidDataSubject, ParsedAndroidData> parsedAndroidData =
-      new SubjectFactory<ParsedAndroidDataSubject, ParsedAndroidData>() {
-        @Override
-        public ParsedAndroidDataSubject getSubject(FailureStrategy fs, ParsedAndroidData that) {
-          return new ParsedAndroidDataSubject(fs, that);
-        }
-      };
-
+  final Subject.Factory<ParsedAndroidDataSubject, ParsedAndroidData> parsedAndroidData =
+      ParsedAndroidDataSubject::new;
 }
diff --git a/src/test/java/com/google/devtools/build/android/PathsSubject.java b/src/test/java/com/google/devtools/build/android/PathsSubject.java
index 5c4ad16..9b653b2 100644
--- a/src/test/java/com/google/devtools/build/android/PathsSubject.java
+++ b/src/test/java/com/google/devtools/build/android/PathsSubject.java
@@ -16,7 +16,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.base.Joiner;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.Subject;
 import java.io.IOException;
 import java.io.StringReader;
@@ -45,8 +45,8 @@
 /** A testing utility that allows assertions against Paths. */
 public class PathsSubject extends Subject<PathsSubject, Path> {
 
-  PathsSubject(FailureStrategy failureStrategy, @Nullable Path subject) {
-    super(failureStrategy, subject);
+  PathsSubject(FailureMetadata failureMetadata, @Nullable Path subject) {
+    super(failureMetadata, subject);
   }
 
   void exists() {
diff --git a/src/test/java/com/google/devtools/build/android/UnwrittenMergedAndroidDataSubject.java b/src/test/java/com/google/devtools/build/android/UnwrittenMergedAndroidDataSubject.java
index 5d774a1..ea871a3 100644
--- a/src/test/java/com/google/devtools/build/android/UnwrittenMergedAndroidDataSubject.java
+++ b/src/test/java/com/google/devtools/build/android/UnwrittenMergedAndroidDataSubject.java
@@ -16,27 +16,19 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.base.Objects;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import javax.annotation.Nullable;
 
 class UnwrittenMergedAndroidDataSubject
     extends Subject<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData> {
 
-  static final SubjectFactory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>
-      FACTORY =
-          new SubjectFactory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>() {
-            @Override
-            public UnwrittenMergedAndroidDataSubject getSubject(
-                FailureStrategy fs, UnwrittenMergedAndroidData that) {
-              return new UnwrittenMergedAndroidDataSubject(fs, that);
-            }
-          };
+  static final Subject.Factory<UnwrittenMergedAndroidDataSubject, UnwrittenMergedAndroidData>
+      FACTORY = UnwrittenMergedAndroidDataSubject::new;
 
   public UnwrittenMergedAndroidDataSubject(
-      FailureStrategy failureStrategy, @Nullable UnwrittenMergedAndroidData subject) {
-    super(failureStrategy, subject);
+      FailureMetadata failureMetadata, @Nullable UnwrittenMergedAndroidData subject) {
+    super(failureMetadata, subject);
   }
 
   public void isEqualTo(UnwrittenMergedAndroidData expected) {
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java
index 534c173..d53c0ae 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubject.java
@@ -16,7 +16,7 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import com.google.common.collect.Iterables;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
 import com.google.common.truth.Subject;
 import com.google.devtools.build.lib.events.Event;
@@ -27,8 +27,8 @@
  * String} objects as opposed to the harder-to-assert-on {@link Event} objects.
  */
 class EventIterableSubject extends Subject<EventIterableSubject, Iterable<Event>> {
-  EventIterableSubject(FailureStrategy failureStrategy, @Nullable Iterable<Event> actual) {
-    super(failureStrategy, actual);
+  EventIterableSubject(FailureMetadata failureMetadata, @Nullable Iterable<Event> actual) {
+    super(failureMetadata, actual);
   }
 
   IterableSubject hasEventsThat() {
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java
index fd46f27..b56cf0c 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/EventIterableSubjectFactory.java
@@ -13,24 +13,25 @@
 // limitations under the License.
 package com.google.devtools.build.lib.testutil;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 import com.google.devtools.build.lib.events.Event;
 
 /**
- * {@link SubjectFactory} for {@code Iterable<Event>} objects, providing {@link IterableSubject}s of
- * {@link String} objects for easy asserting.
+ * {@link Subject.Factory} for {@code Iterable<Event>} objects, providing {@link IterableSubject}s
+ * of {@link String} objects for easy asserting.
  */
 public class EventIterableSubjectFactory
-    extends SubjectFactory<EventIterableSubject, Iterable<Event>> {
+    implements Subject.Factory<EventIterableSubject, Iterable<Event>> {
   public static IterableSubject assertThatEvents(Iterable<Event> events) {
     return Truth.assertAbout(new EventIterableSubjectFactory()).that(events).hasEventsThat();
   }
 
   @Override
-  public EventIterableSubject getSubject(FailureStrategy fs, Iterable<Event> eventCollector) {
-    return new EventIterableSubject(fs, eventCollector);
+  public EventIterableSubject createSubject(
+      FailureMetadata failureMetadata, Iterable<Event> eventCollector) {
+    return new EventIterableSubject(failureMetadata, eventCollector);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubject.java b/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubject.java
index 3598909..f9fc397 100644
--- a/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubject.java
+++ b/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubject.java
@@ -13,19 +13,18 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
 import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
-
 import javax.annotation.Nullable;
 
 /**
  * {@link Subject} for {@link CycleInfo}. Please add to this class if you need more functionality!
  */
 public class CycleInfoSubject extends Subject<CycleInfoSubject, CycleInfo> {
-  CycleInfoSubject(FailureStrategy failureStrategy, @Nullable CycleInfo cycleInfo) {
-    super(failureStrategy, cycleInfo);
+  CycleInfoSubject(FailureMetadata failureMetadata, @Nullable CycleInfo cycleInfo) {
+    super(failureMetadata, cycleInfo);
   }
 
   public IterableSubject hasPathToCycleThat() {
diff --git a/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubjectFactory.java b/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubjectFactory.java
index 45d9d21..93014c5 100644
--- a/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubjectFactory.java
+++ b/src/test/java/com/google/devtools/build/skyframe/CycleInfoSubjectFactory.java
@@ -13,18 +13,18 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.FailureMetadata;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 
-/** {@link SubjectFactory} for {@link CycleInfo}, providing {@link CycleInfoSubject}. */
-public class CycleInfoSubjectFactory extends SubjectFactory<CycleInfoSubject, CycleInfo> {
+/** {@link Subject.Factory} for {@link CycleInfo}, providing {@link CycleInfoSubject}. */
+public class CycleInfoSubjectFactory implements Subject.Factory<CycleInfoSubject, CycleInfo> {
   public static CycleInfoSubject assertThat(CycleInfo cycleInfo) {
     return Truth.assertAbout(new CycleInfoSubjectFactory()).that(cycleInfo);
   }
 
   @Override
-  public CycleInfoSubject getSubject(FailureStrategy failureStrategy, CycleInfo cycleInfo) {
-    return new CycleInfoSubject(failureStrategy, cycleInfo);
+  public CycleInfoSubject createSubject(FailureMetadata failureMetadata, CycleInfo cycleInfo) {
+    return new CycleInfoSubject(failureMetadata, cycleInfo);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubject.java b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubject.java
index e3fd258..2e88678 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubject.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubject.java
@@ -13,7 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
 import com.google.common.truth.Subject;
 import com.google.common.truth.ThrowableSubject;
@@ -24,8 +24,8 @@
  * functionality!
  */
 public class ErrorInfoSubject extends Subject<ErrorInfoSubject, ErrorInfo> {
-  public ErrorInfoSubject(FailureStrategy failureStrategy, ErrorInfo errorInfo) {
-    super(failureStrategy, errorInfo);
+  public ErrorInfoSubject(FailureMetadata failureMetadata, ErrorInfo errorInfo) {
+    super(failureMetadata, errorInfo);
   }
 
   public ThrowableSubject hasExceptionThat() {
diff --git a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubjectFactory.java b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubjectFactory.java
index 5234050..60f9460 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubjectFactory.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoSubjectFactory.java
@@ -13,18 +13,18 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.FailureMetadata;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 
-/** {@link SubjectFactory} for {@link ErrorInfo} objects, providing {@link ErrorInfoSubject}s. */
-public class ErrorInfoSubjectFactory extends SubjectFactory<ErrorInfoSubject, ErrorInfo> {
+/** {@link Subject.Factory} for {@link ErrorInfo} objects, providing {@link ErrorInfoSubject}s. */
+public class ErrorInfoSubjectFactory implements Subject.Factory<ErrorInfoSubject, ErrorInfo> {
   public static ErrorInfoSubject assertThatErrorInfo(ErrorInfo errorInfo) {
     return Truth.assertAbout(new ErrorInfoSubjectFactory()).that(errorInfo);
   }
 
   @Override
-  public ErrorInfoSubject getSubject(FailureStrategy failureStrategy, ErrorInfo errorInfo) {
-    return new ErrorInfoSubject(failureStrategy, errorInfo);
+  public ErrorInfoSubject createSubject(FailureMetadata failureMetadata, ErrorInfo errorInfo) {
+    return new ErrorInfoSubject(failureMetadata, errorInfo);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubject.java b/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubject.java
index c86d6cf..f422b7a 100644
--- a/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubject.java
+++ b/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubject.java
@@ -18,7 +18,7 @@
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.truth.DefaultSubject;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
 import com.google.common.truth.Subject;
 
@@ -28,8 +28,8 @@
  */
 public class EvaluationResultSubject extends Subject<EvaluationResultSubject, EvaluationResult<?>> {
   public EvaluationResultSubject(
-      FailureStrategy failureStrategy, EvaluationResult<?> evaluationResult) {
-    super(failureStrategy, evaluationResult);
+      FailureMetadata failureMetadata, EvaluationResult<?> evaluationResult) {
+    super(failureMetadata, evaluationResult);
   }
 
   public void hasError() {
diff --git a/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubjectFactory.java b/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubjectFactory.java
index 2bb7e4b..9863f52 100644
--- a/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubjectFactory.java
+++ b/src/test/java/com/google/devtools/build/skyframe/EvaluationResultSubjectFactory.java
@@ -13,24 +13,24 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.FailureMetadata;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 
 /**
- * {@link SubjectFactory} for {@link EvaluationResult} objects, providing
- * {@link EvaluationResultSubject}s.
+ * {@link Subject.Factory} for {@link EvaluationResult} objects, providing {@link
+ * EvaluationResultSubject}s.
  */
 public class EvaluationResultSubjectFactory
-    extends SubjectFactory<EvaluationResultSubject, EvaluationResult<?>> {
+    implements Subject.Factory<EvaluationResultSubject, EvaluationResult<?>> {
   public static EvaluationResultSubject assertThatEvaluationResult(
       EvaluationResult<?> evaluationResult) {
     return Truth.assertAbout(new EvaluationResultSubjectFactory()).that(evaluationResult);
   }
 
   @Override
-  public EvaluationResultSubject getSubject(
-      FailureStrategy failureStrategy, EvaluationResult<?> evaluationResult) {
-    return new EvaluationResultSubject(failureStrategy, evaluationResult);
+  public EvaluationResultSubject createSubject(
+      FailureMetadata failureMetadata, EvaluationResult<?> evaluationResult) {
+    return new EvaluationResultSubject(failureMetadata, evaluationResult);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubject.java b/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubject.java
index 744cb06..78bdd21 100644
--- a/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubject.java
+++ b/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubject.java
@@ -18,7 +18,7 @@
 import com.google.common.collect.Iterables;
 import com.google.common.truth.ComparableSubject;
 import com.google.common.truth.DefaultSubject;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IterableSubject;
 import com.google.common.truth.Subject;
 import javax.annotation.Nullable;
@@ -28,8 +28,8 @@
  * functionality!
  */
 class NodeEntrySubject extends Subject<NodeEntrySubject, NodeEntry> {
-  NodeEntrySubject(FailureStrategy failureStrategy, NodeEntry nodeEntry) {
-    super(failureStrategy, nodeEntry);
+  NodeEntrySubject(FailureMetadata failureMetadata, NodeEntry nodeEntry) {
+    super(failureMetadata, nodeEntry);
   }
 
   DefaultSubject hasVersionThat() {
diff --git a/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubjectFactory.java b/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubjectFactory.java
index 7278085..f38c311 100644
--- a/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubjectFactory.java
+++ b/src/test/java/com/google/devtools/build/skyframe/NodeEntrySubjectFactory.java
@@ -13,18 +13,18 @@
 // limitations under the License.
 package com.google.devtools.build.skyframe;
 
-import com.google.common.truth.FailureStrategy;
-import com.google.common.truth.SubjectFactory;
+import com.google.common.truth.FailureMetadata;
+import com.google.common.truth.Subject;
 import com.google.common.truth.Truth;
 
-/** {@link SubjectFactory} for {@link NodeEntry} objects, providing {@link NodeEntrySubject}s. */
-public class NodeEntrySubjectFactory extends SubjectFactory<NodeEntrySubject, NodeEntry> {
+/** {@link Subject.Factory} for {@link NodeEntry} objects, providing {@link NodeEntrySubject}s. */
+public class NodeEntrySubjectFactory implements Subject.Factory<NodeEntrySubject, NodeEntry> {
   public static NodeEntrySubject assertThatNodeEntry(NodeEntry nodeEntry) {
     return Truth.assertAbout(new NodeEntrySubjectFactory()).that(nodeEntry);
   }
 
   @Override
-  public NodeEntrySubject getSubject(FailureStrategy failureStrategy, NodeEntry nodeEntry) {
-    return new NodeEntrySubject(failureStrategy, nodeEntry);
+  public NodeEntrySubject createSubject(FailureMetadata failureMetadata, NodeEntry nodeEntry) {
+    return new NodeEntrySubject(failureMetadata, nodeEntry);
   }
 }