diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
index 4baaa20..9cf9e35 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
@@ -45,7 +45,7 @@
     assertThat(state.isIncompleteState()).isFalse();
     assertThat(state.isMissingState()).isFalse();
 
-    assertThat(state.asExistingState()).isSameAs(state);
+    assertThat(state.asExistingState()).isSameInstanceAs(state);
     assertThrows(IllegalStateException.class, () -> state.asIncompleteState());
     assertThrows(IllegalStateException.class, () -> state.asMissingState());
 
@@ -71,7 +71,7 @@
     assertThat(state.isIncompleteState()).isTrue();
     assertThat(state.isMissingState()).isFalse();
 
-    assertThat(state.asIncompleteState()).isSameAs(state);
+    assertThat(state.asIncompleteState()).isSameInstanceAs(state);
     assertThrows(IllegalStateException.class, () -> state.asExistingState());
     assertThrows(IllegalStateException.class, () -> state.asMissingState());
 
@@ -93,7 +93,7 @@
     assertThat(state.isExistingState()).isFalse();
     assertThat(state.isIncompleteState()).isFalse();
 
-    assertThat(state.asMissingState()).isSameAs(state);
+    assertThat(state.asMissingState()).isSameInstanceAs(state);
     assertThrows(IllegalStateException.class, () -> state.asExistingState());
     assertThrows(IllegalStateException.class, () -> state.asIncompleteState());
   }
diff --git a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactoryTest.java b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactoryTest.java
index 315ab27..027ca04 100644
--- a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactoryTest.java
+++ b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/CancellableRequestFactoryTest.java
@@ -170,7 +170,7 @@
     assertThat(testRan.get()).isTrue();
     assertThat(result.getRunCount()).isEqualTo(1);
     assertThat(result.getFailureCount()).isEqualTo(1);
-    assertThat(result.getFailures().get(0).getException()).isSameAs(expectedFailure);
+    assertThat(result.getFailures().get(0).getException()).isSameInstanceAs(expectedFailure);
   }
 
 
diff --git a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/MemoizingRequestTest.java b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/MemoizingRequestTest.java
index ab383f0..491d5a4 100644
--- a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/MemoizingRequestTest.java
+++ b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/internal/junit4/MemoizingRequestTest.java
@@ -49,7 +49,7 @@
     Runner firstRunner = memoizingRequest.getRunner();
     Runner secondRunner = memoizingRequest.getRunner();
 
-    assertThat(secondRunner).isSameAs(firstRunner);
+    assertThat(secondRunner).isSameInstanceAs(firstRunner);
     verify(mockRequestDelegate).getRunner();
     verifyNoMoreInteractions(mockRequestDelegate);
   }
@@ -66,8 +66,8 @@
     Runner firstRunner = memoizingRequest.getRunner();
     Runner secondRunner = memoizingRequest.getRunner();
 
-    assertThat(firstRunner).isSameAs(stubRunner);
-    assertThat(secondRunner).isSameAs(firstRunner);
+    assertThat(firstRunner).isSameInstanceAs(stubRunner);
+    assertThat(secondRunner).isSameInstanceAs(firstRunner);
     verifyZeroInteractions(mockRequestDelegate);
   }
 }
diff --git a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java
index 18ac72a..7134d18 100644
--- a/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java
+++ b/src/java_tools/junitrunner/javatests/com/google/testing/junit/runner/util/GoogleTestSecurityManagerTest.java
@@ -126,7 +126,7 @@
     System.setSecurityManager(otherSecurityManager);
     GoogleTestSecurityManager.uninstallIfInstalled();
 
-    assertThat(System.getSecurityManager()).isSameAs(otherSecurityManager);
+    assertThat(System.getSecurityManager()).isSameInstanceAs(otherSecurityManager);
     System.setSecurityManager(null);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java
index 72501d4..8c64aa2 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTestUtils.java
@@ -115,7 +115,7 @@
 
   private static void verifyStructure(Object lhs, Object rhs) {
     if (lhs == NestedSet.EMPTY_CHILDREN) {
-      assertThat(rhs).isSameAs(NestedSet.EMPTY_CHILDREN);
+      assertThat(rhs).isSameInstanceAs(NestedSet.EMPTY_CHILDREN);
     } else if (lhs instanceof Object[]) {
       assertThat(rhs).isInstanceOf(Object[].class);
       Object[] lhsArray = (Object[]) lhs;
diff --git a/src/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java b/src/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
index 1eccf72..6df4008 100644
--- a/src/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
+++ b/src/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
@@ -65,7 +65,7 @@
         (descriptor, expected) -> {
           InferredType type = InferredType.create(descriptor);
           assertThat(type.descriptor()).isEqualTo(descriptor);
-          assertThat(type).isSameAs(expected);
+          assertThat(type).isSameInstanceAs(expected);
         });
   }
 }
diff --git a/src/test/java/com/google/devtools/build/android/dexer/DexConversionEnqueuerTest.java b/src/test/java/com/google/devtools/build/android/dexer/DexConversionEnqueuerTest.java
index b032f96..84295dc 100644
--- a/src/test/java/com/google/devtools/build/android/dexer/DexConversionEnqueuerTest.java
+++ b/src/test/java/com/google/devtools/build/android/dexer/DexConversionEnqueuerTest.java
@@ -132,7 +132,7 @@
     assertThat(f.isDone()).isTrue();
     assertThat(f.get().getEntry().getName()).isEqualTo(filename + ".dex");
     assertThat(f.get().getEntry().getTime()).isEqualTo(FILE_TIME);
-    assertThat(f.get().getContent()).isSameAs(dexcode);
+    assertThat(f.get().getContent()).isSameInstanceAs(dexcode);
   }
 
   private byte[] testConvertClassToDex() throws Exception {
@@ -151,7 +151,7 @@
     Dex dex = new Dex(dexcode);
     assertThat(dex.classDefs()).hasSize(1);
     assertThat(cache.getIfPresent(DexingKey.create(false, false, PositionList.LINES, bytecode)))
-        .isSameAs(dexcode);
+        .isSameInstanceAs(dexcode);
     assertThat(cache.getIfPresent(DexingKey.create(false, false, PositionList.NONE, bytecode)))
         .isNull();
     assertThat(cache.getIfPresent(DexingKey.create(true, false, PositionList.LINES, bytecode)))
diff --git a/src/test/java/com/google/devtools/build/android/dexer/DexFileAggregatorTest.java b/src/test/java/com/google/devtools/build/android/dexer/DexFileAggregatorTest.java
index c578229..7c92c15 100644
--- a/src/test/java/com/google/devtools/build/android/dexer/DexFileAggregatorTest.java
+++ b/src/test/java/com/google/devtools/build/android/dexer/DexFileAggregatorTest.java
@@ -156,7 +156,7 @@
     dexer.add(dex2);  // this should start a new shard
     // Make sure there was one file written and that file is dex
     verify(dest).addFile(any(ZipEntry.class), written.capture());
-    assertThat(written.getValue()).isSameAs(dex);
+    assertThat(written.getValue()).isSameInstanceAs(dex);
     dexer.close();
     verify(dest).addFile(any(ZipEntry.class), eq(dex2));
   }
diff --git a/src/test/java/com/google/devtools/build/android/junctions/NoopJunctionCreatorTest.java b/src/test/java/com/google/devtools/build/android/junctions/NoopJunctionCreatorTest.java
index a99d568..6f7dbae 100644
--- a/src/test/java/com/google/devtools/build/android/junctions/NoopJunctionCreatorTest.java
+++ b/src/test/java/com/google/devtools/build/android/junctions/NoopJunctionCreatorTest.java
@@ -44,6 +44,6 @@
 
     Path p = tmproot.resolve("foo");
     // Cast Path to Object to disambiguate which assertThat-overload to use.
-    assertThat((Object) jc.create(p)).isSameAs(p);
+    assertThat((Object) jc.create(p)).isSameInstanceAs(p);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java b/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java
index 31e70d6..f9f6e46 100644
--- a/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java
+++ b/src/test/java/com/google/devtools/build/android/ziputils/SplitZipTest.java
@@ -66,7 +66,7 @@
               "out/shard1.jar"))
           .addOutput(new ZipOut(fileSystem.getOutputChannel("out/shard2.jar", false),
               "out/shard2.jar"));
-      assertThat(result).isSameAs(instance);
+      assertThat(result).isSameInstanceAs(instance);
   }
 
   @Test
@@ -74,7 +74,7 @@
     SplitZip instance = new SplitZip();
     String res = "res";
     SplitZip result = instance.setResourceFile(res);
-    assertThat(result).isSameAs(instance);
+    assertThat(result).isSameInstanceAs(instance);
   }
 
   @Test
@@ -89,9 +89,9 @@
   public void testSetMainClassListFile() {
     SplitZip instance = new SplitZip();
     SplitZip result = instance.setMainClassListFile((String) null);
-    assertThat(result).isSameAs(instance);
+    assertThat(result).isSameInstanceAs(instance);
     result = instance.setMainClassListFile("no format checks");
-    assertThat(result).isSameAs(instance);
+    assertThat(result).isSameInstanceAs(instance);
   }
 
   @Test
@@ -109,7 +109,7 @@
   public void testSetEntryDate() {
     SplitZip instance = new SplitZip();
     SplitZip result = instance.setEntryDate(null);
-    assertThat(result).isSameAs(instance);
+    assertThat(result).isSameInstanceAs(instance);
   }
 
   @Test
@@ -118,7 +118,7 @@
     Date now = new Date();
     instance.setEntryDate(now);
     Date result = instance.getEntryDate();
-    assertThat(now).isSameAs(result);
+    assertThat(now).isSameInstanceAs(result);
     instance.setEntryDate(null);
     assertThat(instance.getEntryDate()).isNull();
   }
@@ -127,7 +127,7 @@
   public void testUseDefaultEntryDate() {
     SplitZip instance = new SplitZip();
     SplitZip result = instance.useDefaultEntryDate();
-    assertThat(result).isSameAs(instance);
+    assertThat(result).isSameInstanceAs(instance);
     Date date = instance.getEntryDate();
     assertThat(date).isEqualTo(DosTime.DOS_EPOCH);
   }
diff --git a/src/test/java/com/google/devtools/build/android/ziputils/ViewTest.java b/src/test/java/com/google/devtools/build/android/ziputils/ViewTest.java
index e9a7915..01e4bcd 100644
--- a/src/test/java/com/google/devtools/build/android/ziputils/ViewTest.java
+++ b/src/test/java/com/google/devtools/build/android/ziputils/ViewTest.java
@@ -50,7 +50,7 @@
     ByteBuffer buffer = ByteBuffer.allocate(100);
     TestView instance = new TestView(buffer);
     View<TestView> result = instance.at(fileOffset);
