Upgrade Truth to 0.36 and adapt to deprecations

Version 0.36 deprecates SubjectFactory [1] in favor of Subject.Factory
which takes FailureMetadata instead of FailureStrategy, and renames the
getSubject method to createSubject.

[1] https://google.github.io/truth/api/0.36/com/google/common/truth/SubjectFactory.html

Change-Id: Ic8c767b3da9e936e77639856d9f02af5c9059fdd
diff --git a/WORKSPACE b/WORKSPACE
index 9aaf475..099a93e 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -709,18 +709,18 @@
     sha1 = "4785a3c21320980282f9f33d0d1264a69040538f",
 )
 
-TRUTH_VERS = "0.35"
+TRUTH_VERS = "0.36"
 
 maven_jar(
     name = "truth",
     artifact = "com.google.truth:truth:" + TRUTH_VERS,
-    sha1 = "c08a7fde45e058323bcfa3f510d4fe1e2b028f37",
+    sha1 = "7485219d2c1d341097a19382c02bde07e69ff5d2",
 )
 
 maven_jar(
     name = "truth-java8-extension",
     artifact = "com.google.truth.extensions:truth-java8-extension:" + TRUTH_VERS,
-    sha1 = "5457fdf91b1e954b070ad7f2db9bea5505da4bca",
+    sha1 = "dcc60988c8f9a051840766ef192a2ef41e7992f1",
 )
 
 # When bumping the easymock version number, make sure to also move powermock to a compatible version
diff --git a/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractNotificationTest.java b/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
index b2e7415..decc471 100644
--- a/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
+++ b/gerrit-acceptance-framework/src/test/java/com/google/gerrit/acceptance/AbstractNotificationTest.java
@@ -21,9 +21,8 @@
 
 import com.google.common.base.Joiner;
 import com.google.common.collect.ImmutableList;
-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 com.google.common.truth.Truth;
 import com.google.gerrit.common.Nullable;
 import com.google.gerrit.extensions.api.changes.RecipientType;
@@ -62,18 +61,8 @@
     gApi.projects().name(project.get()).config(conf);
   }
 
