Automatic code cleanup.

PiperOrigin-RevId: 239180564
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
index 216e4395..8ce3e89 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -73,7 +73,7 @@
       attr("foo", Type.INTEGER).nonEmpty().value(3).build();
       fail();
     } catch (NullPointerException e) {
-      assertThat(e).hasMessage("attribute 'foo' must be a list");
+      assertThat(e).hasMessageThat().isEqualTo("attribute 'foo' must be a list");
     }
   }
 
@@ -91,7 +91,7 @@
       attr("foo", Type.INTEGER).singleArtifact().value(3).build();
       fail();
     } catch (IllegalStateException e) {
-      assertThat(e).hasMessage("attribute 'foo' must be a label-valued type");
+      assertThat(e).hasMessageThat().isEqualTo("attribute 'foo' must be a label-valued type");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeValueSourceTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeValueSourceTest.java
index 8f33fe0..2eabb19 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeValueSourceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeValueSourceTest.java
@@ -63,7 +63,7 @@
       source.validateSkylarkName(name, Location.BUILTIN);
       fail("Expected an exception because of an invalid name.");
     } catch (EvalException ex) {
-      assertThat(ex).hasMessage(expectedExceptionMessage);
+      assertThat(ex).hasMessageThat().isEqualTo(expectedExceptionMessage);
     }
   }
 
@@ -94,9 +94,12 @@
       fail("Expected an exception because of an invalid name.");
     } catch (EvalException ex) {
       assertThat(ex)
-          .hasMessage(
-              String.format("When an attribute value is a function, the attribute must be private "
-                  + "(i.e. start with '_'). Found '%s'", invalidName));
+          .hasMessageThat()
+          .isEqualTo(
+              String.format(
+                  "When an attribute value is a function, the attribute must be private "
+                      + "(i.e. start with '_'). Found '%s'",
+                  invalidName));
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java b/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java
index 147b3c8..2293402 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/BuildTypeTest.java
@@ -116,7 +116,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "expected value of type 'dict(label, string)', "
                   + "but got \"//actually/a:label\" (string)");
     }
@@ -130,7 +131,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "expected value of type 'dict(label, string)', "
                   + "but got [\"//actually/a:label\"] (List)");
     }
@@ -143,7 +145,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage("expected value of type 'string' for dict key element, but got 1 (int)");
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'string' for dict key element, but got 1 (int)");
     }
   }
 
@@ -155,7 +158,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage("expected value of type 'string' for dict value element, but got 3 (int)");
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'string' for dict value element, but got 3 (int)");
     }
   }
 
@@ -168,7 +172,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "invalid label '//uplevel/references/are:../../forbidden' in "
                   + "dict key element: invalid target name '../../forbidden': "
                   + "target names may not contain up-level references '..'");
@@ -188,7 +193,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "duplicate labels: //current/package:reference "
                   + "(as [\":reference\", \"//current/package:reference\"])");
     }
@@ -212,7 +218,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "duplicate labels: //current/rule:rule "
                   + "(as [\":rule\", \"//current/rule:rule\", \"//current/rule\"]), "
                   + "//other/package:package "
@@ -233,7 +240,8 @@
       fail("Expected a conversion exception to be thrown.");
     } catch (ConversionException expected) {
       assertThat(expected)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "duplicate labels in flag map: //current/package:reference "
                   + "(as [\":reference\", \"//current/package:reference\"])");
     }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/ExportsFilesTest.java b/src/test/java/com/google/devtools/build/lib/packages/ExportsFilesTest.java
index b61ca1f..b67511b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/ExportsFilesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/ExportsFilesTest.java
@@ -76,9 +76,12 @@
       pkg().getTarget("baz.txt");
       fail();
     } catch (NoSuchTargetException e) {
-      assertThat(e).hasMessage("no such target '//pkg:baz.txt':"
-          + " target 'baz.txt' not declared in package 'pkg' (did you mean 'bar.txt'?)"
-          + " defined by /workspace/pkg/BUILD");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "no such target '//pkg:baz.txt':"
+                  + " target 'baz.txt' not declared in package 'pkg' (did you mean 'bar.txt'?)"
+                  + " defined by /workspace/pkg/BUILD");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
index c6b013d..8bd17a6 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageFactoryTest.java
@@ -356,7 +356,8 @@
       fail();
     } catch (NoSuchTargetException e) {
       assertThat(e)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "no such target '//foo:A': "
                   + "target 'A' not declared in package 'foo' defined by /foo/BUILD");
     }