-    assertWithMessage("didn't return this").that(result).isSameAs(instance);
+    assertWithMessage("didn't return this").that(result).isSameInstanceAs(instance);
 
     long resultValue = instance.fileOffset();
     assertWithMessage("didn't return set value").that(resultValue).isEqualTo(fileOffset);
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
index 09bdf59..b0a050e 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ArtifactTest.java
@@ -280,7 +280,7 @@
   public void testRootRelativePathIsSameAsExecPath() throws Exception {
     ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.dir("/foo")));
     Artifact a = new Artifact(scratch.file("/foo/bar1.h"), root);
-    assertThat(a.getRootRelativePath()).isSameAs(a.getExecPath());
+    assertThat(a.getRootRelativePath()).isSameInstanceAs(a.getExecPath());
   }
 
   @Test
@@ -344,13 +344,13 @@
         (SourceArtifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifact));
     SourceArtifact deserialized2 =
         (SourceArtifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifact));
-    assertThat(deserialized1).isSameAs(deserialized2);
+    assertThat(deserialized1).isSameInstanceAs(deserialized2);
 
     Artifact sourceArtifactFromFactory =
         artifactFactory.getSourceArtifact(pathFragment, root, owner);
     Artifact deserialized =
         (Artifact) objectCodecs.deserialize(objectCodecs.serialize(sourceArtifactFromFactory));
-    assertThat(sourceArtifactFromFactory).isSameAs(deserialized);
+    assertThat(sourceArtifactFromFactory).isSameInstanceAs(deserialized);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/actions/CompositeRunfilesSupplierTest.java b/src/test/java/com/google/devtools/build/lib/actions/CompositeRunfilesSupplierTest.java
index 5b9d06d..3ebc001 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/CompositeRunfilesSupplierTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/CompositeRunfilesSupplierTest.java
@@ -58,17 +58,17 @@
     assertThat(
             CompositeRunfilesSupplier.of(
                 EmptyRunfilesSupplier.INSTANCE, EmptyRunfilesSupplier.INSTANCE))
-        .isSameAs(EmptyRunfilesSupplier.INSTANCE);
+        .isSameInstanceAs(EmptyRunfilesSupplier.INSTANCE);
     assertThat(CompositeRunfilesSupplier.of(EmptyRunfilesSupplier.INSTANCE, mockFirst))
-        .isSameAs(mockFirst);
+        .isSameInstanceAs(mockFirst);
     assertThat(CompositeRunfilesSupplier.of(mockFirst, EmptyRunfilesSupplier.INSTANCE))
-        .isSameAs(mockFirst);
+        .isSameInstanceAs(mockFirst);
   }
 
   @Test
   public void fromSuppliersSeleton() {
     assertThat(CompositeRunfilesSupplier.fromSuppliers(ImmutableList.of(mockFirst)))
-        .isSameAs(mockFirst);
+        .isSameInstanceAs(mockFirst);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/actions/FailActionTest.java b/src/test/java/com/google/devtools/build/lib/actions/FailActionTest.java
index 4204aef..ae2ec55 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/FailActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/FailActionTest.java
@@ -49,7 +49,7 @@
     outputs = ImmutableList.of(anOutput);
     failAction = new FailAction(NULL_ACTION_OWNER, outputs, errorMessage);
     actionGraph.registerAction(failAction);
-    assertThat(actionGraph.getGeneratingAction(anOutput)).isSameAs(failAction);
+    assertThat(actionGraph.getGeneratingAction(anOutput)).isSameInstanceAs(failAction);
   }
 
   @Test
@@ -71,6 +71,6 @@
 
   @Test
   public void testPrimaryOutput() {
-    assertThat(failAction.getPrimaryOutput()).isSameAs(anOutput);
+    assertThat(failAction.getPrimaryOutput()).isSameInstanceAs(anOutput);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
index 16a19d5..7492cf4 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
@@ -84,7 +84,7 @@
     ConfiguredTarget old = getConfiguredTarget("//java/a:A");
     update("//java/a:A");
     ConfiguredTarget current = getConfiguredTarget("//java/a:A");
-    assertThat(current).isSameAs(old);
+    assertThat(current).isSameInstanceAs(old);
   }
 
   @Test
@@ -99,7 +99,7 @@
     ConfiguredTarget old = getConfiguredTarget("//java/a:A");
     update("//java/a:A");
     ConfiguredTarget current = getConfiguredTarget("//java/a:A");
-    assertThat(current).isSameAs(old);
+    assertThat(current).isSameInstanceAs(old);
   }
 
   @Test
@@ -469,7 +469,7 @@
 
     update(aTarget);
     ConfiguredTarget updated2CT = getConfiguredTarget(aTarget);
-    assertThat(updated2CT).isSameAs(updatedCT);
+    assertThat(updated2CT).isSameInstanceAs(updatedCT);
   }
 
   @Test
@@ -492,7 +492,7 @@
     ConfiguredTarget newAConfTarget = getConfiguredTarget(aTarget);
     ConfiguredTarget newBConfTarget = getConfiguredTarget(bTarget);
 
-    assertThat(newAConfTarget).isSameAs(oldAConfTarget);
+    assertThat(newAConfTarget).isSameInstanceAs(oldAConfTarget);
     assertThat(newBConfTarget).isNotSameInstanceAs(oldBConfTarget);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AspectCollectionTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AspectCollectionTest.java
index b6cd781..536756e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AspectCollectionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AspectCollectionTest.java
@@ -395,10 +395,9 @@
   private static void collectAndValidateAspectDeps(AspectDeps aspectDeps,
       HashMap<AspectDescriptor, AspectDeps> allDeps) {
     if (allDeps.containsKey(aspectDeps.getAspect())) {
-      assertWithMessage(
-          String.format("Two different deps for aspect %s", aspectDeps.getAspect()))
+      assertWithMessage(String.format("Two different deps for aspect %s", aspectDeps.getAspect()))
           .that(allDeps.get(aspectDeps.getAspect()))
-          .isSameAs(aspectDeps);
+          .isSameInstanceAs(aspectDeps);
       return;
     }
     allDeps.put(aspectDeps.getAspect(), aspectDeps);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
index 561d3f0..67478cd 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java
@@ -96,7 +96,7 @@
 
     ConfiguredTargetAndData ruleCTAT = getConfiguredTargetAndTarget("//pkg:foo");
 
-    assertThat(ruleCTAT.getTarget()).isSameAs(ruleTarget);
+    assertThat(ruleCTAT.getTarget()).isSameInstanceAs(ruleTarget);
   }
 
   @Test
@@ -163,7 +163,7 @@
     assertThat(outputArtifact.getRootRelativePath()).isEqualTo(PathFragment.create("pkg/a.out"));
 
     Action action = getGeneratingAction(outputArtifact);
-    assertThat(action.getClass()).isSameAs(FailAction.class);
+    assertThat(action.getClass()).isSameInstanceAs(FailAction.class);
   }
 
   @Test
@@ -724,7 +724,7 @@
     Artifact aout = Iterables.getOnlyElement(
         target.getProvider(FileProvider.class).getFilesToBuild());
     Action action = getGeneratingAction(aout);