-  private static final SubjectFactory<FakeEmailSenderSubject, FakeEmailSender>
-      FAKE_EMAIL_SENDER_SUBJECT_FACTORY =
-          new SubjectFactory<FakeEmailSenderSubject, FakeEmailSender>() {
-            @Override
-            public FakeEmailSenderSubject getSubject(
-                FailureStrategy failureStrategy, FakeEmailSender target) {
-              return new FakeEmailSenderSubject(failureStrategy, target);
-            }
-          };
-
   protected static FakeEmailSenderSubject assertThat(FakeEmailSender sender) {
-    return assertAbout(FAKE_EMAIL_SENDER_SUBJECT_FACTORY).that(sender);
+    return assertAbout(FakeEmailSenderSubject::new).that(sender);
   }
 
   protected void setEmailStrategy(TestAccount account, EmailStrategy strategy) throws Exception {
@@ -98,8 +87,8 @@
     private Map<RecipientType, List<String>> recipients = new HashMap<>();
     private Set<String> accountedFor = new HashSet<>();
 
-    FakeEmailSenderSubject(FailureStrategy failureStrategy, FakeEmailSender target) {
-      super(failureStrategy, target);
+    FakeEmailSenderSubject(FailureMetadata failureMetadata, FakeEmailSender target) {
+      super(failureMetadata, target);
     }
 
     public FakeEmailSenderSubject notSent() {
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/ChangeFileContentModificationSubject.java b/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/ChangeFileContentModificationSubject.java
index 801b2b0..574c795 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/ChangeFileContentModificationSubject.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/ChangeFileContentModificationSubject.java
@@ -17,10 +17,9 @@
 import static com.google.common.truth.Truth.assertAbout;
 
 import com.google.common.io.CharStreams;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.extensions.restapi.RawInput;
 import java.io.IOException;
@@ -30,26 +29,14 @@
 public class ChangeFileContentModificationSubject
     extends Subject<ChangeFileContentModificationSubject, ChangeFileContentModification> {
 
-  private static final SubjectFactory<
-          ChangeFileContentModificationSubject, ChangeFileContentModification>
-      MODIFICATION_SUBJECT_FACTORY =
-          new SubjectFactory<
-              ChangeFileContentModificationSubject, ChangeFileContentModification>() {
-            @Override
-            public ChangeFileContentModificationSubject getSubject(
-                FailureStrategy failureStrategy, ChangeFileContentModification modification) {
-              return new ChangeFileContentModificationSubject(failureStrategy, modification);
-            }
-          };
-
   public static ChangeFileContentModificationSubject assertThat(
       ChangeFileContentModification modification) {
-    return assertAbout(MODIFICATION_SUBJECT_FACTORY).that(modification);
+    return assertAbout(ChangeFileContentModificationSubject::new).that(modification);
   }
 
   private ChangeFileContentModificationSubject(
-      FailureStrategy failureStrategy, ChangeFileContentModification modification) {
-    super(failureStrategy, modification);
+      FailureMetadata failureMetadata, ChangeFileContentModification modification) {
+    super(failureMetadata, modification);
   }
 
   public StringSubject filePath() {
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/TreeModificationSubject.java b/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/TreeModificationSubject.java
index ac4ebb8..59ee2b7 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/TreeModificationSubject.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/edit/tree/TreeModificationSubject.java
@@ -16,26 +16,15 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-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 com.google.gerrit.truth.ListSubject;
 import java.util.List;
 
 public class TreeModificationSubject extends Subject<TreeModificationSubject, TreeModification> {
 
-  private static final SubjectFactory<TreeModificationSubject, TreeModification>
-      TREE_MODIFICATION_SUBJECT_FACTORY =
-          new SubjectFactory<TreeModificationSubject, TreeModification>() {
-            @Override
-            public TreeModificationSubject getSubject(
-                FailureStrategy failureStrategy, TreeModification treeModification) {
-              return new TreeModificationSubject(failureStrategy, treeModification);
-            }
-          };
-
   public static TreeModificationSubject assertThat(TreeModification treeModification) {
-    return assertAbout(TREE_MODIFICATION_SUBJECT_FACTORY).that(treeModification);
+    return assertAbout(TreeModificationSubject::new).that(treeModification);
   }
 
   public static ListSubject<TreeModificationSubject, TreeModification> assertThatList(
@@ -45,8 +34,8 @@
   }
 
   private TreeModificationSubject(
-      FailureStrategy failureStrategy, TreeModification treeModification) {
-    super(failureStrategy, treeModification);
+      FailureMetadata failureMetadata, TreeModification treeModification) {
+    super(failureMetadata, treeModification);
   }
 
   public ChangeFileContentModificationSubject asChangeFileContentModification() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/client/RangeSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/client/RangeSubject.java
index 70f5ec6..40347a7 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/client/RangeSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/client/RangeSubject.java
@@ -16,28 +16,19 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IntegerSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 
 public class RangeSubject extends Subject<RangeSubject, Comment.Range> {
 
-  private static final SubjectFactory<RangeSubject, Comment.Range> RANGE_SUBJECT_FACTORY =
-      new SubjectFactory<RangeSubject, Comment.Range>() {
-        @Override
-        public RangeSubject getSubject(FailureStrategy failureStrategy, Comment.Range range) {
-          return new RangeSubject(failureStrategy, range);
-        }
-      };
-
   public static RangeSubject assertThat(Comment.Range range) {
-    return assertAbout(RANGE_SUBJECT_FACTORY).that(range);
+    return assertAbout(RangeSubject::new).that(range);
   }
 
-  private RangeSubject(FailureStrategy failureStrategy, Comment.Range range) {
-    super(failureStrategy, range);
+  private RangeSubject(FailureMetadata failureMetadata, Comment.Range range) {
+    super(failureMetadata, range);
   }
 
   public IntegerSubject startLine() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/CommitInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/CommitInfoSubject.java
index b2717af..37ae643 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/CommitInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/CommitInfoSubject.java
@@ -16,30 +16,20 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.truth.ListSubject;
 
 public class CommitInfoSubject extends Subject<CommitInfoSubject, CommitInfo> {
 
-  private static final SubjectFactory<CommitInfoSubject, CommitInfo> COMMIT_INFO_SUBJECT_FACTORY =
-      new SubjectFactory<CommitInfoSubject, CommitInfo>() {
-        @Override
-        public CommitInfoSubject getSubject(
-            FailureStrategy failureStrategy, CommitInfo commitInfo) {
-          return new CommitInfoSubject(failureStrategy, commitInfo);
-        }
-      };
-
   public static CommitInfoSubject assertThat(CommitInfo commitInfo) {
-    return assertAbout(COMMIT_INFO_SUBJECT_FACTORY).that(commitInfo);
+    return assertAbout(CommitInfoSubject::new).that(commitInfo);
   }
 
-  private CommitInfoSubject(FailureStrategy failureStrategy, CommitInfo commitInfo) {
-    super(failureStrategy, commitInfo);
+  private CommitInfoSubject(FailureMetadata failureMetadata, CommitInfo commitInfo) {
+    super(failureMetadata, commitInfo);
   }
 
   public StringSubject commit() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/ContentEntrySubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/ContentEntrySubject.java
index 9c9893c..4e10ec4b 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/ContentEntrySubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/ContentEntrySubject.java
@@ -16,31 +16,21 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.extensions.common.DiffInfo.ContentEntry;
 import com.google.gerrit.truth.ListSubject;
 
 public class ContentEntrySubject extends Subject<ContentEntrySubject, ContentEntry> {
 
-  private static final SubjectFactory<ContentEntrySubject, ContentEntry> DIFF_INFO_SUBJECT_FACTORY =
-      new SubjectFactory<ContentEntrySubject, ContentEntry>() {
-        @Override
-        public ContentEntrySubject getSubject(
-            FailureStrategy failureStrategy, ContentEntry contentEntry) {
-          return new ContentEntrySubject(failureStrategy, contentEntry);
-        }
-      };
-
   public static ContentEntrySubject assertThat(ContentEntry contentEntry) {
-    return assertAbout(DIFF_INFO_SUBJECT_FACTORY).that(contentEntry);
+    return assertAbout(ContentEntrySubject::new).that(contentEntry);
   }
 
-  private ContentEntrySubject(FailureStrategy failureStrategy, ContentEntry contentEntry) {
-    super(failureStrategy, contentEntry);
+  private ContentEntrySubject(FailureMetadata failureMetadata, ContentEntry contentEntry) {
+    super(failureMetadata, contentEntry);
   }
 
   public void isDueToRebase() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/DiffInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/DiffInfoSubject.java
index 1b1b847..a91c0ba 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/DiffInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/DiffInfoSubject.java
@@ -17,29 +17,20 @@
 import static com.google.common.truth.Truth.assertAbout;
 
 import com.google.common.truth.ComparableSubject;
-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 com.google.common.truth.Truth;
 import com.google.gerrit.extensions.common.DiffInfo.ContentEntry;
 import com.google.gerrit.truth.ListSubject;
 
 public class DiffInfoSubject extends Subject<DiffInfoSubject, DiffInfo> {
 
-  private static final SubjectFactory<DiffInfoSubject, DiffInfo> DIFF_INFO_SUBJECT_FACTORY =
-      new SubjectFactory<DiffInfoSubject, DiffInfo>() {
-        @Override
-        public DiffInfoSubject getSubject(FailureStrategy failureStrategy, DiffInfo diffInfo) {
-          return new DiffInfoSubject(failureStrategy, diffInfo);
-        }
-      };
-
   public static DiffInfoSubject assertThat(DiffInfo diffInfo) {
-    return assertAbout(DIFF_INFO_SUBJECT_FACTORY).that(diffInfo);
+    return assertAbout(DiffInfoSubject::new).that(diffInfo);
   }
 
-  private DiffInfoSubject(FailureStrategy failureStrategy, DiffInfo diffInfo) {
-    super(failureStrategy, diffInfo);
+  private DiffInfoSubject(FailureMetadata failureMetadata, DiffInfo diffInfo) {
+    super(failureMetadata, diffInfo);
   }
 
   public ListSubject<ContentEntrySubject, ContentEntry> content() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/EditInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/EditInfoSubject.java
index 95b2158..ea5f72e 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/EditInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/EditInfoSubject.java
@@ -16,26 +16,17 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.truth.OptionalSubject;
 import java.util.Optional;
 
 public class EditInfoSubject extends Subject<EditInfoSubject, EditInfo> {
 
-  private static final SubjectFactory<EditInfoSubject, EditInfo> EDIT_INFO_SUBJECT_FACTORY =
-      new SubjectFactory<EditInfoSubject, EditInfo>() {
-        @Override
-        public EditInfoSubject getSubject(FailureStrategy failureStrategy, EditInfo editInfo) {
-          return new EditInfoSubject(failureStrategy, editInfo);
-        }
-      };
-
   public static EditInfoSubject assertThat(EditInfo editInfo) {
-    return assertAbout(EDIT_INFO_SUBJECT_FACTORY).that(editInfo);
+    return assertAbout(EditInfoSubject::new).that(editInfo);
   }
 
   public static OptionalSubject<EditInfoSubject, EditInfo> assertThat(
@@ -43,8 +34,8 @@
     return OptionalSubject.assertThat(editInfoOptional, EditInfoSubject::assertThat);
   }
 
-  private EditInfoSubject(FailureStrategy failureStrategy, EditInfo editInfo) {
-    super(failureStrategy, editInfo);
+  private EditInfoSubject(FailureMetadata failureMetadata, EditInfo editInfo) {
+    super(failureMetadata, editInfo);
   }
 
   public CommitInfoSubject commit() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FileInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FileInfoSubject.java
index f8cdb34..ac92634 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FileInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FileInfoSubject.java
@@ -17,28 +17,19 @@
 import static com.google.common.truth.Truth.assertAbout;
 
 import com.google.common.truth.ComparableSubject;
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.IntegerSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 
 public class FileInfoSubject extends Subject<FileInfoSubject, FileInfo> {
 
-  private static final SubjectFactory<FileInfoSubject, FileInfo> FILE_INFO_SUBJECT_FACTORY =
-      new SubjectFactory<FileInfoSubject, FileInfo>() {
-        @Override
-        public FileInfoSubject getSubject(FailureStrategy failureStrategy, FileInfo fileInfo) {
-          return new FileInfoSubject(failureStrategy, fileInfo);
-        }
-      };
-
   public static FileInfoSubject assertThat(FileInfo fileInfo) {
-    return assertAbout(FILE_INFO_SUBJECT_FACTORY).that(fileInfo);
+    return assertAbout(FileInfoSubject::new).that(fileInfo);
   }
 
-  private FileInfoSubject(FailureStrategy failureStrategy, FileInfo fileInfo) {
-    super(failureStrategy, fileInfo);
+  private FileInfoSubject(FailureMetadata failureMetadata, FileInfo fileInfo) {
+    super(failureMetadata, fileInfo);
   }
 
   public IntegerSubject linesInserted() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixReplacementInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixReplacementInfoSubject.java
index f798622..811cc47 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixReplacementInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixReplacementInfoSubject.java
@@ -16,33 +16,22 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.extensions.client.RangeSubject;
 
 public class FixReplacementInfoSubject
     extends Subject<FixReplacementInfoSubject, FixReplacementInfo> {
 
-  private static final SubjectFactory<FixReplacementInfoSubject, FixReplacementInfo>
-      FIX_REPLACEMENT_INFO_SUBJECT_FACTORY =
-          new SubjectFactory<FixReplacementInfoSubject, FixReplacementInfo>() {
-            @Override
-            public FixReplacementInfoSubject getSubject(
-                FailureStrategy failureStrategy, FixReplacementInfo fixReplacementInfo) {
-              return new FixReplacementInfoSubject(failureStrategy, fixReplacementInfo);
-            }
-          };
-
   public static FixReplacementInfoSubject assertThat(FixReplacementInfo fixReplacementInfo) {
-    return assertAbout(FIX_REPLACEMENT_INFO_SUBJECT_FACTORY).that(fixReplacementInfo);
+    return assertAbout(FixReplacementInfoSubject::new).that(fixReplacementInfo);
   }
 
   private FixReplacementInfoSubject(
-      FailureStrategy failureStrategy, FixReplacementInfo fixReplacementInfo) {
-    super(failureStrategy, fixReplacementInfo);
+      FailureMetadata failureMetadata, FixReplacementInfo fixReplacementInfo) {
+    super(failureMetadata, fixReplacementInfo);
   }
 
   public StringSubject path() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixSuggestionInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixSuggestionInfoSubject.java
index 9af4d1f..beaf6c1 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixSuggestionInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/FixSuggestionInfoSubject.java
@@ -16,32 +16,21 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.truth.ListSubject;
 
 public class FixSuggestionInfoSubject extends Subject<FixSuggestionInfoSubject, FixSuggestionInfo> {
 
-  private static final SubjectFactory<FixSuggestionInfoSubject, FixSuggestionInfo>
-      FIX_SUGGESTION_INFO_SUBJECT_FACTORY =
-          new SubjectFactory<FixSuggestionInfoSubject, FixSuggestionInfo>() {
-            @Override
-            public FixSuggestionInfoSubject getSubject(
-                FailureStrategy failureStrategy, FixSuggestionInfo fixSuggestionInfo) {
-              return new FixSuggestionInfoSubject(failureStrategy, fixSuggestionInfo);
-            }
-          };
-
   public static FixSuggestionInfoSubject assertThat(FixSuggestionInfo fixSuggestionInfo) {
-    return assertAbout(FIX_SUGGESTION_INFO_SUBJECT_FACTORY).that(fixSuggestionInfo);
+    return assertAbout(FixSuggestionInfoSubject::new).that(fixSuggestionInfo);
   }
 
   private FixSuggestionInfoSubject(
-      FailureStrategy failureStrategy, FixSuggestionInfo fixSuggestionInfo) {
-    super(failureStrategy, fixSuggestionInfo);
+      FailureMetadata failureMetadata, FixSuggestionInfo fixSuggestionInfo) {
+    super(failureMetadata, fixSuggestionInfo);
   }
 
   public StringSubject fixId() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/GitPersonSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/GitPersonSubject.java
index 9ef06dc..5f29bc9 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/GitPersonSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/GitPersonSubject.java
@@ -17,28 +17,19 @@
 import static com.google.common.truth.Truth.assertAbout;
 
 import com.google.common.truth.ComparableSubject;
-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 com.google.common.truth.Truth;
 import java.sql.Timestamp;
 
 public class GitPersonSubject extends Subject<GitPersonSubject, GitPerson> {
 
-  private static final SubjectFactory<GitPersonSubject, GitPerson> GIT_PERSON_SUBJECT_FACTORY =
-      new SubjectFactory<GitPersonSubject, GitPerson>() {
-        @Override
-        public GitPersonSubject getSubject(FailureStrategy failureStrategy, GitPerson gitPerson) {
-          return new GitPersonSubject(failureStrategy, gitPerson);
-        }
-      };
-
   public static GitPersonSubject assertThat(GitPerson gitPerson) {
-    return assertAbout(GIT_PERSON_SUBJECT_FACTORY).that(gitPerson);
+    return assertAbout(GitPersonSubject::new).that(gitPerson);
   }
 
-  private GitPersonSubject(FailureStrategy failureStrategy, GitPerson gitPerson) {
-    super(failureStrategy, gitPerson);
+  private GitPersonSubject(FailureMetadata failureMetadata, GitPerson gitPerson) {
+    super(failureMetadata, gitPerson);
   }
 
   public ComparableSubject<?, Timestamp> creationDate() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/PathSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/PathSubject.java
index 307c19e..aebeee2 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/PathSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/PathSubject.java
@@ -16,25 +16,16 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-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 java.nio.file.Path;
 
 public class PathSubject extends Subject<PathSubject, Path> {
-  private static final SubjectFactory<PathSubject, Path> PATH_SUBJECT_FACTORY =
-      new SubjectFactory<PathSubject, Path>() {
-        @Override
-        public PathSubject getSubject(FailureStrategy failureStrategy, Path path) {
-          return new PathSubject(failureStrategy, path);
-        }
-      };
-
-  private PathSubject(FailureStrategy failureStrategy, Path path) {
-    super(failureStrategy, path);
+  private PathSubject(FailureMetadata failureMetadata, Path path) {
+    super(failureMetadata, path);
   }
 
   public static PathSubject assertThat(Path path) {
-    return assertAbout(PATH_SUBJECT_FACTORY).that(path);
+    return assertAbout(PathSubject::new).that(path);
   }
 }
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/RobotCommentInfoSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/RobotCommentInfoSubject.java
index afa1b9b..465d447 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/RobotCommentInfoSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/common/RobotCommentInfoSubject.java
@@ -16,24 +16,13 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-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 com.google.gerrit.truth.ListSubject;
 import java.util.List;
 
 public class RobotCommentInfoSubject extends Subject<RobotCommentInfoSubject, RobotCommentInfo> {
 
-  private static final SubjectFactory<RobotCommentInfoSubject, RobotCommentInfo>
-      ROBOT_COMMENT_INFO_SUBJECT_FACTORY =
-          new SubjectFactory<RobotCommentInfoSubject, RobotCommentInfo>() {
-            @Override
-            public RobotCommentInfoSubject getSubject(
-                FailureStrategy failureStrategy, RobotCommentInfo robotCommentInfo) {
-              return new RobotCommentInfoSubject(failureStrategy, robotCommentInfo);
-            }
-          };
-
   public static ListSubject<RobotCommentInfoSubject, RobotCommentInfo> assertThatList(
       List<RobotCommentInfo> robotCommentInfos) {
     return ListSubject.assertThat(robotCommentInfos, RobotCommentInfoSubject::assertThat)
@@ -41,12 +30,12 @@
   }
 
   public static RobotCommentInfoSubject assertThat(RobotCommentInfo robotCommentInfo) {
-    return assertAbout(ROBOT_COMMENT_INFO_SUBJECT_FACTORY).that(robotCommentInfo);
+    return assertAbout(RobotCommentInfoSubject::new).that(robotCommentInfo);
   }
 
   private RobotCommentInfoSubject(
-      FailureStrategy failureStrategy, RobotCommentInfo robotCommentInfo) {
-    super(failureStrategy, robotCommentInfo);
+      FailureMetadata failureMetadata, RobotCommentInfo robotCommentInfo) {
+    super(failureMetadata, robotCommentInfo);
   }
 
   public ListSubject<FixSuggestionInfoSubject, FixSuggestionInfo> fixSuggestions() {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/restapi/BinaryResultSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/restapi/BinaryResultSubject.java
index 30ac496..cf9df87 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/extensions/restapi/BinaryResultSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/extensions/restapi/BinaryResultSubject.java
@@ -16,11 +16,10 @@
 
 import static com.google.common.truth.Truth.assertAbout;
 
-import com.google.common.truth.FailureStrategy;
+import com.google.common.truth.FailureMetadata;
 import com.google.common.truth.PrimitiveByteArraySubject;
 import com.google.common.truth.StringSubject;
 import com.google.common.truth.Subject;
-import com.google.common.truth.SubjectFactory;
 import com.google.common.truth.Truth;
 import com.google.gerrit.truth.OptionalSubject;
 import java.io.ByteArrayOutputStream;
@@ -29,18 +28,8 @@
 
 public class BinaryResultSubject extends Subject<BinaryResultSubject, BinaryResult> {
 
-  private static final SubjectFactory<BinaryResultSubject, BinaryResult>
-      BINARY_RESULT_SUBJECT_FACTORY =
-          new SubjectFactory<BinaryResultSubject, BinaryResult>() {
-            @Override
-            public BinaryResultSubject getSubject(
-                FailureStrategy failureStrategy, BinaryResult binaryResult) {
-              return new BinaryResultSubject(failureStrategy, binaryResult);
-            }
-          };
-
   public static BinaryResultSubject assertThat(BinaryResult binaryResult) {
-    return assertAbout(BINARY_RESULT_SUBJECT_FACTORY).that(binaryResult);
+    return assertAbout(BinaryResultSubject::new).that(binaryResult);
   }
 
   public static OptionalSubject<BinaryResultSubject, BinaryResult> assertThat(
@@ -48,8 +37,8 @@
     return OptionalSubject.assertThat(binaryResultOptional, BinaryResultSubject::assertThat);
   }
 
-  private BinaryResultSubject(FailureStrategy failureStrategy, BinaryResult binaryResult) {
-    super(failureStrategy, binaryResult);
+  private BinaryResultSubject(FailureMetadata failureMetadata, BinaryResult binaryResult) {
+    super(failureMetadata, binaryResult);
   }
 
   public StringSubject asString() throws IOException {
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/truth/ListSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/truth/ListSubject.java
index e7f1074..bcd8dcf 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/truth/ListSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/truth/ListSubject.java
@@ -17,10 +17,9 @@
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.truth.Truth.assertAbout;
 
-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.SubjectFactory;
 import java.util.List;
 import java.util.function.Function;
 
@@ -38,8 +37,8 @@
   }
 
   private ListSubject(
-      FailureStrategy failureStrategy, List<E> list, Function<E, S> elementAssertThatFunction) {
-    super(failureStrategy, list);
+      FailureMetadata failureMetadata, List<E> list, Function<E, S> elementAssertThatFunction) {
+    super(failureMetadata, list);
     this.elementAssertThatFunction = elementAssertThatFunction;
   }
 
@@ -71,7 +70,7 @@
   }
 
   private static class ListSubjectFactory<S extends Subject<S, T>, T>
-      extends SubjectFactory<IterableSubject, Iterable<?>> {
+      implements Subject.Factory<IterableSubject, Iterable<?>> {
 
     private Function<T, S> elementAssertThatFunction;
 
@@ -81,10 +80,10 @@
 
     @SuppressWarnings("unchecked")
     @Override
-    public ListSubject<S, T> getSubject(FailureStrategy failureStrategy, Iterable<?> objects) {
+    public ListSubject<S, T> createSubject(FailureMetadata failureMetadata, Iterable<?> objects) {
       // The constructor of ListSubject only accepts lists.
       // -> Casting is appropriate.
-      return new ListSubject<>(failureStrategy, (List<T>) objects, elementAssertThatFunction);
+      return new ListSubject<>(failureMetadata, (List<T>) objects, elementAssertThatFunction);
     }
   }
 }
diff --git a/gerrit-test-util/src/main/java/com/google/gerrit/truth/OptionalSubject.java b/gerrit-test-util/src/main/java/com/google/gerrit/truth/OptionalSubject.java
index 49e91a8..f24b5da 100644
--- a/gerrit-test-util/src/main/java/com/google/gerrit/truth/OptionalSubject.java
+++ b/gerrit-test-util/src/main/java/com/google/gerrit/truth/OptionalSubject.java
@@ -17,9 +17,8 @@
 import static com.google.common.truth.Truth.assertAbout;
 
 import com.google.common.truth.DefaultSubject;
-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 com.google.common.truth.Truth;
 import java.util.Optional;
 import java.util.function.Function;
@@ -47,10 +46,10 @@
   }
 
   private OptionalSubject(
-      FailureStrategy failureStrategy,
+      FailureMetadata failureMetadata,
       Optional<T> optional,
       Function<? super T, ? extends S> valueAssertThatFunction) {
-    super(failureStrategy, optional);
+    super(failureMetadata, optional);
     this.valueAssertThatFunction = valueAssertThatFunction;
   }
 
@@ -82,7 +81,7 @@
   }
 
   private static class OptionalSubjectFactory<S extends Subject<S, ? super T>, T>
-      extends SubjectFactory<OptionalSubject<S, T>, Optional<T>> {
+      implements Subject.Factory<OptionalSubject<S, T>, Optional<T>> {
 
     private Function<? super T, ? extends S> valueAssertThatFunction;
 
@@ -91,8 +90,9 @@
     }
 
     @Override
-    public OptionalSubject<S, T> getSubject(FailureStrategy failureStrategy, Optional<T> optional) {
-      return new OptionalSubject<>(failureStrategy, optional, valueAssertThatFunction);
+    public OptionalSubject<S, T> createSubject(
+        FailureMetadata failureMetadata, Optional<T> optional) {
+      return new OptionalSubject<>(failureMetadata, optional, valueAssertThatFunction);
     }
   }
 }