@@ -519,7 +520,8 @@
       fail();
     } catch (NoSuchTargetException e) {
       assertThat(e)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "no such target '//x:y.cc': "
                   + "target 'y.cc' not declared in package 'x'; "
                   + "however, a source file of this name exists.  "
@@ -532,7 +534,8 @@
       fail();
     } catch (NoSuchTargetException e) {
       assertThat(e)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "no such target '//x:z.cc': "
                   + "target 'z.cc' not declared in package 'x' (did you mean 'x.cc'?) "
                   + "defined by /x/BUILD");
@@ -543,7 +546,8 @@
       fail();
     } catch (NoSuchTargetException e) {
       assertThat(e)
-          .hasMessage(
+          .hasMessageThat()
+          .isEqualTo(
               "no such target '//x:dir': target 'dir' not declared in package 'x'; "
                   + "however, a source directory of this name exists.  "
                   + "(Perhaps add 'exports_files([\"dir\"])' to x/BUILD, "
@@ -751,7 +755,9 @@
           /* excludeDirs= */ true);
       fail();
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessage("ERROR /globs/BUILD:2:73: name 'this_will_fail' is not defined");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("ERROR /globs/BUILD:2:73: name 'this_will_fail' is not defined");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
index cbfdbfb..09096af 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassBuilderTest.java
@@ -166,7 +166,9 @@
       new RuleClass.Builder("ruleC", RuleClassType.NORMAL, false, a, b).build();
       fail();
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessage("Attribute a is inherited multiple times in ruleC ruleclass");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("Attribute a is inherited multiple times in ruleC ruleclass");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
index e7e4204..254ef0f 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleClassTest.java
@@ -403,8 +403,11 @@
       attributes.get("my-labellist-attr", Type.STRING); // wrong type
       fail();
     } catch (IllegalArgumentException e) {
-      assertThat(e).hasMessage("Attribute my-labellist-attr is of type list(label) "
-          + "and not of type string in ruleA rule //testpackage:my-rule-A");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "Attribute my-labellist-attr is of type list(label) "
+                  + "and not of type string in ruleA rule //testpackage:my-rule-A");
     }
   }
 
@@ -547,7 +550,7 @@
           + "declaration errors");
     } catch (IllegalArgumentException e) {
       // Expected outcome.
-      assertThat(e).hasMessage(expectedMessage);
+      assertThat(e).hasMessageThat().isEqualTo(expectedMessage);
     }
   }
 
@@ -801,8 +804,11 @@
       childRuleClassBuilder.override(attr("attr", INTEGER));
       fail();
     } catch (IllegalStateException e) {
-      assertThat(e).hasMessage("The type of the new attribute 'int' is different from "
-          + "the original one 'string'.");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "The type of the new attribute 'int' is different from "
+                  + "the original one 'string'.");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
index ede310b..628e9c5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -292,13 +292,17 @@
       ConfigurationResolver.putOnlyEntry(map, "foo", "baz");
       fail("Expected an exception when trying to add a new value to an existing key");
     } catch (VerifyException e) {
-      assertThat(e).hasMessage("couldn't insert baz: map already has values for key foo: [bar]");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("couldn't insert baz: map already has values for key foo: [bar]");
     }
     try {
       ConfigurationResolver.putOnlyEntry(map, "foo", "bar");
       fail("Expected an exception when trying to add a pre-existing <key, value> pair");
     } catch (VerifyException e) {
-      assertThat(e).hasMessage("couldn't insert bar: map already has values for key foo: [bar]");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("couldn't insert bar: map already has values for key foo: [bar]");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index 62691af..bb98b91 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -803,7 +803,7 @@
       getDirtyFilesystemKeys(evaluator, checker);
       fail();
     } catch (RuntimeException e) {
-      assertThat(e).hasMessage("bork");
+      assertThat(e).hasMessageThat().isEqualTo("bork");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
index 2e39ef8..d6ead22 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageFunctionTest.java
@@ -501,7 +501,7 @@
     String expectedMsg =
         "error loading package 'test/skylark': "
             + "Unable to load file '//test/skylark:bad_extension.bzl': file doesn't exist";
-    assertThat(errorInfo.getException()).hasMessage(expectedMsg);
+    assertThat(errorInfo.getException()).hasMessageThat().isEqualTo(expectedMsg);
   }
 
   @Test
@@ -526,7 +526,8 @@
     assertThat(result.hasError()).isTrue();
     ErrorInfo errorInfo = result.getError(skyKey);
     assertThat(errorInfo.getException())