-    assertThat(action.getClass()).isSameAs(FailAction.class);
+    assertThat(action.getClass()).isSameInstanceAs(FailAction.class);
   }
 
   /**
@@ -787,7 +787,7 @@
     Artifact aout = Iterables.getOnlyElement(
         target.getProvider(FileProvider.class).getFilesToBuild());
     Action action = getGeneratingAction(aout);
-    assertThat(action.getClass()).isSameAs(FailAction.class);
+    assertThat(action.getClass()).isSameInstanceAs(FailAction.class);
   }
 
   /**
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTargetTest.java b/src/test/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTargetTest.java
index 220a504..032c2cf 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTargetTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/OutputFileConfiguredTargetTest.java
@@ -41,7 +41,7 @@
     OutputFileConfiguredTarget generatedSource = (OutputFileConfiguredTarget)
         getConfiguredTarget("//foo:generated.source", getHostConfiguration());
     assertThat(generatedSource.getGeneratingRule())
-        .isSameAs(getConfiguredTarget("//foo:generating_rule", getHostConfiguration()));
+        .isSameInstanceAs(getConfiguredTarget("//foo:generating_rule", getHostConfiguration()));
   }
 
   /**
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
index 26a6dbc..457e3e5 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/RunfilesTest.java
@@ -415,8 +415,8 @@
     ArtifactRoot root = ArtifactRoot.asSourceRoot(Root.fromPath(scratch.resolve("/workspace")));
     Artifact artifactA = new Artifact(PathFragment.create("a/target"), root);
     Runfiles runfilesB = new Runfiles.Builder("TESTING").addArtifact(artifactA).build();
-    assertThat(Runfiles.EMPTY.merge(runfilesB)).isSameAs(runfilesB);
-    assertThat(runfilesB.merge(Runfiles.EMPTY)).isSameAs(runfilesB);
+    assertThat(Runfiles.EMPTY.merge(runfilesB)).isSameInstanceAs(runfilesB);
+    assertThat(runfilesB.merge(Runfiles.EMPTY)).isSameInstanceAs(runfilesB);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java
index ea710e1..c1feadb 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationTest.java
@@ -226,7 +226,7 @@
     BuildConfiguration config3 = create("--j2objc_translation_flags=baz");
     // Shared because all j2objc options are the same:
     assertThat(config1.getFragment(J2ObjcConfiguration.class))
-        .isSameAs(config2.getFragment(J2ObjcConfiguration.class));
+        .isSameInstanceAs(config2.getFragment(J2ObjcConfiguration.class));
     // Distinct because the j2objc options differ:
     assertThat(config1.getFragment(J2ObjcConfiguration.class))
         .isNotSameInstanceAs(config3.getFragment(J2ObjcConfiguration.class));
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java
index e7a786b..4cbfa91 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/config/BuildOptionsTest.java
@@ -177,7 +177,7 @@
     assertThat(reconstructedTwo).isEqualTo(two);
     assertThat(reconstructedTwo).isNotSameInstanceAs(two);
     BuildOptions reconstructedOne = one.applyDiff(BuildOptions.diffForReconstruction(one, one));
-    assertThat(reconstructedOne).isSameAs(one);
+    assertThat(reconstructedOne).isSameInstanceAs(one);
     BuildOptions otherFragment = BuildOptions.of(ImmutableList.of(CppOptions.class));
     assertThat(one.applyDiff(BuildOptions.diffForReconstruction(one, otherFragment)))
         .isEqualTo(otherFragment);
@@ -243,7 +243,7 @@
 
     BuildOptions reconstructedOne = one.applyDiff(BuildOptions.diffForReconstruction(one, one));
 
-    assertThat(reconstructedOne).isSameAs(one);
+    assertThat(reconstructedOne).isSameInstanceAs(one);
   }
 
   @Test
@@ -279,7 +279,7 @@
     BuildOptions base = BuildOptions.of(ImmutableList.of(CppOptions.class), "--compiler=a");
     BuildOptions original = BuildOptions.of(ImmutableList.of(CppOptions.class), "--compiler=b");
     BuildOptions reconstructed = base.applyDiff(BuildOptions.diffForReconstruction(base, original));
-    assertThat(reconstructed).isSameAs(original);
+    assertThat(reconstructed).isSameInstanceAs(original);
   }
 
   @Test
@@ -290,7 +290,7 @@
     OptionsDiffForReconstruction diff1 = BuildOptions.diffForReconstruction(one, two);
     OptionsDiffForReconstruction diff2 = BuildOptions.diffForReconstruction(one, two);
 
-    assertThat(diff1).isSameAs(diff2);
+    assertThat(diff1).isSameInstanceAs(diff2);
   }
 
   @Test
@@ -555,7 +555,7 @@
   public void trim_nothingTrimmed_returnsSameInstance() throws Exception {
     BuildOptions original = BuildOptions.of(ImmutableList.of(CppOptions.class, JavaOptions.class));
     BuildOptions trimmed = original.trim(ImmutableSet.of(CppOptions.class, JavaOptions.class));
-    assertThat(trimmed).isSameAs(original);
+    assertThat(trimmed).isSameInstanceAs(original);
   }
 
   private static OptionsDiffForReconstruction uncachedDiffForReconstruction(
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
index a2f9d17..cc6615d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java
@@ -1152,7 +1152,7 @@
       Target outTarget = getTarget(expectedOut);
       if (!(outTarget instanceof OutputFile)) {
         fail("Target " + outTarget + " is not an output");
-        assertThat(((OutputFile) outTarget).getGeneratingRule()).isSameAs(ruleTarget);
+        assertThat(((OutputFile) outTarget).getGeneratingRule()).isSameInstanceAs(ruleTarget);
         // This ensures that the output artifact is wired up in the action graph
         getConfiguredTarget(expectedOut);
       }
@@ -1179,7 +1179,7 @@
       throws Exception {
     assertWithMessage("Action for " + labelA + " did not match " + labelB)
         .that(getGeneratingActionForLabel(labelB))
-        .isSameAs(getGeneratingActionForLabel(labelA));
+        .isSameInstanceAs(getGeneratingActionForLabel(labelA));
   }
 
   protected Artifact getSourceArtifact(PathFragment rootRelativePath, Root root) {
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/PackageIdentifierTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/PackageIdentifierTest.java
index 9e8f3b6..022867c 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/PackageIdentifierTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/PackageIdentifierTest.java
@@ -93,7 +93,7 @@
     // Make sure package fragments are canonicalized.
     PackageIdentifier p1 = PackageIdentifier.create("@whatever", PathFragment.create("foo/bar"));
     PackageIdentifier p2 = PackageIdentifier.create("@whatever", PathFragment.create("foo/bar"));
-    assertThat(p1.getPackageFragment()).isSameAs(p2.getPackageFragment());
+    assertThat(p1.getPackageFragment()).isSameInstanceAs(p2.getPackageFragment());
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/collect/CollectionUtilsTest.java b/src/test/java/com/google/devtools/build/lib/collect/CollectionUtilsTest.java
index 7bf2f76..4daeca2 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/CollectionUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/CollectionUtilsTest.java
@@ -99,7 +99,7 @@
   @Test
   public void testMakeImmutable() throws Exception {
     Iterable<Integer> immutableList = ImmutableList.of(1, 2, 3);
-    assertThat(CollectionUtils.makeImmutable(immutableList)).isSameAs(immutableList);
+    assertThat(CollectionUtils.makeImmutable(immutableList)).isSameInstanceAs(immutableList);
 
     Iterable<Integer> mutableList = Lists.newArrayList(1, 2, 3);
     Iterable<Integer> converted = CollectionUtils.makeImmutable(mutableList);
diff --git a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMapTest.java b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMapTest.java
index 02423ee..cf06049 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMapTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMapTest.java
@@ -34,8 +34,8 @@
     ImmutableSharedKeyMap<String, Object> map =
         ImmutableSharedKeyMap.<String, Object>builder().put("a", valueA).put("b", valueB).build();
 
-    assertThat(map.get("a")).isSameAs(valueA);
-    assertThat(map.get("b")).isSameAs(valueB);
+    assertThat(map.get("a")).isSameInstanceAs(valueA);
+    assertThat(map.get("b")).isSameInstanceAs(valueB);
     assertThat(map.get("c")).isNull();
 
     // Verify that we can find all items both by iteration and indexing
@@ -119,7 +119,7 @@
             .put(keyA, valueA)
             .put(keyB, valueB)
             .build();
-    assertThat(map.get(keyA)).isSameAs(valueA);
-    assertThat(map.get(keyB)).isSameAs(valueB);
+    assertThat(map.get(keyA)).isSameInstanceAs(valueA);
+    assertThat(map.get(keyB)).isSameInstanceAs(valueB);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimapTest.java b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimapTest.java
index f1627f4..b50120d 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimapTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimapTest.java
@@ -196,7 +196,7 @@
   @Test
   public void copyOfImmutableListMultimap() {
     Multimap<String, Integer> multimap = createMultimap();
-    assertThat(ImmutableSortedKeyListMultimap.copyOf(multimap)).isSameAs(multimap);
+    assertThat(ImmutableSortedKeyListMultimap.copyOf(multimap)).isSameInstanceAs(multimap);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyMapTest.java b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyMapTest.java
index 95a1924..ce08b57 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyMapTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyMapTest.java
@@ -161,7 +161,7 @@
     ImmutableSortedKeyMap<String, Integer> copy
         = ImmutableSortedKeyMap.copyOf(Collections.<String, Integer>emptyMap());
     assertThat(copy).isEmpty();
-    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameAs(copy);
+    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameInstanceAs(copy);
   }
 
   @Test
@@ -169,7 +169,7 @@
     ImmutableSortedKeyMap<String, Integer> copy
         = ImmutableSortedKeyMap.copyOf(Collections.singletonMap("one", 1));
     assertMapEquals(copy, "one", 1);
-    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameAs(copy);
+    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameInstanceAs(copy);
   }
 
   @Test
@@ -181,7 +181,7 @@
 
     ImmutableSortedKeyMap<String, Integer> copy = ImmutableSortedKeyMap.copyOf(original);
     assertMapEquals(copy, "one", 1, "three", 3, "two", 2);
-    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameAs(copy);
+    assertThat(ImmutableSortedKeyMap.copyOf(copy)).isSameInstanceAs(copy);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java
index 099c031..36b5b16 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecTest.java
@@ -301,7 +301,7 @@
             nestedSetStore.getContentsAndDeserialize(fingerprint, deserializationContext);
     asyncThread.join();
     Mockito.verify(nestedSetStorageEndpoint, times(1)).get(Mockito.eq(fingerprint));
-    assertThat(result).isSameAs(asyncResult.get());
+    assertThat(result).isSameInstanceAs(asyncResult.get());
     assertThat(result.isDone()).isFalse();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetViewTest.java b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetViewTest.java
index 04054b6..233a23cd 100644
--- a/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetViewTest.java
+++ b/src/test/java/com/google/devtools/build/lib/collect/nestedset/NestedSetViewTest.java
@@ -150,8 +150,8 @@
   public void testSplitNoSplit() {
     NestedSet<String> a = NestedSetBuilder.<String>stableOrder().add("a").add("b").build();
     NestedSetView<String> v = new NestedSetView<>(a);
-    assertThat(v.splitIfExceedsMaximumSize(2)).isSameAs(v);
-    assertThat(v.splitIfExceedsMaximumSize(100)).isSameAs(v);
+    assertThat(v.splitIfExceedsMaximumSize(2)).isSameInstanceAs(v);
+    assertThat(v.splitIfExceedsMaximumSize(100)).isSameInstanceAs(v);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/events/EventCollectorTest.java b/src/test/java/com/google/devtools/build/lib/events/EventCollectorTest.java
index ce339c9..047dd52 100644
--- a/src/test/java/com/google/devtools/build/lib/events/EventCollectorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/events/EventCollectorTest.java
@@ -35,7 +35,7 @@
     collector.handle(event);
     Event onlyEvent = events.iterator().next();
     assertThat(onlyEvent.getMessage()).isEqualTo(event.getMessage());
-    assertThat(onlyEvent.getLocation()).isSameAs(location);
+    assertThat(onlyEvent.getLocation()).isSameInstanceAs(location);
     assertThat(onlyEvent.getKind()).isEqualTo(event.getKind());
     assertThat(onlyEvent.getLocation().getStartOffset())
         .isEqualTo(event.getLocation().getStartOffset());
@@ -50,7 +50,7 @@
     Iterator<Event> collectedEventIt = collector.iterator();
     Event onlyEvent = collectedEventIt.next();
     assertThat(onlyEvent.getMessage()).isEqualTo(event.getMessage());
-    assertThat(onlyEvent.getLocation()).isSameAs(location);
+    assertThat(onlyEvent.getLocation()).isSameInstanceAs(location);
     assertThat(onlyEvent.getKind()).isEqualTo(event.getKind());
     assertThat(onlyEvent.getLocation().getStartOffset())
         .isEqualTo(event.getLocation().getStartOffset());
diff --git a/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java b/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
index d22d182..e6e026c 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/AbstractSpawnStrategyTest.java
@@ -119,7 +119,7 @@
                 // Ignoring the List<SpawnResult> return value.
                 new TestedSpawnStrategy(execRoot, spawnRunner)
                     .exec(SIMPLE_SPAWN, actionExecutionContext));
-    assertThat(e.getSpawnResult()).isSameAs(result);
+    assertThat(e.getSpawnResult()).isSameInstanceAs(result);
     // Must only be called exactly once.
     verify(spawnRunner).execAsync(any(Spawn.class), any(SpawnExecutionContext.class));
   }
@@ -193,7 +193,7 @@
                 // Ignoring the List<SpawnResult> return value.
                 new TestedSpawnStrategy(execRoot, spawnRunner)
                     .exec(SIMPLE_SPAWN, actionExecutionContext));
-    assertThat(e.getSpawnResult()).isSameAs(result);
+    assertThat(e.getSpawnResult()).isSameInstanceAs(result);
     // Must only be called exactly once.
     verify(spawnRunner).execAsync(any(Spawn.class), any(SpawnExecutionContext.class));
     verify(entry).store(eq(result));
diff --git a/src/test/java/com/google/devtools/build/lib/exec/StandaloneTestStrategyTest.java b/src/test/java/com/google/devtools/build/lib/exec/StandaloneTestStrategyTest.java
index 1ebc38c..11afe90 100644
--- a/src/test/java/com/google/devtools/build/lib/exec/StandaloneTestStrategyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/exec/StandaloneTestStrategyTest.java
@@ -203,7 +203,7 @@
     TestResult result = standaloneTestStrategy.postedResult;
     assertThat(result).isNotNull();
     assertThat(result.isCached()).isFalse();
-    assertThat(result.getTestAction()).isSameAs(testRunnerAction);
+    assertThat(result.getTestAction()).isSameInstanceAs(testRunnerAction);
     assertThat(result.getData().getTestPassed()).isTrue();
     assertThat(result.getData().getRemotelyCached()).isFalse();
     assertThat(result.getData().getIsRemoteStrategy()).isFalse();
@@ -272,7 +272,7 @@
     TestResult result = standaloneTestStrategy.postedResult;
     assertThat(result).isNotNull();
     assertThat(result.isCached()).isFalse();
-    assertThat(result.getTestAction()).isSameAs(testRunnerAction);
+    assertThat(result.getTestAction()).isSameInstanceAs(testRunnerAction);
     assertThat(result.getData().getStatus()).isEqualTo(BlazeTestStatus.FLAKY);
     assertThat(result.getData().getTestPassed()).isTrue();
     assertThat(result.getData().getRemotelyCached()).isFalse();
@@ -339,7 +339,7 @@
     TestResult result = standaloneTestStrategy.postedResult;
     assertThat(result).isNotNull();
     assertThat(result.isCached()).isFalse();
-    assertThat(result.getTestAction()).isSameAs(testRunnerAction);
+    assertThat(result.getTestAction()).isSameInstanceAs(testRunnerAction);
     assertThat(result.getData().getTestPassed()).isTrue();
     assertThat(result.getData().getRemotelyCached()).isFalse();
     assertThat(result.getData().getIsRemoteStrategy()).isTrue();
@@ -399,7 +399,7 @@
     TestResult result = standaloneTestStrategy.postedResult;
     assertThat(result).isNotNull();
     assertThat(result.isCached()).isFalse();
-    assertThat(result.getTestAction()).isSameAs(testRunnerAction);
+    assertThat(result.getTestAction()).isSameInstanceAs(testRunnerAction);
     assertThat(result.getData().getTestPassed()).isTrue();
     assertThat(result.getData().getRemotelyCached()).isTrue();
     assertThat(result.getData().getIsRemoteStrategy()).isFalse();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeContainerTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeContainerTest.java
index 688ae45..aeb5337 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeContainerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeContainerTest.java
@@ -140,7 +140,7 @@
 
           Location expectedLocation = i < locationCount ? locations[i] : null;
           assertThat(container.getAttributeLocation(attributes[i].getName()))
-              .isSameAs(expectedLocation);
+              .isSameInstanceAs(expectedLocation);
         }
       }
     }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/InputFileTest.java b/src/test/java/com/google/devtools/build/lib/packages/InputFileTest.java
index 08cee58..7460df2 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/InputFileTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/InputFileTest.java
@@ -101,9 +101,9 @@
   @Test
   public void testEquivalenceRelation() throws NoSuchTargetException {
     InputFile inputFileX = (InputFile) pkg.getTarget("x");
-    assertThat(inputFileX).isSameAs(pkg.getTarget("x"));
+    assertThat(inputFileX).isSameInstanceAs(pkg.getTarget("x"));
     InputFile inputFileY = (InputFile) pkg.getTarget("subdir/y");
-    assertThat(inputFileY).isSameAs(pkg.getTarget("subdir/y"));
+    assertThat(inputFileY).isSameInstanceAs(pkg.getTarget("subdir/y"));
     new EqualsTester()
         .addEqualityGroup(inputFileX)
         .addEqualityGroup(inputFileY)
diff --git a/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java b/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java
index e1fddad..fd4fc3b 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/OutputFileTest.java
@@ -51,7 +51,7 @@
   }
 
   private void checkTargetRetainsGeneratingRule(OutputFile output) throws Exception {
-    assertThat(output.getGeneratingRule()).isSameAs(rule);
+    assertThat(output.getGeneratingRule()).isSameInstanceAs(rule);
   }
 
   private void checkName(OutputFile output, String expectedName) throws Exception {
@@ -64,7 +64,7 @@
 
   @Test
   public void testGetAssociatedRule() throws Exception {
-    assertThat(pkg.getTarget("x").getAssociatedRule()).isSameAs(rule);
+    assertThat(pkg.getTarget("x").getAssociatedRule()).isSameInstanceAs(rule);
   }
 
   @Test
@@ -90,8 +90,8 @@
     OutputFile outputFileX2 = (OutputFile) pkg.getTarget("x");
     OutputFile outputFileY1 = (OutputFile) pkg.getTarget("subdir/y");
     OutputFile outputFileY2 = (OutputFile) pkg.getTarget("subdir/y");
-    assertThat(outputFileX2).isSameAs(outputFileX1);
-    assertThat(outputFileY2).isSameAs(outputFileY1);
+    assertThat(outputFileX2).isSameInstanceAs(outputFileX1);
+    assertThat(outputFileY2).isSameInstanceAs(outputFileY1);
     new EqualsTester()
         .addEqualityGroup(outputFileX1, outputFileX2)
         .addEqualityGroup(outputFileY1, outputFileY2)
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 b8ceb4f..4caa852 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
@@ -254,7 +254,7 @@
     assertThat(pkg.containsErrors()).isFalse();
     assertThat(pkg.getRule("pina-colada")).isNotNull();
     assertThat(pkg.getRule("pina-colada").containsErrors()).isFalse();
-    assertThat(Sets.newHashSet(pkg.getTargets(Rule.class)).size()).isSameAs(1);
+    assertThat(Sets.newHashSet(pkg.getTargets(Rule.class)).size()).isSameInstanceAs(1);
   }
 
   @Test
@@ -323,7 +323,7 @@
     assertThat(target.getName()).isEqualTo("BUILD");
 
     // Test that it's memoized:
-    assertThat(pkg.getTarget("BUILD")).isSameAs(target);
+    assertThat(pkg.getTarget("BUILD")).isSameInstanceAs(target);
   }
 
   @Test
@@ -339,13 +339,13 @@
     assertThat(pkg.containsErrors()).isFalse();
 
     // X is a rule with a circular self-dependency.
-    assertThat(pkg.getTarget("X").getClass()).isSameAs(Rule.class);
+    assertThat(pkg.getTarget("X").getClass()).isSameInstanceAs(Rule.class);
 
     // Y is a rule
-    assertThat(pkg.getTarget("Y").getClass()).isSameAs(Rule.class);
+    assertThat(pkg.getTarget("Y").getClass()).isSameInstanceAs(Rule.class);
 
     // Z is a file
-    assertThat(pkg.getTarget("Z").getClass()).isSameAs(InputFile.class);
+    assertThat(pkg.getTarget("Z").getClass()).isSameInstanceAs(InputFile.class);
 
     // A is nothing
     NoSuchTargetException e = assertThrows(NoSuchTargetException.class, () -> pkg.getTarget("A"));
@@ -419,7 +419,7 @@
 
     // Ensure that rule2's "out2" didn't overwrite rule1's:
     assertThat(((OutputFile) pkg.getTarget("out2")).getGeneratingRule())
-        .isSameAs(pkg.getRule("rule1"));
+        .isSameInstanceAs(pkg.getRule("rule1"));
 
     // None of rule2, its inputs, or its outputs should belong to pkg:
     List<Target> found = new ArrayList<>();
diff --git a/src/test/java/com/google/devtools/build/lib/packages/PackageLoadingOptimizationsTest.java b/src/test/java/com/google/devtools/build/lib/packages/PackageLoadingOptimizationsTest.java
index 024063b..d08a6b4 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/PackageLoadingOptimizationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/PackageLoadingOptimizationsTest.java
@@ -50,7 +50,7 @@
     assertThat(allLists).hasSize(10);
     ImmutableList<Label> firstList = allLists.get(0);
     for (int i = 1; i < allLists.size(); i++) {
-      assertThat(allLists.get(i)).isSameAs(firstList);
+      assertThat(allLists.get(i)).isSameInstanceAs(firstList);
     }
   }
 }
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 8670560..95479d3 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
@@ -300,7 +300,7 @@
     reporter.removeHandler(failFastHandler);
     createRule(depsRuleClass, "depsRule", attributeValues, testRuleLocation);
 
-    assertThat(eventCollector.count()).isSameAs(3);
+    assertThat(eventCollector.count()).isSameInstanceAs(3);
     assertDupError("//testpackage:dup1", "list1", "depsRule");
     assertDupError("//testpackage:dup1", "list3", "depsRule");
     assertDupError("//testpackage:dup2", "list3", "depsRule");
@@ -448,7 +448,7 @@
     Set<String> set = new HashSet<>();
     for (OutputFile outputFile : rule.getOutputFiles()) {
       set.add(outputFile.getName());
-      assertThat(outputFile.getGeneratingRule()).isSameAs(rule);
+      assertThat(outputFile.getGeneratingRule()).isSameInstanceAs(rule);
     }
     assertThat(set).containsExactly("foo-myrule.bar", "libmyrule-wazoo-myrule.mumble",
         "stuff-explicit_out-bar", "explicit_out");
@@ -692,7 +692,7 @@
     List<String> actual = new ArrayList<>();
     for (OutputFile outputFile : rule.getOutputFiles()) {
       actual.add(outputFile.getName());
-      assertThat(outputFile.getGeneratingRule()).isSameAs(rule);
+      assertThat(outputFile.getGeneratingRule()).isSameInstanceAs(rule);
     }
     assertWithMessage("unexpected output set").that(actual).containsExactly("first-myrule",
         "second-myrule", "out-third", "out-fourth", "third", "fourth");
@@ -842,7 +842,7 @@
     reporter.removeHandler(failFastHandler);
     createRule(childRuleClass, "child_rule", childValues, testRuleLocation);
 
-    assertThat(eventCollector.count()).isSameAs(1);
+    assertThat(eventCollector.count()).isSameInstanceAs(1);
     assertContainsEvent("//testpackage:child_rule: missing value for mandatory "
         + "attribute 'attr' in 'child_rule' rule");
   }
diff --git a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
index 75c6b92..777b760 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/RuleFactoryTest.java
@@ -71,14 +71,14 @@
             /*env=*/ null,
             new AttributeContainer(ruleClass));
 
-    assertThat(rule.getAssociatedRule()).isSameAs(rule);
+    assertThat(rule.getAssociatedRule()).isSameInstanceAs(rule);
 
     // pkg.getRules() = [rule]
     Package pkg = pkgBuilder.build();
     assertThat(Sets.newHashSet(pkg.getTargets(Rule.class))).hasSize(1);
     assertThat(pkg.getTargets(Rule.class).iterator().next()).isEqualTo(rule);
 
-    assertThat(pkg.getTarget("foo")).isSameAs(rule);
+    assertThat(pkg.getTarget("foo")).isSameInstanceAs(rule);
 
     assertThat(rule.getLabel()).isEqualTo(Label.parseAbsolute("//mypkg:foo", ImmutableMap.of()));
     assertThat(rule.getName()).isEqualTo("foo");
diff --git a/src/test/java/com/google/devtools/build/lib/packages/TestTimeoutTest.java b/src/test/java/com/google/devtools/build/lib/packages/TestTimeoutTest.java
index 6871fd1..6a26f71 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/TestTimeoutTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/TestTimeoutTest.java
@@ -36,10 +36,10 @@
 
   @Test
   public void testBasicConversion() throws Exception {
-    assertThat(TestTimeout.valueOf("SHORT")).isSameAs(SHORT);
-    assertThat(TestTimeout.valueOf("MODERATE")).isSameAs(MODERATE);
-    assertThat(TestTimeout.valueOf("LONG")).isSameAs(LONG);
-    assertThat(TestTimeout.valueOf("ETERNAL")).isSameAs(ETERNAL);
+    assertThat(TestTimeout.valueOf("SHORT")).isSameInstanceAs(SHORT);
+    assertThat(TestTimeout.valueOf("MODERATE")).isSameInstanceAs(MODERATE);
+    assertThat(TestTimeout.valueOf("LONG")).isSameInstanceAs(LONG);
+    assertThat(TestTimeout.valueOf("ETERNAL")).isSameInstanceAs(ETERNAL);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
index d6c53c1..7c3adb0 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageFactoryTestBase.java
@@ -94,7 +94,7 @@
     for (String outName : outNames) {
       OutputFile out = (OutputFile) pkg.getTarget(outName);
       assertThat(rule.getOutputFiles()).contains(out);
-      assertThat(out.getGeneratingRule()).isSameAs(rule);
+      assertThat(out.getGeneratingRule()).isSameInstanceAs(rule);
       assertThat(out.getName()).isEqualTo(outName);
       assertThat(out.getTargetKind()).isEqualTo("generated file");
     }
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
index 0854b52..16775f7 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java
@@ -182,7 +182,7 @@
     FileSystemUtils.writeContent(
         path, "cc_library(name = 'bar')\n".getBytes(StandardCharsets.ISO_8859_1));
     assertThat(getPackage("pkg"))
-        .isSameAs(oldPkg); // Change only becomes visible after invalidatePackages.
+        .isSameInstanceAs(oldPkg); // Change only becomes visible after invalidatePackages.
 
     invalidatePackages();
 
@@ -218,7 +218,7 @@
     // Change ctime to 1.
     clock.advanceMillis(1);
     path.setLastModifiedTime(1001);
-    assertThat(getPackage("pkg")).isSameAs(oldPkg); // change not yet visible
+    assertThat(getPackage("pkg")).isSameInstanceAs(oldPkg); // change not yet visible
 
     invalidatePackages();
 
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index ff64aa5..7ab05be 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -124,7 +124,7 @@
 
     tester.sync();
     Target newTarget = tester.getTarget("//base:hello");
-    assertThat(newTarget).isSameAs(oldTarget);
+    assertThat(newTarget).isSameInstanceAs(oldTarget);
   }
 
   @Test