-        .hasMessage(
+        .hasMessageThat()
+        .isEqualTo(
             "error loading package 'test/skylark': "
                 + "in /workspace/test/skylark/extension.bzl: "
                 + "Unable to load file '//test/skylark:bad_extension.bzl': file doesn't exist");
@@ -553,7 +554,8 @@
     ErrorInfo errorInfo = result.getError(skyKey);
     assertThat(errorInfo.getRootCauseOfException()).isEqualTo(skyKey);
     assertThat(errorInfo.getException())
-        .hasMessage(
+        .hasMessageThat()
+        .isEqualTo(
             "error loading package 'test/skylark': Encountered error while reading extension "
                 + "file 'test/skylark/extension.bzl': Symlink cycle");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
index 9d53a09..da96e3f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TargetMarkerFunctionTest.java
@@ -111,7 +111,7 @@
     String expectedMessage =
         "no such package 'no/such/package': BUILD file not found on "
             + "package path for 'no/such/package'";
-    assertThat(exn).hasMessage(expectedMessage);
+    assertThat(exn).hasMessageThat().isEqualTo(expectedMessage);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderMediumTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderMediumTest.java
index 4334b3e..beb661f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderMediumTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderMediumTest.java
@@ -419,7 +419,9 @@
       createCache();
       fail("Expected IOException");
     } catch (IOException e) {
-      assertThat(e).hasMessage("Failed action cache referential integrity check: empty index");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("Failed action cache referential integrity check: empty index");
     }
 
     buildArtifacts(persistentBuilder(createCache()), hello);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTest.java
index d7ecec6..84cf0a2 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTest.java
@@ -86,7 +86,7 @@
       buildArtifacts(cachingBuilder(), hello);
       fail("Expected input file to be missing");
     } catch (BuildFailedException e) {
-      assertThat(e).hasMessage("missing input file '" + hello.getPath() + "'");
+      assertThat(e).hasMessageThat().isEqualTo("missing input file '" + hello.getPath() + "'");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
index 152480c..fdaae44 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
@@ -68,7 +68,7 @@
       eval("foo");
       fail();
     } catch (EvalException e) {
-      assertThat(e).hasMessage("name 'foo' is not defined");
+      assertThat(e).hasMessageThat().isEqualTo("name 'foo' is not defined");
     }
     update("foo", "bar");
     assertThat(eval("foo")).isEqualTo("bar");
@@ -82,7 +82,7 @@
       eval("foo");
       fail();
     } catch (EvalException e) {
-      assertThat(e).hasMessage("name 'foo' is not defined");
+      assertThat(e).hasMessageThat().isEqualTo("name 'foo' is not defined");
     }
     eval("foo = 'bar'");
     assertThat(eval("foo")).isEqualTo("bar");
@@ -161,7 +161,7 @@
       update("some_name", null);
       fail();
     } catch (NullPointerException e) {
-      assertThat(e).hasMessage("trying to assign null to 'some_name'");
+      assertThat(e).hasMessageThat().isEqualTo("trying to assign null to 'some_name'");
     }
   }
 