@@ -149,7 +149,7 @@
     tester.modifyFile("base/foo.txt", "other");
     tester.sync();
     Target newTarget = tester.getTarget("//base:hello");
-    assertThat(newTarget).isSameAs(oldTarget);
+    assertThat(newTarget).isSameInstanceAs(oldTarget);
   }
 
   @Test
@@ -162,7 +162,7 @@
     tester.removeFile("base/foo.txt");
     tester.sync();
     Target newTarget = tester.getTarget("//base:hello");
-    assertThat(newTarget).isSameAs(oldTarget);
+    assertThat(newTarget).isSameInstanceAs(oldTarget);
   }
 
   @Test
@@ -244,7 +244,7 @@
     tester.sync();
 
     Target fg2 = tester.getTarget("//a:fg");
-    assertThat(fg2).isSameAs(fg1);
+    assertThat(fg2).isSameInstanceAs(fg1);
   }
 
   @Test
@@ -354,7 +354,7 @@
     // Write file in directory to force reload of top-level glob.
     tester.addFile("pkg/irrelevant_file");
     tester.addFile("pkg/bar/irrelevant_file"); // Subglob is also reloaded.
-    assertThat(tester.getTarget("//pkg:pkg").getPackage()).isSameAs(pkg);
+    assertThat(tester.getTarget("//pkg:pkg").getPackage()).isSameInstanceAs(pkg);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
index d27d60e..5fc8679 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java
@@ -206,7 +206,7 @@
     assertThat(pkg1.getName()).isEqualTo("pkg1");
     assertThat(pkg1.getFilename().asPath().getPathString()).isEqualTo("/workspace/pkg1/BUILD");
     assertThat(getPackageManager().getPackage(reporter, PackageIdentifier.createInMainRepo("pkg1")))
-        .isSameAs(pkg1);
+        .isSameInstanceAs(pkg1);
   }
 
   @Test
@@ -323,7 +323,7 @@
     setOptions("--package_path=/workspace:/otherroot");
 
     Package oldPkg = getPackage("pkg");
-    assertThat(getPackage("pkg")).isSameAs(oldPkg); // change not yet visible
+    assertThat(getPackage("pkg")).isSameInstanceAs(oldPkg); // change not yet visible
     assertThat(oldPkg.getFilename().asPath()).isEqualTo(buildFile1);
     assertThat(oldPkg.getSourceRoot()).isEqualTo(Root.fromPath(rootDirectory));
 
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PathPackageLocatorTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PathPackageLocatorTest.java
index f8374ac..f17aa96 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/PathPackageLocatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PathPackageLocatorTest.java
@@ -326,7 +326,7 @@
         workspace,
         workspace,
         BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY);
-    assertThat(eventCollector.count()).isSameAs(0);
+    assertThat(eventCollector.count()).isSameInstanceAs(0);
 
     PathPackageLocator.create(
         null,
@@ -335,7 +335,7 @@
         workspace,
         workspace.getRelative("foo"),
         BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY);
-    assertThat(eventCollector.count()).isSameAs(1);
+    assertThat(eventCollector.count()).isSameInstanceAs(1);
     assertContainsEvent("The package path element 'foo' will be taken relative");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerChartTest.java b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerChartTest.java
index dcbb24b..cf294a3 100644
--- a/src/test/java/com/google/devtools/build/lib/profiler/ProfilerChartTest.java
+++ b/src/test/java/com/google/devtools/build/lib/profiler/ProfilerChartTest.java
@@ -128,11 +128,11 @@
     assertThat(types.get(2).getName()).isEqualTo(type3.getName());
     assertThat(types.get(2).getColor()).isEqualTo(type3.getColor());
 
-    assertThat(chart.lookUpType("name3")).isSameAs(type3);
-    assertThat(chart.lookUpType("name2")).isSameAs(type2);
-    assertThat(chart.lookUpType("name1")).isSameAs(type1);
+    assertThat(chart.lookUpType("name3")).isSameInstanceAs(type3);
+    assertThat(chart.lookUpType("name2")).isSameInstanceAs(type2);
+    assertThat(chart.lookUpType("name1")).isSameInstanceAs(type1);
 
-    assertThat(chart.lookUpType("wergl")).isSameAs(Chart.UNKNOWN_TYPE);
+    assertThat(chart.lookUpType("wergl")).isSameInstanceAs(Chart.UNKNOWN_TYPE);
     types = chart.getSortedTypes();
     assertThat(types).hasSize(4);
 
@@ -155,7 +155,7 @@
     ChartBar bar = rows.get(0).getBars().get(0);
     assertThat(bar.getStart()).isEqualTo(2);
     assertThat(bar.getStop()).isEqualTo(3);
-    assertThat(bar.getType()).isSameAs(type1);
+    assertThat(bar.getType()).isSameInstanceAs(type1);
     assertThat(bar.getLabel()).isEqualTo("label1");
   }
 
@@ -207,7 +207,7 @@
     assertThat(bar1.getRow()).isEqualTo(row1);
     assertThat(bar1.getStart()).isEqualTo(1);
     assertThat(bar1.getStop()).isEqualTo(2);
-    assertThat(bar1.getType()).isSameAs(type);
+    assertThat(bar1.getType()).isSameInstanceAs(type);
     assertThat(bar1.getLabel()).isEqualTo("label1");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/remote/ByteStreamUploaderTest.java b/src/test/java/com/google/devtools/build/lib/remote/ByteStreamUploaderTest.java
index 03f7b6f..2e39fdf 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/ByteStreamUploaderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/ByteStreamUploaderTest.java
@@ -692,7 +692,7 @@
 
     blocker.countDown();
 
-    assertThat(upload1).isSameAs(upload2);
+    assertThat(upload1).isSameInstanceAs(upload2);
 
     upload1.get();
 
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionFileSystemTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionFileSystemTest.java
index e3c5a3b..40b6f81 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteActionFileSystemTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteActionFileSystemTest.java
@@ -86,7 +86,7 @@
     Path localActionFsPath = actionFs.getPath(localArtifact.getPath().asFragment());
     String actualLocalContents =
         FileSystemUtils.readContent(localActionFsPath, StandardCharsets.UTF_8);
-    assertThat(remoteActionFsPath.getFileSystem()).isSameAs(actionFs);
+    assertThat(remoteActionFsPath.getFileSystem()).isSameInstanceAs(actionFs);
     assertThat(actualRemoteContents).isEqualTo("remote contents");
     assertThat(actualLocalContents).isEqualTo("local contents");
     verify(inputFetcher)
@@ -115,7 +115,7 @@
     symlinkActionFs.createSymbolicLink(actionFs.getPath(remoteArtifact.getPath().asFragment()));
 
     // assert
-    assertThat(symlinkActionFs.getFileSystem()).isSameAs(actionFs);
+    assertThat(symlinkActionFs.getFileSystem()).isSameInstanceAs(actionFs);
     verify(inputFetcher)
         .downloadFile(eq(remoteArtifact.getPath()), eq(inputs.getMetadata(remoteArtifact)));
     String symlinkTargetContents =
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteRetrierTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteRetrierTest.java
index 61efcd0..6d687bc 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteRetrierTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteRetrierTest.java
@@ -158,6 +158,6 @@
                     () -> {
                       throw thrown;
                     }));
-    assertThat(expected).isSameAs(thrown);
+    assertThat(expected).isSameInstanceAs(thrown);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
index 1bcf7e3..17f6be6 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/RemoteSpawnRunnerTest.java
@@ -261,7 +261,7 @@
     when(res.status()).thenReturn(Status.EXECUTION_FAILED);
     when(localRunner.exec(eq(spawn), eq(policy))).thenReturn(res);
 
-    assertThat(runner.exec(spawn, policy)).isSameAs(res);
+    assertThat(runner.exec(spawn, policy)).isSameInstanceAs(res);
 
     verify(localRunner).exec(eq(spawn), eq(policy));
     verify(runner)
@@ -401,7 +401,7 @@
     when(localRunner.exec(eq(spawn), eq(policy))).thenThrow(err);
 
     IOException e = assertThrows(IOException.class, () -> runner.exec(spawn, policy));
-    assertThat(e).isSameAs(err);
+    assertThat(e).isSameInstanceAs(err);
 
     verify(localRunner).exec(eq(spawn), eq(policy));
   }
@@ -424,7 +424,7 @@
     when(localRunner.exec(eq(spawn), eq(policy))).thenThrow(err);
 
     IOException e = assertThrows(IOException.class, () -> runner.exec(spawn, policy));
-    assertThat(e).isSameAs(err);
+    assertThat(e).isSameInstanceAs(err);
 
     verify(localRunner).exec(eq(spawn), eq(policy));
   }
@@ -445,7 +445,7 @@
     when(localRunner.exec(eq(spawn), eq(policy))).thenThrow(err);
 
     IOException e = assertThrows(IOException.class, () -> runner.exec(spawn, policy));
-    assertThat(e).isSameAs(err);
+    assertThat(e).isSameInstanceAs(err);
 
     verify(localRunner).exec(eq(spawn), eq(policy));
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidCommonTest.java
index c63eaa3..81de74d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidCommonTest.java
@@ -93,13 +93,14 @@
   public void testMultidexModeEnum() throws Exception {
     assertThat(MultidexMode.getValidValues()).containsExactly("native", "legacy", "manual_main_dex",
         "off");
-    assertThat(MultidexMode.fromValue("native")).isSameAs(MultidexMode.NATIVE);
+    assertThat(MultidexMode.fromValue("native")).isSameInstanceAs(MultidexMode.NATIVE);
     assertThat(MultidexMode.NATIVE.getAttributeValue()).isEqualTo("native");
-    assertThat(MultidexMode.fromValue("legacy")).isSameAs(MultidexMode.LEGACY);
+    assertThat(MultidexMode.fromValue("legacy")).isSameInstanceAs(MultidexMode.LEGACY);
     assertThat(MultidexMode.LEGACY.getAttributeValue()).isEqualTo("legacy");
-    assertThat(MultidexMode.fromValue("manual_main_dex")).isSameAs(MultidexMode.MANUAL_MAIN_DEX);
+    assertThat(MultidexMode.fromValue("manual_main_dex"))
+        .isSameInstanceAs(MultidexMode.MANUAL_MAIN_DEX);
     assertThat(MultidexMode.MANUAL_MAIN_DEX.getAttributeValue()).isEqualTo("manual_main_dex");
-    assertThat(MultidexMode.fromValue("off")).isSameAs(MultidexMode.OFF);
+    assertThat(MultidexMode.fromValue("off")).isSameInstanceAs(MultidexMode.OFF);
     assertThat(MultidexMode.OFF.getAttributeValue()).isEqualTo("off");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataConverterTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataConverterTest.java
index 51bcd14..8544da5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataConverterTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidDataConverterTest.java
@@ -115,7 +115,7 @@
 
   private static <T> Function<String, T> getFunction(T t) {
     return x -> {
-      assertThat(x).isSameAs(TO_MAP);
+      assertThat(x).isSameInstanceAs(TO_MAP);
       return t;
     };
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
index 561e3c1..aa6a4a2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidLibraryTest.java
@@ -743,7 +743,7 @@
     SpawnAction sourceJarAction = (SpawnAction) actionsTestUtil().getActionForArtifactEndingWith(
         actionsTestUtil().artifactClosureOf(outputGroup), "libidl-idl.srcjar");
 
-    assertThat(sourceJarAction).isSameAs(classJarAction);
+    assertThat(sourceJarAction).isSameInstanceAs(classJarAction);
 
     PathFragment genfilesPath =
         getTargetConfiguration()
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactoryTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactoryTest.java
index 0c27b57..e23b3f2 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactoryTest.java
@@ -490,7 +490,7 @@
     ResourceFilter filter =
         resourceFilterFactory.getResourceFilter(errorConsumer, resourceDeps, localResources);
 
-    assertThat(resourceDeps.filter(errorConsumer, filter)).isSameAs(resourceDeps);
+    assertThat(resourceDeps.filter(errorConsumer, filter)).isSameInstanceAs(resourceDeps);
 
     return localResources.filterLocalResources(errorConsumer, filter).getResources();
   }
diff --git a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java
index dbdd071..c0be600 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactoryTest.java
@@ -63,7 +63,7 @@
     BuildOptions original = getOptionsWithoutFlagFragment();
     BuildOptions converted = transition.patch(original);
 
-    assertThat(converted).isSameAs(original);
+    assertThat(converted).isSameInstanceAs(original);
     assertThat(original.contains(ConfigFeatureFlagOptions.class)).isFalse();
   }
 
@@ -85,7 +85,7 @@
     BuildOptions original = getOptionsWithoutFlagFragment();
     BuildOptions converted = transition.patch(original);
 
-    assertThat(converted).isSameAs(original);
+    assertThat(converted).isSameInstanceAs(original);
     assertThat(original.contains(ConfigFeatureFlagOptions.class)).isFalse();
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
index 04314d5..3134fe5 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaSkylarkApiTest.java
@@ -1222,7 +1222,7 @@
     ConfiguredTarget myConfiguredTarget = getConfiguredTarget("//java/test:my");
     ConfiguredTarget javaLibraryTarget = getConfiguredTarget("//java/test:jl");
 
-    assertThat(myConfiguredTarget.get("java")).isSameAs(javaLibraryTarget.get("java"));
+    assertThat(myConfiguredTarget.get("java")).isSameInstanceAs(javaLibraryTarget.get("java"));
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java b/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
index c555ed7..21f8cb8 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/python/PyStructUtilsTest.java
@@ -107,7 +107,7 @@
         makeStruct(
             ImmutableMap.of(
                 PyStructUtils.TRANSITIVE_SOURCES, SkylarkNestedSet.of(Artifact.class, sources)));
-    assertThat(PyStructUtils.getTransitiveSources(info)).isSameAs(sources);
+    assertThat(PyStructUtils.getTransitiveSources(info)).isSameInstanceAs(sources);
   }
 
   @Test
@@ -162,7 +162,7 @@
     StructImpl info =
         makeStruct(
             ImmutableMap.of(PyStructUtils.IMPORTS, SkylarkNestedSet.of(String.class, imports)));
-    assertThat(PyStructUtils.getImports(info)).isSameAs(imports);
+    assertThat(PyStructUtils.getImports(info)).isSameInstanceAs(imports);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
index 205ff99..76c9ede 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/CommandInterruptionTest.java
@@ -335,7 +335,7 @@
 
     /** Asserts that both commands were executed on the same thread. */
     public void assertOnSameThreadAs(CommandState other) {
-      assertThat(thread).isSameAs(other.thread);
+      assertThat(thread).isSameInstanceAs(other.thread);
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/TestSummaryTest.java b/src/test/java/com/google/devtools/build/lib/runtime/TestSummaryTest.java
index 7415d99..a8be253 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/TestSummaryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/TestSummaryTest.java
@@ -198,7 +198,7 @@
     // No need to copy if built twice in a row; no direct setters on the object.
     TestSummary summary = basicBuilder.build();
     TestSummary sameSummary = basicBuilder.build();
-    assertThat(sameSummary).isSameAs(summary);
+    assertThat(sameSummary).isSameInstanceAs(summary);
 
     basicBuilder.addTestTimes(ImmutableList.of(40L));
 
diff --git a/src/test/java/com/google/devtools/build/lib/shell/ConsumersTest.java b/src/test/java/com/google/devtools/build/lib/shell/ConsumersTest.java
index aa397c9..4a6a3c0 100644
--- a/src/test/java/com/google/devtools/build/lib/shell/ConsumersTest.java
+++ b/src/test/java/com/google/devtools/build/lib/shell/ConsumersTest.java
@@ -85,7 +85,7 @@
     } catch (IOException e) {
       fail();
     } catch (OutOfMemoryError e) {
-      assertWithMessage("OutOfMemoryError is not masked").that(e).isSameAs(error);
+      assertWithMessage("OutOfMemoryError is not masked").that(e).isSameInstanceAs(error);
     }
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobDescriptorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobDescriptorTest.java
index eb62a85..3d2e4bd 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobDescriptorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobDescriptorTest.java
@@ -51,7 +51,7 @@
   }
 
   private static void verifyEquivalent(GlobDescriptor orig, GlobDescriptor deserialized) {
-    assertThat(deserialized).isSameAs(orig);
+    assertThat(deserialized).isSameInstanceAs(orig);
   }
 
   @Test
@@ -70,7 +70,7 @@
         original.getSubdir(),
         original.getPattern(),
         original.excludeDirs());
-    assertThat(sameCopy).isSameAs(original);
+    assertThat(sameCopy).isSameInstanceAs(original);
 
     GlobDescriptor diffCopy = GlobDescriptor.create(
         original.getPackageId(),
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 153b0ee..3a2c36c 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
@@ -429,7 +429,7 @@
             reporter,
             ModifiedFileSet.builder().modify(PathFragment.create("foo/irrelevant")).build(),
             Root.fromPath(rootDirectory));
-    assertThat(validPackage(skyKey)).isSameAs(value);
+    assertThat(validPackage(skyKey)).isSameInstanceAs(value);
   }
 
   @Test
@@ -447,7 +447,7 @@
             reporter,
             ModifiedFileSet.builder().modify(PathFragment.create("foo/irrelevant")).build(),
             Root.fromPath(rootDirectory));