@@ -188,14 +188,14 @@
       env.update("x", 4);
       throw new Exception("failed to fail"); // not an AssertionError like fail()
     } catch (AssertionError e) {
-      assertThat(e).hasMessage("Can't update x to 4 in frozen environment");
+      assertThat(e).hasMessageThat().isEqualTo("Can't update x to 4 in frozen environment");
     }
     try {
       // This update to a new variable should also fail because the environment was frozen.
       env.update("newvar", 5);
       throw new Exception("failed to fail"); // not an AssertionError like fail()
     } catch (AssertionError e) {
-      assertThat(e).hasMessage("Can't update newvar to 5 in frozen environment");
+      assertThat(e).hasMessageThat().isEqualTo("Can't update newvar to 5 in frozen environment");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserInputSourceTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserInputSourceTest.java
index fc8fb6b..ec52204 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserInputSourceTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserInputSourceTest.java
@@ -72,7 +72,7 @@
       fail();
     } catch (IOException e) {
       String expected = "/does/not/exist (No such file or directory)";
-      assertThat(e).hasMessage(expected);
+      assertThat(e).hasMessageThat().isEqualTo(expected);
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/PrinterTest.java b/src/test/java/com/google/devtools/build/lib/syntax/PrinterTest.java
index 3609c0c..e67d9df 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/PrinterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/PrinterTest.java
@@ -90,7 +90,7 @@
       Printer.format(format, arguments);
       fail();
     } catch (IllegalFormatException e) {
-      assertThat(e).hasMessage(errorMessage);
+      assertThat(e).hasMessageThat().isEqualTo(errorMessage);
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkListTest.java b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkListTest.java
index 7d427e6..96c5363 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/SkylarkListTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/SkylarkListTest.java
@@ -250,31 +250,31 @@
       list.add(4, null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
     try {
       list.add(0, 4, null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
     try {
       list.addAll(ImmutableList.of(4, 5, 6), null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
     try {
       list.remove(0, null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
     try {
       list.set(0, 10, null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
   }
 
@@ -288,7 +288,7 @@
       list.add(4, null, mutability);
       fail("expected exception");
     } catch (EvalException e) {
-      assertThat(e).hasMessage("trying to mutate a frozen object");
+      assertThat(e).hasMessageThat().isEqualTo("trying to mutate a frozen object");
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/TypeTest.java b/src/test/java/com/google/devtools/build/lib/syntax/TypeTest.java
index bf9674c..de26138 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/TypeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/TypeTest.java
@@ -67,7 +67,9 @@
       // This does not use assertMessageContainsWordsWithQuotes because at least
       // one test should test exact wording (but they all shouldn't to make
       // changing/improving the messages easy).
-      assertThat(e).hasMessage("expected value of type 'int', but got \"foo\" (string)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'int', but got \"foo\" (string)");
     }
   }
 
@@ -78,8 +80,11 @@
       Type.STRING_LIST.convert("[(1,2), 3, 4]", "myexpr", null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'list(string)' for myexpr, "
-          + "but got \"[(1,2), 3, 4]\" (string)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'list(string)' for myexpr, "
+                  + "but got \"[(1,2), 3, 4]\" (string)");
     }
   }
 
@@ -96,7 +101,7 @@
       Type.STRING.convert(3, null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'string', but got 3 (int)");
+      assertThat(e).hasMessageThat().isEqualTo("expected value of type 'string', but got 3 (int)");
     }
   }
 
@@ -119,8 +124,9 @@
       Type.BOOLEAN.convert("unexpected", null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'int', but got \"unexpected\" (string)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'int', but got \"unexpected\" (string)");
     }
     // Integers other than [0, 1] should fail.
     try {
@@ -265,7 +271,7 @@
       BuildType.LABEL.convert(3, null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'string', but got 3 (int)");
+      assertThat(e).hasMessageThat().isEqualTo("expected value of type 'string', but got 3 (int)");
     }
   }
 
@@ -296,8 +302,11 @@
       Type.STRING_DICT.convert(input, null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'string' for dict value element, "
-          + "but got [\"bar\", \"baz\"] (list)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'string' for dict value element, "
+                  + "but got [\"bar\", \"baz\"] (list)");
     }
   }
 
@@ -307,7 +316,9 @@
       Type.STRING_LIST.convert(3, "blah");
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'list(string)' for blah, but got 3 (int)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'list(string)' for blah, but got 3 (int)");
     }
   }
 
@@ -318,8 +329,10 @@
       Type.STRING_LIST.convert(input, "argument quux");
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'string' for element 2 of argument quux, but got 1 (int)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'string' for element 2 of argument quux, but got 1 (int)");
     }
   }
 
@@ -351,7 +364,9 @@
       BuildType.LABEL_LIST.convert(3, "foo", currentRule);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'list(label)' for foo, but got 3 (int)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'list(label)' for foo, but got 3 (int)");
     }
   }
 
@@ -362,8 +377,9 @@
       BuildType.LABEL_LIST.convert(list, null, currentRule);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'string' for element 1 of null, but got 2 (int)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'string' for element 1 of null, but got 2 (int)");
     }
   }
 
@@ -374,9 +390,12 @@
       BuildType.LABEL_LIST.convert(list, "myexpr", currentRule);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("invalid label '//foo:bar/..' in element 0 of myexpr: "
-          + "invalid target name 'bar/..': "
-          + "target names may not contain up-level references '..'");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "invalid label '//foo:bar/..' in element 0 of myexpr: "
+                  + "invalid target name 'bar/..': "
+                  + "target names may not contain up-level references '..'");
     }
   }
 
@@ -402,8 +421,9 @@
       Type.STRING_LIST_DICT.convert(input, null, currentRule);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'string' for dict key element, but got 2 (int)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo("expected value of type 'string' for dict key element, but got 2 (int)");
     }
   }
 
@@ -415,9 +435,11 @@
       Type.STRING_LIST_DICT.convert(input, null, currentRule);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'list(string)' for dict value element, "
-          + "but got \"bar\" (string)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'list(string)' for dict value element, "
+                  + "but got \"bar\" (string)");
     }
   }
 
@@ -428,8 +450,11 @@
       Type.STRING_LIST_DICT.convert(input, null);
       fail();
     } catch (Type.ConversionException e) {
-      assertThat(e).hasMessage("expected value of type 'string' for dict key element, but got "
-          + "(\"foo\",) (tuple)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'string' for dict key element, but got "
+                  + "(\"foo\",) (tuple)");
     }
   }
 
@@ -439,8 +464,10 @@
       Type.STRING_DICT.convert("some string", null);
       fail();
     } catch (ConversionException e) {
-      assertThat(e).hasMessage(
-          "expected value of type 'dict(string, string)', but got \"some string\" (string)");
+      assertThat(e)
+          .hasMessageThat()
+          .isEqualTo(
+              "expected value of type 'dict(string, string)', but got \"some string\" (string)");
     }
   }