-    assertThat(validPackage(skyKey)).isSameAs(value);
+    assertThat(validPackage(skyKey)).isSameInstanceAs(value);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DeserializationContextTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DeserializationContextTest.java
index 31efc08..fc8f5b2 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DeserializationContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DeserializationContextTest.java
@@ -52,7 +52,8 @@
     when(codedInputStream.readSInt32()).thenReturn(1);
     DeserializationContext deserializationContext =
         new DeserializationContext(registry, ImmutableMap.of());
-    assertThat((Object) deserializationContext.deserialize(codedInputStream)).isSameAs(constant);
+    assertThat((Object) deserializationContext.deserialize(codedInputStream))
+        .isSameInstanceAs(constant);
     Mockito.verify(codedInputStream).readSInt32();
     Mockito.verify(registry).maybeGetConstantByTag(1);
   }
@@ -70,7 +71,8 @@
     Object returnValue = new Object();
     when(codecDescriptor.deserialize(deserializationContext, codedInputStream))
         .thenReturn(returnValue);
-    assertThat((Object) deserializationContext.deserialize(codedInputStream)).isSameAs(returnValue);
+    assertThat((Object) deserializationContext.deserialize(codedInputStream))
+        .isSameInstanceAs(returnValue);
     Mockito.verify(codedInputStream).readSInt32();
     Mockito.verify(registry).getCodecDescriptorByTag(1);
     Mockito.verify(codecDescriptor).deserialize(deserializationContext, codedInputStream);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java
index c0841c5..ed9ad23 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/ObjectCodecRegistryTest.java
@@ -40,12 +40,14 @@
             .build();
 
     CodecDescriptor fooDescriptor = underTest.getCodecDescriptorForObject("hello");
-    assertThat(fooDescriptor.getCodec()).isSameAs(codec1);
-    assertThat(underTest.getCodecDescriptorByTag(fooDescriptor.getTag())).isSameAs(fooDescriptor);
+    assertThat(fooDescriptor.getCodec()).isSameInstanceAs(codec1);
+    assertThat(underTest.getCodecDescriptorByTag(fooDescriptor.getTag()))
+        .isSameInstanceAs(fooDescriptor);
 
     CodecDescriptor barDescriptor = underTest.getCodecDescriptorForObject(1);
-    assertThat(barDescriptor.getCodec()).isSameAs(codec2);
-    assertThat(underTest.getCodecDescriptorByTag(barDescriptor.getTag())).isSameAs(barDescriptor);
+    assertThat(barDescriptor.getCodec()).isSameInstanceAs(codec2);
+    assertThat(underTest.getCodecDescriptorByTag(barDescriptor.getTag()))
+        .isSameInstanceAs(barDescriptor);
 
     assertThat(barDescriptor.getTag()).isNotEqualTo(fooDescriptor.getTag());
 
@@ -66,16 +68,16 @@
             .build();
 
     CodecDescriptor fooDescriptor = underTest.getCodecDescriptorForObject("value1");
-    assertThat(fooDescriptor.getCodec()).isSameAs(codec);
+    assertThat(fooDescriptor.getCodec()).isSameInstanceAs(codec);
 
     CodecDescriptor barDefaultDescriptor = underTest.getCodecDescriptorForObject(15);
     assertThat(barDefaultDescriptor.getCodec()).isNotSameInstanceAs(codec);
     assertThat(barDefaultDescriptor.getTag()).isNotEqualTo(fooDescriptor.getTag());
     assertThat(underTest.getCodecDescriptorByTag(barDefaultDescriptor.getTag()))
-        .isSameAs(barDefaultDescriptor);
+        .isSameInstanceAs(barDefaultDescriptor);
 
     assertThat(underTest.getCodecDescriptorForObject((byte) 9).getCodec().getClass())
-        .isSameAs(barDefaultDescriptor.getCodec().getClass());
+        .isSameInstanceAs(barDefaultDescriptor.getCodec().getClass());
 
     // Bogus tags still throw.
     assertThrows(NoCodecException.class, () -> underTest.getCodecDescriptorByTag(42));
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index 7bda34c..cac9a11 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -805,7 +805,7 @@
     Object l1 = evalRuleClassCode("Label('//foo/foo:foo')");
     // Implicitly creates a new pkgContext and environment, yet labels should be the same.
     Object l2 = evalRuleClassCode("Label('//foo/foo:foo')");
-    assertThat(l1).isSameAs(l2);
+    assertThat(l1).isSameInstanceAs(l2);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
index ca45d46..5bd3ff2 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
@@ -798,7 +798,7 @@
   public void testConfiguration() throws Exception {
     SkylarkRuleContext ruleContext = createRuleContext("//foo:foo");
     Object result = evalRuleContextCode(ruleContext, "ruleContext.configuration");
-    assertThat(ruleContext.getRuleContext().getConfiguration()).isSameAs(result);
+    assertThat(ruleContext.getRuleContext().getConfiguration()).isSameInstanceAs(result);
   }
 
   @Test
@@ -819,7 +819,7 @@
   public void testHostConfiguration() throws Exception {
     SkylarkRuleContext ruleContext = createRuleContext("//foo:foo");
     Object result = evalRuleContextCode(ruleContext, "ruleContext.host_configuration");
-    assertThat(ruleContext.getRuleContext().getHostConfiguration()).isSameAs(result);
+    assertThat(ruleContext.getRuleContext().getHostConfiguration()).isSameInstanceAs(result);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/RuntimeTest.java b/src/test/java/com/google/devtools/build/lib/syntax/RuntimeTest.java
index 5444ef8..06e68ba 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/RuntimeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/RuntimeTest.java
@@ -78,8 +78,8 @@
     reg.registerBuiltin(DummyType.class, "eq2", equalValue2);
     List<Object> values = reg.getBuiltins();
     assertThat(values).hasSize(2);
-    assertThat(values.get(0)).isSameAs(equalValue1);
-    assertThat(values.get(1)).isSameAs(equalValue2);
+    assertThat(values.get(0)).isSameInstanceAs(equalValue1);
+    assertThat(values.get(1)).isSameInstanceAs(equalValue2);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/testutil/FakeAttributeMapper.java b/src/test/java/com/google/devtools/build/lib/testutil/FakeAttributeMapper.java
index a73d46e..19e0cab 100644
--- a/src/test/java/com/google/devtools/build/lib/testutil/FakeAttributeMapper.java
+++ b/src/test/java/com/google/devtools/build/lib/testutil/FakeAttributeMapper.java
@@ -94,7 +94,7 @@
     }
 
     private <U> U validateAndGet(Type<U> otherType) {
-      assertThat(type).isSameAs(otherType);
+      assertThat(type).isSameInstanceAs(otherType);
       return otherType.cast(value);
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/util/PairTest.java b/src/test/java/com/google/devtools/build/lib/util/PairTest.java
index 15879b4..f4c31e6 100644
--- a/src/test/java/com/google/devtools/build/lib/util/PairTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/PairTest.java
@@ -31,8 +31,8 @@
     Object a = new Object();
     Object b = new Object();
     Pair<Object, Object> p = Pair.of(a, b);
-    assertThat(p.first).isSameAs(a);
-    assertThat(p.second).isSameAs(b);
+    assertThat(p.first).isSameInstanceAs(a);
+    assertThat(p.second).isSameInstanceAs(b);
     assertThat(p).isEqualTo(Pair.of(a, b));
     assertThat(p.hashCode()).isEqualTo(31 * a.hashCode() + b.hashCode());
   }
diff --git a/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java b/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java
index 2874b6d..6e4d2a6 100644
--- a/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/StringCanonicalizerTest.java
@@ -36,6 +36,6 @@
   public void twoSameStringsAreCanonicalized() {
     String stringA1 = StringCanonicalizer.intern(new String("A"));
     String stringA2 = StringCanonicalizer.intern(new String("A"));
-    assertThat(stringA2).isSameAs(stringA1);
+    assertThat(stringA2).isSameInstanceAs(stringA1);
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/util/io/OutErrTest.java b/src/test/java/com/google/devtools/build/lib/util/io/OutErrTest.java
index d9f0e17..e7ec852 100644
--- a/src/test/java/com/google/devtools/build/lib/util/io/OutErrTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/io/OutErrTest.java
@@ -30,8 +30,8 @@
 
   @Test
   public void testRetainsOutErr() {
-    assertThat(outErr.getOutputStream()).isSameAs(out);
-    assertThat(outErr.getErrorStream()).isSameAs(err);
+    assertThat(outErr.getOutputStream()).isSameInstanceAs(out);
+    assertThat(outErr.getErrorStream()).isSameInstanceAs(err);
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/DigestHashFunctionGlobalsTest.java b/src/test/java/com/google/devtools/build/lib/vfs/DigestHashFunctionGlobalsTest.java
index a822da0..6da57f5 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/DigestHashFunctionGlobalsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/DigestHashFunctionGlobalsTest.java
@@ -49,42 +49,42 @@
 
   @Test
   public void convertReturnsTheSameValueAsTheConstant() throws Exception {
-    assertThat(converter.convert("sha-256")).isSameAs(DigestHashFunction.SHA256);
-    assertThat(converter.convert("SHA-256")).isSameAs(DigestHashFunction.SHA256);
-    assertThat(converter.convert("SHA256")).isSameAs(DigestHashFunction.SHA256);
-    assertThat(converter.convert("sha256")).isSameAs(DigestHashFunction.SHA256);
+    assertThat(converter.convert("sha-256")).isSameInstanceAs(DigestHashFunction.SHA256);
+    assertThat(converter.convert("SHA-256")).isSameInstanceAs(DigestHashFunction.SHA256);
+    assertThat(converter.convert("SHA256")).isSameInstanceAs(DigestHashFunction.SHA256);
+    assertThat(converter.convert("sha256")).isSameInstanceAs(DigestHashFunction.SHA256);
 
-    assertThat(converter.convert("SHA-1")).isSameAs(DigestHashFunction.SHA1);
-    assertThat(converter.convert("sha-1")).isSameAs(DigestHashFunction.SHA1);
-    assertThat(converter.convert("SHA1")).isSameAs(DigestHashFunction.SHA1);
-    assertThat(converter.convert("sha1")).isSameAs(DigestHashFunction.SHA1);
+    assertThat(converter.convert("SHA-1")).isSameInstanceAs(DigestHashFunction.SHA1);
+    assertThat(converter.convert("sha-1")).isSameInstanceAs(DigestHashFunction.SHA1);
+    assertThat(converter.convert("SHA1")).isSameInstanceAs(DigestHashFunction.SHA1);
+    assertThat(converter.convert("sha1")).isSameInstanceAs(DigestHashFunction.SHA1);
 
-    assertThat(converter.convert("MD5")).isSameAs(DigestHashFunction.MD5);
-    assertThat(converter.convert("md5")).isSameAs(DigestHashFunction.MD5);
+    assertThat(converter.convert("MD5")).isSameInstanceAs(DigestHashFunction.MD5);
+    assertThat(converter.convert("md5")).isSameInstanceAs(DigestHashFunction.MD5);
   }
 
   @Test
   public void lateRegistrationGetsPickedUpByConverter() throws Exception {
     DigestHashFunction.register(Hashing.goodFastHash(32), "SHA-512");
 
-    assertThat(converter.convert("SHA-512")).isSameAs(converter.convert("sha-512"));
+    assertThat(converter.convert("SHA-512")).isSameInstanceAs(converter.convert("sha-512"));
   }
 
   @Test
   public void lateRegistrationWithAlternativeNamesGetsPickedUpByConverter() throws Exception {
     DigestHashFunction.register(Hashing.goodFastHash(64), "SHA-384", "SHA384", "SHA_384");
 
-    assertThat(converter.convert("SHA-384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("Sha-384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("sha-384")).isSameAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("SHA-384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("Sha-384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("sha-384")).isSameInstanceAs(converter.convert("SHA-384"));
 
-    assertThat(converter.convert("SHA384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("Sha384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("sha384")).isSameAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("SHA384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("Sha384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("sha384")).isSameInstanceAs(converter.convert("SHA-384"));
 
-    assertThat(converter.convert("SHA_384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("Sha_384")).isSameAs(converter.convert("SHA-384"));
-    assertThat(converter.convert("sha_384")).isSameAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("SHA_384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("Sha_384")).isSameInstanceAs(converter.convert("SHA-384"));
+    assertThat(converter.convert("sha_384")).isSameInstanceAs(converter.convert("SHA-384"));
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
index 58589de..0fad961 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/FileSystemsTest.java
@@ -28,12 +28,14 @@
 
   @Test
   public void testFileSystemsCreatesOnlyOneDefaultNative() {
-    assertThat(FileSystems.getNativeFileSystem()).isSameAs(FileSystems.getNativeFileSystem());
+    assertThat(FileSystems.getNativeFileSystem())
+        .isSameInstanceAs(FileSystems.getNativeFileSystem());
   }
 
   @Test
   public void testFileSystemsCreatesOnlyOneDefaultJavaIo() {
-    assertThat(FileSystems.getJavaIoFileSystem()).isSameAs(FileSystems.getJavaIoFileSystem());
+    assertThat(FileSystems.getJavaIoFileSystem())
+        .isSameInstanceAs(FileSystems.getJavaIoFileSystem());
   }
 
   @Test
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/PathAbstractTest.java b/src/test/java/com/google/devtools/build/lib/vfs/PathAbstractTest.java
index 2998386..a328f88 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/PathAbstractTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/PathAbstractTest.java
@@ -60,7 +60,7 @@
   @Test
   public void testNormalStringsDoNotAllocate() {
     String normal1 = "/a/b/hello.txt";
-    assertThat(create(normal1).getPathString()).isSameAs(normal1);
+    assertThat(create(normal1).getPathString()).isSameInstanceAs(normal1);
 
     // Sanity check our testing strategy
     String notNormal = "/a/../b";
diff --git a/src/test/java/com/google/devtools/build/lib/vfs/RootTest.java b/src/test/java/com/google/devtools/build/lib/vfs/RootTest.java
index 6858533..888ecfb 100644
--- a/src/test/java/com/google/devtools/build/lib/vfs/RootTest.java
+++ b/src/test/java/com/google/devtools/build/lib/vfs/RootTest.java
@@ -70,7 +70,7 @@
     FileSystem fs2 = new InMemoryFileSystem(BlazeClock.instance());
     Root root = Root.fromPath(fs.getPath("/foo"));
     Root root2 = Root.toFileSystem(root, fs2);
-    assertThat(root2.asPath().getFileSystem()).isSameAs(fs2);
+    assertThat(root2.asPath().getFileSystem()).isSameInstanceAs(fs2);
     assertThat(root2.asPath().asFragment()).isEqualTo(PathFragment.create("/foo"));
     assertThat(root.isAbsolute()).isFalse();
   }
diff --git a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoTest.java b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoTest.java
index b3b5f56..f9e6409 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ErrorInfoTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ErrorInfoTest.java
@@ -57,8 +57,8 @@
         isTransitivelyTransient);
 
     assertThat(errorInfo.getRootCauses()).containsExactly(causeOfException);
-    assertThat(errorInfo.getException()).isSameAs(exception);
-    assertThat(errorInfo.getRootCauseOfException()).isSameAs(causeOfException);
+    assertThat(errorInfo.getException()).isSameInstanceAs(exception);
+    assertThat(errorInfo.getRootCauseOfException()).isSameInstanceAs(causeOfException);
     assertThat(errorInfo.getCycleInfo()).isEmpty();
     assertThat(errorInfo.isDirectlyTransient()).isEqualTo(isDirectlyTransient);
     assertThat(errorInfo.isTransitivelyTransient()).isEqualTo(
@@ -137,8 +137,8 @@
     // For simplicity we test the current implementation detail that we choose the first non-null
     // (exception, cause) pair that we encounter. This isn't necessarily a requirement of the
     // interface, but it makes the test convenient and is a way to document the current behavior.
-    assertThat(errorInfo.getException()).isSameAs(exception1);
-    assertThat(errorInfo.getRootCauseOfException()).isSameAs(causeOfException1);
+    assertThat(errorInfo.getException()).isSameInstanceAs(exception1);
+    assertThat(errorInfo.getRootCauseOfException()).isSameInstanceAs(causeOfException1);
 
     assertThat(errorInfo.getCycleInfo()).containsExactly(
         new CycleInfo(
diff --git a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
index 6331052..7f80c8b 100644
--- a/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/MemoizingEvaluatorTest.java
@@ -4126,7 +4126,7 @@
         .setConstantValue(value);
     tester.invalidateTransientErrors();
     StringValue stringValue = (StringValue) tester.evalAndGet(/*keepGoing=*/true, errorKey);
-    assertThat(value).isSameAs(stringValue);
+    assertThat(value).isSameInstanceAs(stringValue);
     // Value builder will now throw, but we should never get to it because it isn't dirty.
     tester.getOrCreate(errorKey, /*markAsModified=*/false).setHasTransientError(true);
     tester.invalidateTransientErrors();
diff --git a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
index 73444e2..83bc083 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
@@ -919,7 +919,7 @@
     ErrorInfo error = result.getError(topKey);
     assertThat(error.getRootCauses()).containsExactly(catastropheKey);
     if (keepGoing) {
-      assertThat(result.getCatastrophe()).isSameAs(catastrophe);
+      assertThat(result.getCatastrophe()).isSameInstanceAs(catastrophe);
     }
   }
 
@@ -1693,7 +1693,7 @@
     assertThatEvaluationResult(result2)
         .hasErrorEntryForKeyThat(topKey)
         .hasExceptionThat()
-        .isSameAs(topException);
+        .isSameInstanceAs(topException);
     assertThat(numComputes.get()).isEqualTo(2);
   }
 
@@ -1941,7 +1941,7 @@
         .setComputedValue(CONCATENATE);
     EvaluationResult<StringValue> result = eval(keepGoing, ImmutableList.of(topKey));
     assertThat(result.keyNames()).isEmpty();
-    assertThat(result.getError(topKey).getException()).isSameAs(exception);
+    assertThat(result.getError(topKey).getException()).isSameInstanceAs(exception);
     assertThat(result.getError(topKey).getRootCauses()).containsExactly(errorKey);
   }
 
@@ -2016,7 +2016,7 @@
       assertThatEvaluationResult(result).hasError();
     } else {
       assertThatEvaluationResult(result).hasNoError();
-      assertThat(result.get(topKey)).isSameAs(topValue);
+      assertThat(result.get(topKey)).isSameInstanceAs(topValue);
     }
   }
 
diff --git a/src/test/java/com/google/devtools/common/options/EnumConverterTest.java b/src/test/java/com/google/devtools/common/options/EnumConverterTest.java
index d9e13e0..beb764b 100644
--- a/src/test/java/com/google/devtools/common/options/EnumConverterTest.java
+++ b/src/test/java/com/google/devtools/common/options/EnumConverterTest.java
@@ -75,7 +75,7 @@
   @Test
   public void converterIsCaseInsensitive() throws Exception {
     FruitConverter converter = new FruitConverter();
-    assertThat(converter.convert("bAnANa")).isSameAs(Fruit.Banana);
+    assertThat(converter.convert("bAnANa")).isSameInstanceAs(Fruit.Banana);
   }
 
   // Regression test: lists of enum using a subclass of EnumConverter don't work
diff --git a/src/test/java/com/google/devtools/common/options/OptionDefinitionTest.java b/src/test/java/com/google/devtools/common/options/OptionDefinitionTest.java
index eb9dbe3..fc8985d 100644
--- a/src/test/java/com/google/devtools/common/options/OptionDefinitionTest.java
+++ b/src/test/java/com/google/devtools/common/options/OptionDefinitionTest.java
@@ -127,7 +127,7 @@
 
     // Expect reference equality, since we didn't recompute the value
     Converter<?> secondConverter = mockOptionDef.getConverter();
-    assertThat(secondConverter).isSameAs(converter);
+    assertThat(secondConverter).isSameInstanceAs(converter);
 
     mockOptionDef.getDefaultValue();
 
@@ -163,7 +163,7 @@
 
     // Expect reference equality, since we didn't recompute the value
     Converter<?> secondConverter = mockOptionDef.getConverter();
-    assertThat(secondConverter).isSameAs(converter);
+    assertThat(secondConverter).isSameInstanceAs(converter);
 
     mockOptionDef.getDefaultValue();
 
diff --git a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
index 378e2bc..9a3d88c 100644
--- a/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
+++ b/src/test/java/com/google/devtools/common/options/OptionsParserTest.java
@@ -777,7 +777,7 @@
 
     ParsedOptionDescription effectiveInstance = optionValue.getCanonicalInstances().get(0);
     assertThat(effectiveInstance.getExpandedFrom().getOptionDefinition())
-        .isSameAs(expansionDescription.getOptionDefinition());
+        .isSameInstanceAs(expansionDescription.getOptionDefinition());
     assertThat(effectiveInstance.getImplicitDependent()).isNull();
 
     assertThat(parser.getWarnings()).isEmpty();
