Run IntelliJ's "Pattern variable can be used" inspection on entire codebase.

This is a machine-generated CL.

Bazel does a lot of downcasting, much of it necessary due to the runtime-dynamic and configurable nature of the system. Using JEP394 to ergonomically downcast saves a line of distracting boilerplate which adds up with hundreds of downcasts.

#jdk21 #jep394

PiperOrigin-RevId: 625454340
Change-Id: I4f21253f855128df271a100ec19a578d5af1ec1c
diff --git a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
index 2c2c581..583e0c5 100644
--- a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
+++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
@@ -159,8 +159,7 @@
 
   private static Value.Builder valueFromCallable(StarlarkCallable x) {
     // Starlark def statement?
-    if (x instanceof StarlarkFunction) {
-      StarlarkFunction fn = (StarlarkFunction) x;
+    if (x instanceof StarlarkFunction fn) {
       Signature sig = new Signature();
       sig.name = fn.getName();
       sig.doc = fn.getDocumentation();
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
index d6fde25..214f2aa 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputHelper.java
@@ -130,8 +130,7 @@
     Set<Artifact> emptyTreeArtifacts = new TreeSet<>();
     Set<Artifact> treeFileArtifactParents = new HashSet<>();
     for (ActionInput input : inputs.toList()) {
-      if (input instanceof Artifact) {
-        Artifact inputArtifact = (Artifact) input;
+      if (input instanceof Artifact inputArtifact) {
         Artifact.addExpandedArtifact(
             inputArtifact, result, artifactExpander, emptyTreeArtifacts, keepMiddlemanArtifacts);
         if (inputArtifact.isChildOfDeclaredDirectory()) {
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupData.java b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupData.java
index 9dc46b0..28e7ea1 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionLookupData.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionLookupData.java
@@ -109,10 +109,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ActionLookupData)) {
+    if (!(obj instanceof ActionLookupData that)) {
       return false;
     }
-    ActionLookupData that = (ActionLookupData) obj;
     return getActionIndex() == that.getActionIndex()
         && actionLookupKey.equals(that.actionLookupKey)
         && valueIsShareable() == that.valueIsShareable();
diff --git a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
index 2214861..f9613fd 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/Artifact.java
@@ -762,13 +762,12 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof Artifact)) {
+    if (!(other instanceof Artifact that)) {
       return false;
     }
     if (!getClass().equals(other.getClass())) {
       return false;
     }
-    Artifact that = (Artifact) other;
     return equalsWithoutOwner(that) && ownersEqual(that);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
index 26dc193..cfb7acf 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactRoot.java
@@ -299,10 +299,9 @@
     if (o == this) {
       return true;
     }
-    if (!(o instanceof ArtifactRoot)) {
+    if (!(o instanceof ArtifactRoot r)) {
       return false;
     }
-    ArtifactRoot r = (ArtifactRoot) o;
     return root.equals(r.root) && execPath.equals(r.execPath) && rootType == r.rootType;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
index 6ffb766..285f51a 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/BuildConfigurationEvent.java
@@ -54,10 +54,9 @@
 
   @Override
   public boolean equals(Object other) {
-    if (!(other instanceof BuildConfigurationEvent)) {
+    if (!(other instanceof BuildConfigurationEvent that)) {
       return false;
     }
-    BuildConfigurationEvent that = (BuildConfigurationEvent) other;
     return Objects.equals(eventId, that.eventId) && Objects.equals(eventProto, that.eventProto);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java b/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
index 69e028f..e65ed6a 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileArtifactValue.java
@@ -338,11 +338,10 @@
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof DirectoryArtifactValue)) {
+      if (!(o instanceof DirectoryArtifactValue that)) {
         return false;
       }
 
-      DirectoryArtifactValue that = (DirectoryArtifactValue) o;
       return mtime == that.mtime;
     }
 
@@ -406,11 +405,10 @@
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof HashedDirectoryArtifactValue)) {
+      if (!(o instanceof HashedDirectoryArtifactValue that)) {
         return false;
       }
 
-      HashedDirectoryArtifactValue that = (HashedDirectoryArtifactValue) o;
       return Arrays.equals(digest, that.digest);
     }
 
@@ -494,10 +492,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof RegularFileArtifactValue)) {
+      if (!(o instanceof RegularFileArtifactValue that)) {
         return false;
       }
-      RegularFileArtifactValue that = (RegularFileArtifactValue) o;
       return Arrays.equals(digest, that.digest)
           && Objects.equals(proxy, that.proxy)
           && size == that.size
@@ -555,11 +552,10 @@
 
     @Override
     protected boolean couldBeModifiedByMetadata(FileArtifactValue o) {
-      if (!(o instanceof RegularFileArtifactValue)) {
+      if (!(o instanceof RegularFileArtifactValue lastKnown)) {
         return true;
       }
 
-      RegularFileArtifactValue lastKnown = (RegularFileArtifactValue) o;
       return size != lastKnown.size || !Objects.equals(proxy, lastKnown.proxy);
     }
   }
@@ -624,11 +620,10 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof RemoteFileArtifactValue)) {
+      if (!(o instanceof RemoteFileArtifactValue that)) {
         return false;
       }
 
-      RemoteFileArtifactValue that = (RemoteFileArtifactValue) o;
       return Arrays.equals(digest, that.digest)
           && size == that.size
           && locationIndex == that.locationIndex
@@ -852,10 +847,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof InlineFileArtifactValue)) {
+      if (!(o instanceof InlineFileArtifactValue that)) {
         return false;
       }
-      InlineFileArtifactValue that = (InlineFileArtifactValue) o;
       return Arrays.equals(digest, that.digest);
     }
 
@@ -926,11 +920,10 @@
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof SourceFileArtifactValue)) {
+      if (!(o instanceof SourceFileArtifactValue that)) {
         return false;
       }
 
-      SourceFileArtifactValue that = (SourceFileArtifactValue) o;
       return Objects.equals(path, that.path)
           && Objects.equals(execPath, that.execPath)
           && Arrays.equals(digest, that.digest)
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileContentsProxy.java b/src/main/java/com/google/devtools/build/lib/actions/FileContentsProxy.java
index 08e1512..dadaca2 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileContentsProxy.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileContentsProxy.java
@@ -55,11 +55,10 @@
       return true;
     }
 
-    if (!(other instanceof FileContentsProxy)) {
+    if (!(other instanceof FileContentsProxy that)) {
       return false;
     }
 
-    FileContentsProxy that = (FileContentsProxy) other;
     return ctime == that.ctime && mtime == that.mtime && nodeId == that.nodeId;
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileStateValue.java b/src/main/java/com/google/devtools/build/lib/actions/FileStateValue.java
index 577bd24..245e9ed 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileStateValue.java
@@ -273,10 +273,9 @@
       if (obj == this) {
         return true;
       }
-      if (!(obj instanceof RegularFileStateValueWithDigest)) {
+      if (!(obj instanceof RegularFileStateValueWithDigest other)) {
         return false;
       }
-      RegularFileStateValueWithDigest other = (RegularFileStateValueWithDigest) obj;
       return size == other.size && Arrays.equals(digest, other.digest);
     }
 
@@ -346,10 +345,9 @@
       if (obj == this) {
         return true;
       }
-      if (!(obj instanceof RegularFileStateValueWithContentsProxy)) {
+      if (!(obj instanceof RegularFileStateValueWithContentsProxy other)) {
         return false;
       }
-      RegularFileStateValueWithContentsProxy other = (RegularFileStateValueWithContentsProxy) obj;
       return size == other.size && Objects.equals(contentsProxy, other.contentsProxy);
     }
 
@@ -426,10 +424,9 @@
       if (obj == this) {
         return true;
       }
-      if (!(obj instanceof SpecialFileStateValue)) {
+      if (!(obj instanceof SpecialFileStateValue other)) {
         return false;
       }
-      SpecialFileStateValue other = (SpecialFileStateValue) obj;
       return contentsProxy.equals(other.contentsProxy);
     }
 
@@ -512,10 +509,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof SymlinkFileStateValue)) {
+      if (!(obj instanceof SymlinkFileStateValue other)) {
         return false;
       }
-      SymlinkFileStateValue other = (SymlinkFileStateValue) obj;
       return symlinkTarget.equals(other.symlinkTarget);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FileValue.java b/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
index d24c18d..834204a 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FileValue.java
@@ -301,10 +301,9 @@
       if (obj == null) {
         return false;
       }
-      if (!(obj instanceof RegularFileValue)) {
+      if (!(obj instanceof RegularFileValue other)) {
         return false;
       }
-      RegularFileValue other = (RegularFileValue) obj;
       return rootedPath.equals(other.rootedPath) && fileStateValue.equals(other.fileStateValue);
     }
 
@@ -648,10 +647,9 @@
       if (obj == null) {
         return false;
       }
-      if (!(obj instanceof SymlinkFileValueWithStoredChain)) {
+      if (!(obj instanceof SymlinkFileValueWithStoredChain other)) {
         return false;
       }
-      SymlinkFileValueWithStoredChain other = (SymlinkFileValueWithStoredChain) obj;
       return realRootedPath.equals(other.realRootedPath)
           && realFileStateValue.equals(other.realFileStateValue)
           && logicalChainDuringResolution.equals(other.logicalChainDuringResolution)
@@ -703,10 +701,9 @@
       if (obj == null) {
         return false;
       }
-      if (!(obj instanceof SymlinkFileValueWithoutStoredChain)) {
+      if (!(obj instanceof SymlinkFileValueWithoutStoredChain other)) {
         return false;
       }
-      SymlinkFileValueWithoutStoredChain other = (SymlinkFileValueWithoutStoredChain) obj;
       return realRootedPath.equals(other.realRootedPath)
           && realFileStateValue.equals(other.realFileStateValue)
           && linkTarget.equals(other.linkTarget);
diff --git a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
index a82b60e..7aac40d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/FilesetTraversalParams.java
@@ -111,9 +111,7 @@
       if (o == this) {
         return true;
       }
-      if (o instanceof FilesetTraversalParams.DirectTraversalRoot) {
-        FilesetTraversalParams.DirectTraversalRoot that =
-            (FilesetTraversalParams.DirectTraversalRoot) o;
+      if (o instanceof DirectTraversalRoot that) {
         return Objects.equals(this.getOutputArtifact(), that.getOutputArtifact())
             && this.getRootPart().equals(that.getRootPart())
             && this.getRelativePart().equals(that.getRelativePart());
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ParamFileInfo.java b/src/main/java/com/google/devtools/build/lib/actions/ParamFileInfo.java
index 6b06803..ab8b4e5 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ParamFileInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ParamFileInfo.java
@@ -86,10 +86,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ParamFileInfo)) {
+    if (!(obj instanceof ParamFileInfo other)) {
       return false;
     }
-    ParamFileInfo other = (ParamFileInfo) obj;
     return fileType.equals(other.fileType)
         && charset.equals(other.charset)
         && flagFormatString.equals(other.flagFormatString)
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ResourceManager.java b/src/main/java/com/google/devtools/build/lib/actions/ResourceManager.java
index 60959f8..9b544a3 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ResourceManager.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ResourceManager.java
@@ -126,8 +126,7 @@
           worker.getStatus().maybeUpdateStatus(Status.PENDING_KILL_DUE_TO_INTERRUPTED_EXCEPTION);
         } else if (e instanceof IOException) {
           worker.getStatus().maybeUpdateStatus(Status.PENDING_KILL_DUE_TO_IO_EXCEPTION);
-        } else if (e instanceof UserExecException) {
-          UserExecException userExecException = (UserExecException) e;
+        } else if (e instanceof UserExecException userExecException) {
           if (userExecException.getFailureDetail().hasWorker()) {
             worker
                 .getStatus()
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ResourceSet.java b/src/main/java/com/google/devtools/build/lib/actions/ResourceSet.java
index 54da457..c5b3794 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ResourceSet.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ResourceSet.java
@@ -140,11 +140,10 @@
       return false;
     }
 
-    if (!(that instanceof ResourceSet)) {
+    if (!(that instanceof ResourceSet thatResourceSet)) {
       return false;
     }
 
-    ResourceSet thatResourceSet = (ResourceSet) that;
     return thatResourceSet.getMemoryMb() == getMemoryMb()
         && thatResourceSet.getCpuUsage() == getCpuUsage()
         && thatResourceSet.localTestCount == getLocalTestCount();
diff --git a/src/main/java/com/google/devtools/build/lib/actions/RunfilesArtifactValue.java b/src/main/java/com/google/devtools/build/lib/actions/RunfilesArtifactValue.java
index 5d697b2..a3e933d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/RunfilesArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/RunfilesArtifactValue.java
@@ -112,10 +112,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof RunfilesArtifactValue)) {
+    if (!(o instanceof RunfilesArtifactValue that)) {
       return false;
     }
-    RunfilesArtifactValue that = (RunfilesArtifactValue) o;
     return metadata.equals(that.metadata)
         && files.equals(that.files)
         && fileValues.equals(that.fileValues)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
index 6e7012b..fc0e977 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AliasProvider.java
@@ -151,10 +151,9 @@
    * {@link #isAlias} on the configured target returns {@code false}.
    */
   public static boolean mayBeAlias(Target target) {
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return false;
     }
-    Rule rule = (Rule) target;
     AdvertisedProviderSet providerSet = rule.getRuleClassObject().getAdvertisedProviders();
     return providerSet.canHaveAnyProvider()
         || providerSet.getBuiltinProviders().contains(AliasProvider.class);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectCollection.java
index 485b40b..1c2f21f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectCollection.java
@@ -177,10 +177,9 @@
 
   @Override
   public boolean equals(Object obj) {
-    if (!(obj instanceof AspectCollection)) {
+    if (!(obj instanceof AspectCollection that)) {
       return false;
     }
-    AspectCollection that = (AspectCollection) obj;
     return this.usedAspects.equals(that.usedAspects);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
index 57d0993..cc97188 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -219,8 +219,7 @@
     // Visibility, like all package groups, doesn't have a configuration
     NestedSet<PackageGroupContents> visibility =
         convertVisibility(prerequisiteMap, analysisEnvironment.getEventHandler(), target);
-    if (target instanceof OutputFile) {
-      OutputFile outputFile = (OutputFile) target;
+    if (target instanceof OutputFile outputFile) {
       TargetContext targetContext =
           new TargetContext(
               analysisEnvironment,
@@ -250,8 +249,7 @@
       }
       Artifact artifact = rule.findArtifactByOutputLabel(outputFile.getLabel());
       return new OutputFileConfiguredTarget(targetContext, artifact, rule);
-    } else if (target instanceof InputFile) {
-      InputFile inputFile = (InputFile) target;
+    } else if (target instanceof InputFile inputFile) {
       TargetContext targetContext =
           new TargetContext(
               analysisEnvironment,
@@ -271,8 +269,7 @@
                   .setConfiguration(config)
                   .build());
       return new InputFileConfiguredTarget(targetContext, artifact);
-    } else if (target instanceof PackageGroup) {
-      PackageGroup packageGroup = (PackageGroup) target;
+    } else if (target instanceof PackageGroup packageGroup) {
       TargetContext targetContext =
           new TargetContext(
               analysisEnvironment,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
index 906a00b..4347c90 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ExtraActionsVisitor.java
@@ -45,8 +45,7 @@
   }
 
   void maybeAddExtraAction(ActionAnalysisMetadata original) throws InterruptedException {
-    if (original instanceof Action) {
-      Action action = (Action) original;
+    if (original instanceof Action action) {
       Collection<ExtraActionSpec> extraActions =
           mnemonicToExtraActionMap.get(action.getMnemonic());
       if (extraActions != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
index 08ec773..2a53720 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LicensesProvider.java
@@ -83,10 +83,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof TargetLicense)) {
+      if (!(obj instanceof TargetLicense other)) {
         return false;
       }
-      TargetLicense other = (TargetLicense) obj;
       return label.equals(other.label) && license.equals(other.license);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
index aa09d73..d74069a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java
@@ -409,10 +409,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof EmptyFiles)) {
+      if (!(o instanceof EmptyFiles other)) {
         return false;
       }
-      EmptyFiles other = (EmptyFiles) o;
       return groups.equals(other.groups);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TargetAndConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/TargetAndConfiguration.java
index 461f8c6..a0a4c23 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TargetAndConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TargetAndConfiguration.java
@@ -40,11 +40,10 @@
     if (this == that) {
       return true;
     }
-    if (!(that instanceof TargetAndConfiguration)) {
+    if (!(that instanceof TargetAndConfiguration thatNode)) {
       return false;
     }
 
-    TargetAndConfiguration thatNode = (TargetAndConfiguration) that;
     return thatNode.target.getLabel().equals(this.target.getLabel()) &&
         thatNode.configuration == this.configuration;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactContext.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactContext.java
index c069a17..f925c2c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactContext.java
@@ -61,8 +61,7 @@
   // so equals() and hashCode() need to work.
   @Override
   public boolean equals(Object other) {
-    if (other instanceof TopLevelArtifactContext) {
-      TopLevelArtifactContext otherContext = (TopLevelArtifactContext) other;
+    if (other instanceof TopLevelArtifactContext otherContext) {
       return runTestsExclusively == otherContext.runTestsExclusively
           && expandFilesets == otherContext.expandFilesets
           && fullyResolveFilesetSymlinks == otherContext.fullyResolveFilesetSymlinks
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
index 9560b21..9f291d1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/TopLevelArtifactHelper.java
@@ -250,8 +250,7 @@
       // Suppress display of source files (because we do no work to build them).
       return false;
     }
-    if (configuredTarget instanceof RuleConfiguredTarget) {
-      RuleConfiguredTarget ruleCt = (RuleConfiguredTarget) configuredTarget;
+    if (configuredTarget instanceof RuleConfiguredTarget ruleCt) {
       if (ruleCt.getRuleClassString().contains("$")) {
         // Suppress display of hidden rules
         return false;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
index c19dd63..ae63d1b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/CustomCommandLine.java
@@ -1306,8 +1306,8 @@
       } else if (arg instanceof Iterable) {
         evalSimpleVectorArg((Iterable<?>) arg, builder, pathMapper, previousFlag);
       } else if (arg instanceof ArgvFragment) {
-        if (artifactExpander != null && arg instanceof TreeArtifactExpansionArgvFragment) {
-          TreeArtifactExpansionArgvFragment expansionArg = (TreeArtifactExpansionArgvFragment) arg;
+        if (artifactExpander != null
+            && arg instanceof TreeArtifactExpansionArgvFragment expansionArg) {
           expansionArg.eval(builder, artifactExpander);
         } else {
           i = ((ArgvFragment) arg).eval(arguments, i, builder, pathMapper);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/Substitution.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/Substitution.java
index 1b7568d..86e481c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/Substitution.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/Substitution.java
@@ -113,8 +113,7 @@
     if (this == object) {
       return true;
     }
-    if (object instanceof Substitution) {
-      Substitution substitution = (Substitution) object;
+    if (object instanceof Substitution substitution) {
       return substitution.getKey().equals(this.getKey())
           && substitution.getValueUnchecked().equals(this.getValueUnchecked());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
index 626404a..112ab45 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfigurationValue.java
@@ -312,11 +312,10 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof BuildConfigurationValue)) {
+    if (!(other instanceof BuildConfigurationValue otherVal)) {
       return false;
     }
     // Only considering arguments that are non-dependent and non-server-global.
-    BuildConfigurationValue otherVal = (BuildConfigurationValue) other;
     return this.buildOptions.equals(otherVal.buildOptions)
         && this.workspaceName.equals(otherVal.workspaceName)
         && this.siblingRepositoryLayout == otherVal.siblingRepositoryLayout
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
index 2169e5a..2d8e1d6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/FragmentClassSet.java
@@ -89,10 +89,9 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof FragmentClassSet)) {
+    if (!(other instanceof FragmentClassSet that)) {
       return false;
     }
-    FragmentClassSet that = (FragmentClassSet) other;
     return hashCode == that.hashCode && fragments.equals(that.fragments);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java
index fa1b8cc..24cb98f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/PerLabelOptions.java
@@ -126,10 +126,9 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof PerLabelOptions)) {
+    if (!(other instanceof PerLabelOptions otherOptions)) {
       return false;
     }
-    PerLabelOptions otherOptions = (PerLabelOptions) other;
     return this.regexFilter.equals(otherOptions.regexFilter)
         && this.optionsList.equals(otherOptions.optionsList);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
index c74eddb..f4ff143 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/RunUnderConverter.java
@@ -97,8 +97,7 @@
     public boolean equals(Object other) {
       if (this == other) {
         return true;
-      } else if (other instanceof RunUnderLabel) {
-        RunUnderLabel otherRunUnderLabel = (RunUnderLabel) other;
+      } else if (other instanceof RunUnderLabel otherRunUnderLabel) {
         return Objects.equals(input, otherRunUnderLabel.input)
             && Objects.equals(runUnderLabel, otherRunUnderLabel.runUnderLabel)
             && Objects.equals(runUnderList, otherRunUnderLabel.runUnderList);
@@ -154,8 +153,7 @@
     public boolean equals(Object other) {
       if (this == other) {
         return true;
-      } else if (other instanceof RunUnderCommand) {
-        RunUnderCommand otherRunUnderCommand = (RunUnderCommand) other;
+      } else if (other instanceof RunUnderCommand otherRunUnderCommand) {
         return Objects.equals(input, otherRunUnderCommand.input)
             && Objects.equals(runUnderCommand, otherRunUnderCommand.runUnderCommand)
             && Objects.equals(runUnderList, otherRunUnderCommand.runUnderList);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
index b3f0ee37..aab9af5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkDefinedConfigTransition.java
@@ -329,8 +329,7 @@
       if (object == this) {
         return true;
       }
-      if (object instanceof AnalysisTestTransition) {
-        AnalysisTestTransition otherTransition = (AnalysisTestTransition) object;
+      if (object instanceof AnalysisTestTransition otherTransition) {
         return Objects.equals(otherTransition.getInputs(), this.getInputs())
             && Objects.equals(otherTransition.getOutputs(), this.getOutputs())
             && Objects.equals(otherTransition.changedSettings, this.changedSettings);
@@ -731,8 +730,7 @@
       if (object == this) {
         return true;
       }
-      if (object instanceof RegularTransition) {
-        RegularTransition otherTransition = (RegularTransition) object;
+      if (object instanceof RegularTransition otherTransition) {
         return Objects.equals(otherTransition.getInputs(), this.getInputs())
             && Objects.equals(otherTransition.getOutputs(), this.getOutputs())
             && Objects.equals(otherTransition.impl, this.impl);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkTransitionCache.java b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkTransitionCache.java
index 52f4947..9128c5b 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkTransitionCache.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/StarlarkTransitionCache.java
@@ -129,10 +129,9 @@
       if (other == this) {
         return true;
       }
-      if (!(other instanceof Key)) {
+      if (!(other instanceof Key otherKey)) {
         return false;
       }
-      Key otherKey = (Key) other;
       return this.transition.equals(otherKey.transition)
           && this.fromOptions.equals(otherKey.fromOptions)
           && this.details.equals(otherKey.details);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/output/ConfigurationForOutput.java b/src/main/java/com/google/devtools/build/lib/analysis/config/output/ConfigurationForOutput.java
index bf6267b..ee9b6f8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/output/ConfigurationForOutput.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/output/ConfigurationForOutput.java
@@ -114,8 +114,7 @@
 
   @Override
   public boolean equals(Object o) {
-    if (o instanceof ConfigurationForOutput) {
-      ConfigurationForOutput other = (ConfigurationForOutput) o;
+    if (o instanceof ConfigurationForOutput other) {
       return other.skyKey.equals(skyKey)
           && other.configHash.equals(configHash)
           && other.fragments.equals(fragments)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentForOutput.java b/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentForOutput.java
index af06d56..7c74777 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentForOutput.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentForOutput.java
@@ -51,8 +51,7 @@
 
   @Override
   public boolean equals(Object o) {
-    if (o instanceof FragmentForOutput) {
-      FragmentForOutput other = (FragmentForOutput) o;
+    if (o instanceof FragmentForOutput other) {
       return other.name.equals(name) && other.fragmentOptions.equals(fragmentOptions);
     }
     return false;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentOptionsForOutput.java b/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentOptionsForOutput.java
index ac9d440..7217f08 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentOptionsForOutput.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/output/FragmentOptionsForOutput.java
@@ -51,8 +51,7 @@
 
   @Override
   public boolean equals(Object o) {
-    if (o instanceof FragmentOptionsForOutput) {
-      FragmentOptionsForOutput other = (FragmentOptionsForOutput) o;
+    if (o instanceof FragmentOptionsForOutput other) {
       return other.name.equals(name) && other.options.equals(options);
     }
     return false;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
index 4a1d84b..def147d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/AbstractConfiguredTarget.java
@@ -168,12 +168,11 @@
 
   @Override
   public final Object getIndex(StarlarkSemantics semantics, Object key) throws EvalException {
-    if (!(key instanceof Provider)) {
+    if (!(key instanceof Provider constructor)) {
       throw Starlark.errorf(
           "Type Target only supports indexing by object constructors, got %s instead",
           Starlark.type(key));
     }
-    Provider constructor = (Provider) key;
     Object declaredProvider = get(constructor.getKey());
     if (declaredProvider != null) {
       return declaredProvider;
@@ -302,8 +301,7 @@
     if (key instanceof String) {
       keyAsString = (String) key;
     } else if (key instanceof Provider.Key) {
-      if (key instanceof StarlarkProvider.Key) {
-        StarlarkProvider.Key k = (StarlarkProvider.Key) key;
+      if (key instanceof StarlarkProvider.Key k) {
         keyAsString = k.getExtensionLabel() + "%" + k.getExportedName();
       } else {
         keyAsString = key.toString();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
index b4fda5d..20166c5 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/MergedConfiguredTarget.java
@@ -214,14 +214,12 @@
           }
           nonBaseProviders.put(
               providerClass, (TransitiveInfoProvider) providers.getProviderInstanceAt(i));
-        } else if (providerKey instanceof String) {
-          String legacyId = (String) providerKey;
+        } else if (providerKey instanceof String legacyId) {
           if (base.get(legacyId) != null || nonBaseProviders.contains(legacyId)) {
             throw new DuplicateException("Provider " + legacyId + " provided twice");
           }
           nonBaseProviders.put(legacyId, providers.getProviderInstanceAt(i));
-        } else if (providerKey instanceof Provider.Key) {
-          Provider.Key key = (Provider.Key) providerKey;
+        } else if (providerKey instanceof Provider.Key key) {
           // If InstrumentedFilesInfo is on both the base target and an aspect, ignore the one from
           // the base. Otherwise, sharing implementation between a rule which returns
           // InstrumentedFilesInfo (e.g. *_library) and a related aspect (e.g. *_proto_library) can
@@ -304,10 +302,9 @@
 
   @Override
   public String getRuleClassString() {
-    if (!(base instanceof AbstractConfiguredTarget)) {
+    if (!(base instanceof AbstractConfiguredTarget act)) {
       return super.getRuleClassString();
     }
-    AbstractConfiguredTarget act = (AbstractConfiguredTarget) base;
     return act.getRuleClassString();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
index bd6298c..6ef6c48 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/EnvironmentCollection.java
@@ -108,12 +108,11 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof EnvironmentCollection)) {
+    if (!(o instanceof EnvironmentCollection that)) {
       return false;
     }
     // ImmutableListMultimap equality considers the order of each value list but not the order of
     // keys. Additionally check equality of the keys as a list to reflect ordering.
-    EnvironmentCollection that = (EnvironmentCollection) o;
     return map.equals(that.map) && map.keySet().asList().equals(that.map.keySet().asList());
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
index 98772d6..1b6fbd6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java
@@ -73,11 +73,10 @@
 
   @Override
   public boolean equals(Object other) {
-    if (!(other instanceof ConstraintSettingInfo)) {
+    if (!(other instanceof ConstraintSettingInfo otherConstraint)) {
       return false;
     }
 
-    ConstraintSettingInfo otherConstraint = (ConstraintSettingInfo) other;
     return Objects.equal(label, otherConstraint.label);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
index db49b5e..733093c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java
@@ -100,10 +100,9 @@
 
   @Override
   public boolean equals(Object o) {
-    if (!(o instanceof ConstraintValueInfo)) {
+    if (!(o instanceof ConstraintValueInfo that)) {
       return false;
     }
-    ConstraintValueInfo that = (ConstraintValueInfo) o;
     return Objects.equals(constraint, that.constraint)
         && Objects.equals(label, that.label);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
index d32da7a..744f564 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java
@@ -132,10 +132,9 @@
 
   @Override
   public boolean equals(Object o) {
-    if (!(o instanceof PlatformInfo)) {
+    if (!(o instanceof PlatformInfo that)) {
       return false;
     }
-    PlatformInfo that = (PlatformInfo) o;
     return Objects.equals(label, that.label)
         && Objects.equals(constraints, that.constraints)
         && Objects.equals(remoteExecutionProperties, that.remoteExecutionProperties)
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
index 46d1ace..430d873 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ToolchainTypeInfo.java
@@ -64,11 +64,10 @@
 
   @Override
   public boolean equals(Object other) {
-    if (!(other instanceof ToolchainTypeInfo)) {
+    if (!(other instanceof ToolchainTypeInfo otherToolchainTypeInfo)) {
       return false;
     }
 
-    ToolchainTypeInfo otherToolchainTypeInfo = (ToolchainTypeInfo) other;
     return Objects.equals(typeLabel, otherToolchainTypeInfo.typeLabel);
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java
index e855ed6..6e98e52 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/DependencyProducer.java
@@ -327,8 +327,7 @@
     // `LoadingFailedCause`. Requests parent-side context to be added to such errors by propagating
     // a `MissingEdgeError`.
     for (Cause cause : error.getRootCauses().toList()) {
-      if (cause instanceof LoadingFailedCause) {
-        var loadingFailed = (LoadingFailedCause) cause;
+      if (cause instanceof LoadingFailedCause loadingFailed) {
         if (loadingFailed.getLabel().equals(toLabel)) {
           sink.acceptDependencyError(
               new MissingEdgeError(
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/PlatformFlagsProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/PlatformFlagsProducer.java
index 48c4dc5..0ba66c0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/producers/PlatformFlagsProducer.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/PlatformFlagsProducer.java
@@ -69,8 +69,7 @@
   }
 
   private void acceptRepositoryMappingValue(SkyValue skyValue) {
-    if (skyValue instanceof RepositoryMappingValue) {
-      RepositoryMappingValue repositoryMappingValue = (RepositoryMappingValue) skyValue;
+    if (skyValue instanceof RepositoryMappingValue repositoryMappingValue) {
       this.platformRepositoryMapping = repositoryMappingValue.getRepositoryMapping();
       return;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/TargetAndConfigurationProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/TargetAndConfigurationProducer.java
index 5dc370d..35f5c76 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/producers/TargetAndConfigurationProducer.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/TargetAndConfigurationProducer.java
@@ -300,12 +300,10 @@
     // TODO: @aranguyen b/297077082
     public UnloadedToolchainContextsInputs getUnloadedToolchainContextsInputs(
         Target target, @Nullable Label parentExecutionPlatformLabel) throws InterruptedException {
-      if (!(target instanceof Rule)) {
+      if (!(target instanceof Rule rule)) {
         return UnloadedToolchainContextsInputs.empty();
       }
 
-      Rule rule = (Rule) target;
-
       if (!preRuleTransitionKey
           .getConfigurationKey()
           .getOptions()
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
index 77a19ed..d60b750 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/Args.java
@@ -372,8 +372,7 @@
       if (fn == Starlark.NONE) {
         return null;
       }
-      if (fn instanceof StarlarkFunction) {
-        StarlarkFunction sfn = (StarlarkFunction) fn;
+      if (fn instanceof StarlarkFunction sfn) {
         // Reject non-global functions, because arbitrary closures may cause large
         // analysis-phase data structures to remain live into the execution phase.
         // We require that the function is "global" as opposed to "not a closure"
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
index e61f6e5..23cd0f0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
@@ -497,7 +497,7 @@
           Field field = def.getField();
           // TODO(b/153867317): check for crashing options types in this logic.
           Object convertedValue;
-          if (def.getType() == List.class && optionValue instanceof List) {
+          if (def.getType() == List.class && optionValue instanceof List<?> optionValueAsList) {
             // This is possible with Starlark code like "{ //command_line_option:foo: ["a", "b"] }".
             // In that case def.getType() == List.class while optionValue.type == StarlarkList.
             // Unfortunately we can't check the *element* types because OptionDefinition won't tell
@@ -507,7 +507,6 @@
             // generically safe way to do this. We convert its elements with .toString() with a ","
             // separator, which happens to work for most implementations. But that's not universally
             // guaranteed.
-            List<?> optionValueAsList = (List<?>) optionValue;
             if (optionValueAsList.isEmpty()) {
               convertedValue = ImmutableList.of();
             } else if (!def.allowsMultiple()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
index 9c62c10..51e7f6d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkActionFactory.java
@@ -344,8 +344,7 @@
     if (content instanceof String) {
       action =
           FileWriteAction.create(ruleContext, (Artifact) output, (String) content, isExecutable);
-    } else if (content instanceof Args) {
-      Args args = (Args) content;
+    } else if (content instanceof Args args) {
       action =
           new ParameterFileWriteAction(
               ruleContext.getActionOwner(),
@@ -387,8 +386,7 @@
 
     StarlarkAction.Builder builder = new StarlarkAction.Builder();
     buildCommandLine(builder, arguments, getMainRepoMappingSupplier());
-    if (executableUnchecked instanceof Artifact) {
-      Artifact executable = (Artifact) executableUnchecked;
+    if (executableUnchecked instanceof Artifact executable) {
       FilesToRunProvider provider = context.getExecutableRunfiles(executable, "executable");
       if (provider == null) {
         if (useAutoExecGroups && execGroupUnchecked == Starlark.NONE) {
@@ -580,11 +578,10 @@
     // arg1 and arg2 will be $1 and $2, as a user expects.
     boolean pad = !arguments.isEmpty();
 
-    if (commandUnchecked instanceof String) {
+    if (commandUnchecked instanceof String command) {
       ImmutableMap<String, String> executionInfo =
           ImmutableMap.copyOf(TargetUtils.getExecutionInfo(ruleContext.getRule()));
       String helperScriptSuffix = String.format(".run_shell_%d.sh", runShellOutputCounter++);
-      String command = (String) commandUnchecked;
       PathFragment shExecutable =
           ShToolchain.getPathForPlatform(
               ruleContext.getConfiguration(),
@@ -600,14 +597,13 @@
         builder.setShellCommand(shExecutable, helperScript.getExecPathString(), pad);
         builder.addInput(helperScript);
       }
-    } else if (commandUnchecked instanceof Sequence) {
+    } else if (commandUnchecked instanceof Sequence<?> commandList) {
       if (getSemantics().getBool(BuildLanguageOptions.INCOMPATIBLE_RUN_SHELL_COMMAND_STRING)) {
         throw Starlark.errorf(
             "'command' must be of type string. passing a sequence of strings as 'command'"
                 + " is deprecated. To temporarily disable this check,"
                 + " set --incompatible_run_shell_command_string=false.");
       }
-      Sequence<?> commandList = (Sequence<?>) commandUnchecked;
       if (!arguments.isEmpty()) {
         throw Starlark.errorf("'arguments' must be empty if 'command' is a sequence of strings");
       }
@@ -647,12 +643,11 @@
           stringArgs = ImmutableList.builder();
         }
         stringArgs.add((String) value);
-      } else if (value instanceof Args) {
+      } else if (value instanceof Args args) {
         if (stringArgs != null) {
           builder.addCommandLine(CommandLine.of(stringArgs.build()));
           stringArgs = null;
         }
-        Args args = (Args) value;
         ParamFileInfo paramFileInfo = args.getParamFileInfo();
         builder.addCommandLine(args.build(repoMappingSupplier), paramFileInfo);
       } else {
@@ -720,8 +715,7 @@
               : Depset.cast(toolsUnchecked, Object.class, "tools").toList();
 
       for (Object toolUnchecked : tools) {
-        if (toolUnchecked instanceof Artifact) {
-          Artifact artifact = (Artifact) toolUnchecked;
+        if (toolUnchecked instanceof Artifact artifact) {
           builder.addTool(artifact);
           FilesToRunProvider provider = context.getExecutableRunfiles(artifact, "executable");
           if (provider != null) {
@@ -940,8 +934,7 @@
           Starlark.type(fn));
     }
 
-    if (fn instanceof StarlarkFunction) {
-      StarlarkFunction sfn = (StarlarkFunction) fn;
+    if (fn instanceof StarlarkFunction sfn) {
 
       // Reject non-global functions, because arbitrary closures may cause large
       // analysis-phase data structures to remain live into the execution phase.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
index 6f8adb3..1f3e813 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttrModule.java
@@ -274,8 +274,7 @@
       boolean isSplit = false;
       if (trans instanceof SplitTransition || trans instanceof StarlarkDefinedConfigTransition) {
         isSplit = true;
-      } else if (trans instanceof TransitionFactory) {
-        TransitionFactory<?> tf = (TransitionFactory<?>) trans;
+      } else if (trans instanceof TransitionFactory<?> tf) {
         if (tf.isSplit()) {
           isSplit = true;
         }
@@ -308,9 +307,7 @@
         TransitionFactory<AttributeTransitionData> transitionFactory =
             (TransitionFactory<AttributeTransitionData>) trans;
         builder.cfg(transitionFactory);
-      } else if (trans instanceof StarlarkDefinedConfigTransition) {
-        StarlarkDefinedConfigTransition starlarkDefinedTransition =
-            (StarlarkDefinedConfigTransition) trans;
+      } else if (trans instanceof StarlarkDefinedConfigTransition starlarkDefinedTransition) {
         if (starlarkDefinedTransition.isForAnalysisTesting()) {
           builder.hasAnalysisTestTransition();
         } else {
@@ -382,8 +379,7 @@
     for (Object obj : list) {
       if (obj instanceof String) {
         result.add(StarlarkProviderIdentifier.forLegacy((String) obj));
-      } else if (obj instanceof Provider) {
-        Provider constructor = (Provider) obj;
+      } else if (obj instanceof Provider constructor) {
         if (!constructor.isExported()) {
           throw Starlark.errorf(
               "Providers should be top-level values in extension files that define them.");
@@ -813,10 +809,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof Descriptor)) {
+      if (!(o instanceof Descriptor that)) {
         return false;
       }
-      Descriptor that = (Descriptor) o;
       return Objects.equals(name, that.name)
           && Objects.equals(attributeFactory, that.attributeFactory);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
index 874bcc2..c2fc43e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkAttributeTransitionProvider.java
@@ -158,10 +158,9 @@
       if (object == this) {
         return true;
       }
-      if (!(object instanceof FunctionSplitTransition)) {
+      if (!(object instanceof FunctionSplitTransition other)) {
         return false;
       }
-      FunctionSplitTransition other = (FunctionSplitTransition) object;
       return Objects.equals(attrObject, other.attrObject) && super.equals(other);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
index 392065d..86d56e2 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkCustomCommandLine.java
@@ -1080,10 +1080,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof CommandLineItemMapEachAdaptor)) {
+      if (!(obj instanceof CommandLineItemMapEachAdaptor other)) {
         return false;
       }
-      CommandLineItemMapEachAdaptor other = (CommandLineItemMapEachAdaptor) obj;
       // Instance compare intentional
       // The normal implementation uses location + name of function,
       // which can conceivably conflict in tests
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
index c5606b7..b3ae5e4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkLateBoundDefault.java
@@ -150,10 +150,9 @@
     public boolean equals(Object object) {
       if (object == this) {
         return true;
-      } else if (!(object instanceof CacheKey)) {
+      } else if (!(object instanceof CacheKey cacheKey)) {
         return false;
       } else {
-        CacheKey cacheKey = (CacheKey) object;
         return fragmentClass.equals(cacheKey.fragmentClass)
             && toolsRepository.equals(cacheKey.toolsRepository);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
index 204fca5..c35318f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleClassFunctions.java
@@ -685,16 +685,12 @@
 
     TransitionFactory<RuleTransitionData> transitionFactory = null;
     if (!cfg.equals(Starlark.NONE)) {
-      if (cfg instanceof StarlarkDefinedConfigTransition) {
+      if (cfg instanceof StarlarkDefinedConfigTransition starlarkDefinedConfigTransition) {
         // defined in Starlark via, cfg = transition
-        StarlarkDefinedConfigTransition starlarkDefinedConfigTransition =
-            (StarlarkDefinedConfigTransition) cfg;
         transitionFactory = new StarlarkRuleTransitionProvider(starlarkDefinedConfigTransition);
         hasStarlarkDefinedTransition = true;
-      } else if (cfg instanceof StarlarkExposedRuleTransitionFactory) {
+      } else if (cfg instanceof StarlarkExposedRuleTransitionFactory transition) {
         // only used for native Android transitions (platforms and feature flags)
-        StarlarkExposedRuleTransitionFactory transition =
-            (StarlarkExposedRuleTransitionFactory) cfg;
         transition.addToStarlarkRule(ruleDefinitionEnvironment, builder);
         transitionFactory = transition;
       } else {
@@ -1092,12 +1088,11 @@
       if (nameUnchecked == null) {
         throw Starlark.errorf("macro requires a `name` attribute");
       }
-      if (!(nameUnchecked instanceof String)) {
+      if (!(nameUnchecked instanceof String instanceName)) {
         throw Starlark.errorf(
             "Expected a String for attribute 'name'; got %s",
             nameUnchecked.getClass().getSimpleName());
       }
-      String instanceName = (String) nameUnchecked;
 
       MacroInstance macroInstance = new MacroInstance(macroClass, instanceName);
       try {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
index c7ce351..6141a08 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleConfiguredTargetUtil.java
@@ -299,9 +299,8 @@
         StarlarkInfo.create(StructProvider.STRUCT, ImmutableMap.of(), implLoc);
     Map<Provider.Key, Info> declaredProviders = new LinkedHashMap<>();
 
-    if (rawProviders instanceof Info) {
+    if (rawProviders instanceof Info info) {
       // Either an old-style struct or a single declared provider (not in a list)
-      Info info = (Info) rawProviders;
       if (getProviderKey(info).equals(StructProvider.STRUCT.getKey())) {
         if (context
             .getAnalysisEnvironment()
@@ -420,8 +419,7 @@
       throws EvalException {
     builder.addStarlarkTransitiveInfo(fieldName, value);
 
-    if (value instanceof Info) {
-      Info info = (Info) value;
+    if (value instanceof Info info) {
 
       // To facilitate migration off legacy provider syntax, implicitly set the modern provider key
       // and the canonical legacy provider key if applicable.
@@ -429,9 +427,8 @@
         builder.addNativeDeclaredProvider(info);
       }
 
-      if (info.getProvider() instanceof BuiltinProvider.WithLegacyStarlarkName) {
-        BuiltinProvider.WithLegacyStarlarkName providerWithLegacyName =
-            (BuiltinProvider.WithLegacyStarlarkName) info.getProvider();
+      if (info.getProvider()
+          instanceof BuiltinProvider.WithLegacyStarlarkName providerWithLegacyName) {
         if (shouldAddWithLegacyKey(oldStyleProviders, providerWithLegacyName)) {
           builder.addStarlarkTransitiveInfo(providerWithLegacyName.getStarlarkName(), info);
         }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
index 6d43804..1047a563 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleContext.java
@@ -633,9 +633,8 @@
     }
 
     // Normalize the return type
-    if (rawProviders instanceof Info) {
+    if (rawProviders instanceof Info info) {
       // Either an old-style struct or a single declared provider (not in a list)
-      Info info = (Info) rawProviders;
       if (info.getProvider().getKey().equals(StructProvider.STRUCT.getKey())) {
         throw Starlark.errorf(
             "Parent rule returned struct providers. Rules returning struct providers can't be"
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
index 079d00c..4379b11 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkRuleTransitionProvider.java
@@ -226,10 +226,9 @@
       if (object == this) {
         return true;
       }
-      if (!(object instanceof FunctionPatchTransition)) {
+      if (!(object instanceof FunctionPatchTransition other)) {
         return false;
       }
-      FunctionPatchTransition other = (FunctionPatchTransition) object;
       return Objects.equals(attrObject, other.attrObject) && super.equals(other);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkSubrule.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkSubrule.java
index 9024f12..f3a12c7 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkSubrule.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkSubrule.java
@@ -260,8 +260,7 @@
       ImmutableCollection<? extends StarlarkSubruleApi> subrules) {
     ImmutableSet.Builder<StarlarkSubrule> uniqueSubrules = ImmutableSet.builder();
     for (StarlarkSubruleApi subruleApi : subrules) {
-      if (subruleApi instanceof StarlarkSubrule) {
-        StarlarkSubrule subrule = (StarlarkSubrule) subruleApi;
+      if (subruleApi instanceof StarlarkSubrule subrule) {
         uniqueSubrules.add(subrule).addAll(getTransitiveSubrules(subrule.getDeclaredSubrules()));
       }
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkTransition.java
index 63e07d7..d8f64f9 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkTransition.java
@@ -259,14 +259,13 @@
     boolean allowsMultiple = details.buildSettingIsAllowsMultiple().contains(setting);
     if (allowsMultiple) {
       // if this setting allows multiple settings
-      if (!(newValue instanceof List)) {
+      if (!(newValue instanceof List<?> rawNewValueAsList)) {
         throw new TransitionException(
             String.format(
                 "'%s' allows multiple values and must be set"
                     + " in transition using a starlark list instead of single value '%s'",
                 setting, newValue));
       }
-      List<?> rawNewValueAsList = (List<?>) newValue;
       List<Object> convertedValue = new ArrayList<>();
       Type<?> type = details.buildSettingToType().get(setting);
       for (Object value : rawNewValueAsList) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/TemplateDict.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/TemplateDict.java
index 8f8ac29..b717829 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/TemplateDict.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/TemplateDict.java
@@ -68,8 +68,7 @@
       Boolean allowClosure,
       StarlarkThread thread)
       throws EvalException {
-    if (mapEach instanceof StarlarkFunction) {
-      StarlarkFunction sfn = (StarlarkFunction) mapEach;
+    if (mapEach instanceof StarlarkFunction sfn) {
       if (!allowClosure && sfn.getModule().getGlobal(sfn.getName()) != sfn) {
         throw Starlark.errorf(
             "to avoid unintended retention of analysis data structures, "
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
index 50ee0da..ce7e897 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/CoverageCommon.java
@@ -71,8 +71,7 @@
     if (supportFiles instanceof Depset) {
       supportFilesBuilder.addTransitive(
           Depset.cast(supportFiles, Artifact.class, "coverage_support_files"));
-    } else if (supportFiles instanceof Sequence) {
-      Sequence<?> supportFilesSequence = (Sequence<?>) supportFiles;
+    } else if (supportFiles instanceof Sequence<?> supportFilesSequence) {
       for (int i = 0; i < supportFilesSequence.size(); i++) {
         Object supportFilesElement = supportFilesSequence.get(i);
         if (supportFilesElement instanceof Depset) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProgress.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProgress.java
index ea5dc8f..efbbcf1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestProgress.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestProgress.java
@@ -89,10 +89,9 @@
 
   @Override
   public boolean equals(@Nullable Object object) {
-    if (!(object instanceof TestProgress)) {
+    if (!(object instanceof TestProgress other)) {
       return false;
     }
-    TestProgress other = (TestProgress) object;
     return label.equals(other.label)
         && configId.equals(other.configId)
         && run == other.run
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
index 6e10dbf..f634019 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestStrategy.java
@@ -465,10 +465,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof ShardKey)) {
+      if (!(o instanceof ShardKey s)) {
         return false;
       }
-      ShardKey s = (ShardKey) o;
       return owner.equals(s.owner) && shard == s.shard;
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelper.java b/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelper.java
index 3c4150b..42d42b1 100644
--- a/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/authandtls/credentialhelper/CredentialHelper.java
@@ -178,8 +178,7 @@
 
   @Override
   public boolean equals(Object o) {
-    if (o instanceof CredentialHelper) {
-      CredentialHelper that = (CredentialHelper) o;
+    if (o instanceof CredentialHelper that) {
       return Objects.equals(this.getPath(), that.getPath());
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValues.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValues.java
index d73e4ac..da4172b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValues.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValues.java
@@ -42,8 +42,7 @@
   // TODO(salmasamy) this is a copy of Attribute::valueToStarlark, Maybe think of a better place?
   private static Object valueToStarlark(Object x) {
     // Is x a non-empty string_list_dict?
-    if (x instanceof Map) {
-      Map<?, ?> map = (Map<?, ?>) x;
+    if (x instanceof Map<?, ?> map) {
       if (!map.isEmpty() && map.values().iterator().next() instanceof List) {
         Dict.Builder<Object, Object> dict = Dict.builder();
         for (Map.Entry<?, ?> e : map.entrySet()) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/InterimModule.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/InterimModule.java
index 21aa20e..7d0d91e 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/InterimModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/InterimModule.java
@@ -242,10 +242,9 @@
 
   private static RepoSpec maybeAppendAdditionalPatches(
       @Nullable RepoSpec repoSpec, @Nullable ModuleOverride override) {
-    if (!(override instanceof SingleVersionOverride)) {
+    if (!(override instanceof SingleVersionOverride singleVersion)) {
       return repoSpec;
     }
-    SingleVersionOverride singleVersion = (SingleVersionOverride) override;
     if (singleVersion.getPatches().isEmpty()) {
       return repoSpec;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionEvalStarlarkThreadContext.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionEvalStarlarkThreadContext.java
index 0c15310..8af32fc 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionEvalStarlarkThreadContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleExtensionEvalStarlarkThreadContext.java
@@ -86,11 +86,10 @@
   public void createRepo(StarlarkThread thread, Dict<String, Object> kwargs, RuleClass ruleClass)
       throws InterruptedException, EvalException {
     Object nameValue = kwargs.getOrDefault("name", Starlark.NONE);
-    if (!(nameValue instanceof String)) {
+    if (!(nameValue instanceof String name)) {
       throw Starlark.errorf(
           "expected string for attribute 'name', got '%s'", Starlark.type(nameValue));
     }
-    String name = (String) nameValue;
     RepositoryName.validateUserProvidedRepoName(name);
     RepoSpecAndLocation conflict = generatedRepos.get(name);
     if (conflict != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java
index 7106b02..ac959ac 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileFunction.java
@@ -373,8 +373,7 @@
       }
       thread.setPostAssignHook(
           (name, value) -> {
-            if (value instanceof StarlarkExportable) {
-              StarlarkExportable exportable = (StarlarkExportable) value;
+            if (value instanceof StarlarkExportable exportable) {
               if (!exportable.isExported()) {
                 exportable.export(eventHandler, null, name);
               }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java
index d9121f8..eed1818 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java
@@ -793,7 +793,7 @@
 
     // Check that the .bzl file actually exports a module extension by our name.
     Object exported = bzlLoadValue.getModule().getGlobal(extensionId.getExtensionName());
-    if (!(exported instanceof ModuleExtension)) {
+    if (!(exported instanceof ModuleExtension extension)) {
       ImmutableSet<String> exportedExtensions =
           bzlLoadValue.getModule().getGlobals().entrySet().stream()
               .filter(e -> e.getValue() instanceof ModuleExtension)
@@ -810,7 +810,6 @@
           Transience.PERSISTENT);
     }
 
-    ModuleExtension extension = (ModuleExtension) exported;
     ImmutableMap<String, String> envVars =
         RepositoryFunction.getEnvVarValues(env, ImmutableSet.copyOf(extension.getEnvVariables()));
     if (envVars == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
index a6269bd..187f586 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedEvent.java
@@ -254,8 +254,7 @@
       Map<String, Object> orig, Map<String, Object> defaults, Map<?, ?> modified) {
     ImmutableMap.Builder<String, Object> valuesChanged = ImmutableMap.builder();
     for (Map.Entry<?, ?> entry : modified.entrySet()) {
-      if (entry.getKey() instanceof String) {
-        String key = (String) entry.getKey();
+      if (entry.getKey() instanceof String key) {
         if (IGNORED_ATTRIBUTE_NAMES.contains(key)) {
           // The dict returned by the repo rule really shouldn't know about these anyway, but
           // for symmetry we'll ignore them if they happen to be present.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java
index 441b34a..c0923ad 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkBaseExternalContext.java
@@ -1444,8 +1444,7 @@
         ImmutableSortedMap.naturalOrder();
     ImmutableList.Builder<String> argumentsBuilder = ImmutableList.builder();
     for (Object argumentUnchecked : argumentsUnchecked) {
-      if (argumentUnchecked instanceof Label) {
-        Label label = (Label) argumentUnchecked;
+      if (argumentUnchecked instanceof Label label) {
         Map.Entry<PathFragment, Path> remotePath = getRemotePathFromLabel(label);
         argumentsBuilder.add(remotePath.getKey().toString());
         inputsBuilder.put(remotePath);
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
index 93edc2a..e786f8f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryModule.java
@@ -108,8 +108,7 @@
     }
     builder.setConfiguredTargetFunction(implementation);
     var threadContext = BazelStarlarkContext.fromOrFail(thread);
-    if (threadContext instanceof BzlInitThreadContext) {
-      var bzlInitContext = (BzlInitThreadContext) threadContext;
+    if (threadContext instanceof BzlInitThreadContext bzlInitContext) {
       builder.setRuleDefinitionEnvironmentLabelAndDigest(
           bzlInitContext.getBzlFile(), bzlInitContext.getTransitiveDigest());
     } else {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java
index 97ebf91..b7a7fa3 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/SdkMavenRepository.java
@@ -215,8 +215,7 @@
           new ImmutableSortedSet.Builder<>(Ordering.usingToString());
       NodeList dependencies = pomDocument.getElementsByTagName("dependency");
       for (int i = 0; i < dependencies.getLength(); i++) {
-        if (dependencies.item(i) instanceof Element) {
-          Element dependency = (Element) dependencies.item(i);
+        if (dependencies.item(i) instanceof Element dependency) {
           dependencyCoordinates.add(MavenCoordinate.create(
               dependency.getElementsByTagName("groupId").item(0).getTextContent(),
               dependency.getElementsByTagName("artifactId").item(0).getTextContent(),
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/AqueryProcessor.java b/src/main/java/com/google/devtools/build/lib/buildtool/AqueryProcessor.java
index 2d52239..d938f7a 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/AqueryProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/AqueryProcessor.java
@@ -198,15 +198,13 @@
     while (functionExpressionOptional.isPresent()) {
       FunctionExpression functionExpression = functionExpressionOptional.get();
 
-      if (functionExpression.getFunction() instanceof ActionFilterFunction) {
+      if (functionExpression.getFunction() instanceof ActionFilterFunction actionFilterFunction) {
         if (nonAqueryFilterFunctionExpression != null) {
           throw new AqueryActionFilterException(
               "aquery filter functions (inputs, outputs, mnemonic) produce actions, and therefore "
                   + "can't be the input of other function types: "
                   + nonAqueryFilterFunctionExpression.getFunction().getName());
         }
-        ActionFilterFunction actionFilterFunction =
-            (ActionFilterFunction) functionExpression.getFunction();
 
         String patternString = functionExpression.getArgs().get(0).getWord();
         try {
diff --git a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
index cc0ef62..39bd7da 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
@@ -83,10 +83,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof OffsetTable)) {
+      if (!(o instanceof OffsetTable<?> that)) {
         return false;
       }
-      OffsetTable<?> that = (OffsetTable<?>) o;
       return Arrays.equals(this.keys, that.keys);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimap.java b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimap.java
index 2114c41..fa78a05 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimap.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSortedKeyListMultimap.java
@@ -373,8 +373,7 @@
     if (this == object) {
       return true;
     }
-    if (object instanceof Multimap) {
-      Multimap<?, ?> that = (Multimap<?, ?>) object;
+    if (object instanceof Multimap<?, ?> that) {
       return asMap().equals(that.asMap());
     }
     return false;
diff --git a/src/main/java/com/google/devtools/build/lib/collect/compacthashmap/CompactHashMap.java b/src/main/java/com/google/devtools/build/lib/collect/compacthashmap/CompactHashMap.java
index 6297cce..467c73f 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/compacthashmap/CompactHashMap.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/compacthashmap/CompactHashMap.java
@@ -658,8 +658,7 @@
 
     @Override
     public boolean contains(@Nullable Object o) {
-      if (o instanceof Entry) {
-        Entry<?, ?> entry = (Entry<?, ?>) o;
+      if (o instanceof Entry<?, ?> entry) {
         int index = indexOf(entry.getKey());
         return index != -1 && Objects.equal(values[index], entry.getValue());
       }
@@ -668,8 +667,7 @@
 
     @Override
     public boolean remove(@Nullable Object o) {
-      if (o instanceof Entry) {
-        Entry<?, ?> entry = (Entry<?, ?>) o;
+      if (o instanceof Entry<?, ?> entry) {
         int index = indexOf(entry.getKey());
         if (index != -1 && Objects.equal(values[index], entry.getValue())) {
           removeEntry(index);
@@ -736,8 +734,7 @@
 
     @Override
     public boolean equals(@Nullable Object object) {
-      if (object instanceof Entry) {
-        Entry<?, ?> that = (Entry<?, ?>) object;
+      if (object instanceof Entry<?, ?> that) {
         return Objects.equal(this.key, that.getKey())
             && Objects.equal(this.getValue(), that.getValue());
       }
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/ArtifactNestedSetKey.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/ArtifactNestedSetKey.java
index e0134d8..3255764 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/ArtifactNestedSetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/ArtifactNestedSetKey.java
@@ -140,10 +140,9 @@
       }
     }
     for (Object child : currentNode) {
-      if (!(child instanceof Object[])) {
+      if (!(child instanceof Object[] nextNode)) {
         continue;
       }
-      Object[] nextNode = (Object[]) child;
       if (findPathToArtifact(target, nextNode, path, seen)) {
         path.add(createInternal(nextNode));
         return true;
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
index 4ac6584..5c325c9 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSet.java
@@ -211,8 +211,7 @@
           approxDepth = Math.max(approxDepth, 1 + subset.getApproxDepth());
           // If this is a deserialization future, this call blocks.
           Object c = subset.getChildrenInternal(interruptStrategy);
-          if (c instanceof Object[]) {
-            Object[] a = (Object[]) c;
+          if (c instanceof Object[] a) {
             if (a.length < 2) {
               throw new AssertionError(a.length);
             }
@@ -815,10 +814,9 @@
   public NestedSet<E> splitIfExceedsMaximumSize(int maxDegree) {
     Preconditions.checkArgument(maxDegree >= 2, "maxDegree must be at least 2");
     Object children = getChildren(); // may wait for a future
-    if (!(children instanceof Object[])) {
+    if (!(children instanceof Object[] succs)) {
       return this;
     }
-    Object[] succs = (Object[]) children;
     int nsuccs = succs.length;
     if (nsuccs <= maxDegree) {
       return this;
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 291b0f1..9ca9a38 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
@@ -110,9 +110,8 @@
   }
 
   private static void verifyStructure(Object lhs, Object rhs) {
-    if (lhs instanceof Object[]) {
+    if (lhs instanceof Object[] lhsArray) {
       assertThat(rhs).isInstanceOf(Object[].class);
-      Object[] lhsArray = (Object[]) lhs;
       Object[] rhsArray = (Object[]) rhs;
       int n = lhsArray.length;
       assertThat(rhsArray).hasLength(n);
diff --git a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java
index 7063197..2bc89a1 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/nestedset/NestedSetCodecWithStore.java
@@ -191,12 +191,11 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof EqualsWrapper)) {
+      if (!(obj instanceof EqualsWrapper that)) {
         return false;
       }
 
       // Both sets contain Object[] or both sets contain ListenableFuture<Object[]>
-      EqualsWrapper that = (EqualsWrapper) obj;
       if (this.order.equals(that.order) && this.children.equals(that.children)) {
         return true;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
index 34697bf..c9d8a28 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/local/LocalSpawnRunner.java
@@ -354,8 +354,7 @@
       List<RunfilesTree> runfilesTrees = new ArrayList<>();
 
       for (ActionInput input : spawn.getInputFiles().toList()) {
-        if (input instanceof VirtualActionInput) {
-          VirtualActionInput virtualActionInput = (VirtualActionInput) input;
+        if (input instanceof VirtualActionInput virtualActionInput) {
           Path outputPath = execRoot.getRelative(virtualActionInput.getExecPath());
           if (outputPath.exists()) {
             outputPath.delete();
diff --git a/src/main/java/com/google/devtools/build/lib/includescanning/IncludeParser.java b/src/main/java/com/google/devtools/build/lib/includescanning/IncludeParser.java
index 9328e93..01a2a40 100644
--- a/src/main/java/com/google/devtools/build/lib/includescanning/IncludeParser.java
+++ b/src/main/java/com/google/devtools/build/lib/includescanning/IncludeParser.java
@@ -543,10 +543,9 @@
       if (o == this) {
         return true;
       }
-      if (!(o instanceof Inclusion)) {
+      if (!(o instanceof Inclusion that)) {
         return false;
       }
-      Inclusion that = (Inclusion) o;
       return kind == that.kind && pathFragment.equals(that.pathFragment);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/includescanning/IncludeScannerSupplier.java b/src/main/java/com/google/devtools/build/lib/includescanning/IncludeScannerSupplier.java
index d9ec0a0..fbc245a 100644
--- a/src/main/java/com/google/devtools/build/lib/includescanning/IncludeScannerSupplier.java
+++ b/src/main/java/com/google/devtools/build/lib/includescanning/IncludeScannerSupplier.java
@@ -62,10 +62,9 @@
       if (this == other) {
         return true;
       }
-      if (!(other instanceof IncludeScannerParams)) {
+      if (!(other instanceof IncludeScannerParams that)) {
         return false;
       }
-      IncludeScannerParams that = (IncludeScannerParams) other;
       return this.quoteIncludePaths.equals(that.quoteIncludePaths)
           && this.includePaths.equals(that.includePaths)
           && this.frameworkIncludePaths.equals(that.frameworkIncludePaths);
diff --git a/src/main/java/com/google/devtools/build/lib/includescanning/InclusionWithContext.java b/src/main/java/com/google/devtools/build/lib/includescanning/InclusionWithContext.java
index 2d3c735..336b58d 100644
--- a/src/main/java/com/google/devtools/build/lib/includescanning/InclusionWithContext.java
+++ b/src/main/java/com/google/devtools/build/lib/includescanning/InclusionWithContext.java
@@ -101,10 +101,9 @@
     if (o == this) {
       return true;
     }
-    if (!(o instanceof InclusionWithContext)) {
+    if (!(o instanceof InclusionWithContext that)) {
       return false;
     }
-    InclusionWithContext that = (InclusionWithContext) o;
     return Objects.equals(this.inclusion, that.inclusion)
         && (!this.inclusion.kind.isNext() || this.contextPathPos == that.contextPathPos)
         && this.contextKind == that.contextKind;
diff --git a/src/main/java/com/google/devtools/build/lib/includescanning/LegacyIncludeScanner.java b/src/main/java/com/google/devtools/build/lib/includescanning/LegacyIncludeScanner.java
index 90c1b95..7b787a6 100644
--- a/src/main/java/com/google/devtools/build/lib/includescanning/LegacyIncludeScanner.java
+++ b/src/main/java/com/google/devtools/build/lib/includescanning/LegacyIncludeScanner.java
@@ -93,10 +93,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof ArtifactWithInclusionContext)) {
+      if (!(obj instanceof ArtifactWithInclusionContext that)) {
         return false;
       }
-      ArtifactWithInclusionContext that = (ArtifactWithInclusionContext) obj;
       return this.contextKind == that.contextKind
           && this.contextPathPos == that.contextPathPos
           && this.artifact.equals(that.artifact);
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java b/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
index b3ab937..cb4a4d2 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/FilteringPolicies.java
@@ -161,10 +161,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof AndFilteringPolicy)) {
+      if (!(obj instanceof AndFilteringPolicy other)) {
         return false;
       }
-      AndFilteringPolicy other = (AndFilteringPolicy) obj;
       return other.firstPolicy.equals(firstPolicy) && other.secondPolicy.equals(secondPolicy);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
index 242e5e5..9a3818c 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PathPackageLocator.java
@@ -267,10 +267,9 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof PathPackageLocator)) {
+    if (!(other instanceof PathPackageLocator pathPackageLocator)) {
       return false;
     }
-    PathPackageLocator pathPackageLocator = (PathPackageLocator) other;
     return Objects.equals(pathEntries, pathPackageLocator.pathEntries)
         && Objects.equals(outputBase, pathPackageLocator.outputBase);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
index ac15341..58f10d8 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TestFilter.java
@@ -97,10 +97,9 @@
     if (o == this) {
       return true;
     }
-    if (!(o instanceof TestFilter)) {
+    if (!(o instanceof TestFilter f)) {
       return false;
     }
-    TestFilter f = (TestFilter) o;
     return f.testSizeFilterSet.equals(testSizeFilterSet)
         && f.testTimeoutFilterSet.equals(testTimeoutFilterSet)
         && f.testTagFilterList.equals(testTagFilterList)
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/JsonTraceFileWriter.java b/src/main/java/com/google/devtools/build/lib/profiler/JsonTraceFileWriter.java
index d9c15f8..cdb3c12 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/JsonTraceFileWriter.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/JsonTraceFileWriter.java
@@ -201,9 +201,8 @@
 
           if (slimProfile
               && eventCount > SLIM_PROFILE_EVENT_THRESHOLD
-              && data instanceof TaskData
+              && data instanceof TaskData taskData
               && isCandidateForMerging((TaskData) data)) {
-            TaskData taskData = (TaskData) data;
             eventsPerThread.putIfAbsent(taskData.threadId, new MergedEvent());
             TaskData mergedTaskData = eventsPerThread.get(taskData.threadId).maybeMerge(taskData);
             if (mergedTaskData != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java b/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
index 9954753..1ba954c 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/Profiler.java
@@ -194,8 +194,7 @@
       }
       jsonWriter.name("pid").value(1);
 
-      if (this instanceof ActionTaskData) {
-        ActionTaskData actionTaskData = (ActionTaskData) this;
+      if (this instanceof ActionTaskData actionTaskData) {
         if (actionTaskData.primaryOutputPath != null) {
           // Primary outputs are non-mergeable, thus incompatible with slim profiles.
           jsonWriter.name("out").value(actionTaskData.primaryOutputPath);
@@ -909,7 +908,7 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof ProfilerTaskType)) {
+      if (!(obj instanceof ProfilerTaskType that)) {
         return false;
       }
 
@@ -917,7 +916,6 @@
         return true;
       }
 
-      var that = (ProfilerTaskType) obj;
       return Objects.equals(this.format, that.format);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
index 1034dc9..7a4d87e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ParallelSkyQueryUtils.java
@@ -182,10 +182,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof DepAndRdep)) {
+      if (!(obj instanceof DepAndRdep other)) {
         return false;
       }
-      DepAndRdep other = (DepAndRdep) obj;
       return Objects.equals(dep, other.dep) && rdep.equals(other.rdep);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java
index fe9eeb6..139ed09 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/RBuildFilesFunction.java
@@ -65,13 +65,12 @@
       QueryExpression expression,
       List<Argument> args,
       Callback<T> callback) {
-    if (!(env instanceof SkyQueryEnvironment)) {
+    if (!(env instanceof SkyQueryEnvironment skyEnv)) {
       return env.immediateFailedFuture(
           new QueryException(
               "rbuildfiles can only be used with SkyQueryEnvironment",
               Query.Code.RBUILDFILES_FUNCTION_REQUIRES_SKYQUERY));
     }
-    SkyQueryEnvironment skyEnv = ((SkyQueryEnvironment) env);
     return skyEnv.getRBuildFiles(
         args.stream()
             .map(argument -> PathFragment.create(argument.getWord()))
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
index 61cb5fc..c177995 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphTextOutputFormatterCallback.java
@@ -113,8 +113,8 @@
 
   private void writeAction(ActionAnalysisMetadata action, PrintStream printStream)
       throws IOException, CommandLineExpansionException, InterruptedException, EvalException {
-    if (options.includeParamFiles && action instanceof ParameterFileWriteAction) {
-      ParameterFileWriteAction parameterFileWriteAction = (ParameterFileWriteAction) action;
+    if (options.includeParamFiles
+        && action instanceof ParameterFileWriteAction parameterFileWriteAction) {
 
       String fileContent = String.join(" \\\n    ", parameterFileWriteAction.getArguments());
       String paramFileName = action.getPrimaryOutput().getExecPathString();
@@ -191,8 +191,7 @@
       }
     }
 
-    if (action instanceof ActionExecutionMetadata) {
-      ActionExecutionMetadata actionExecutionMetadata = (ActionExecutionMetadata) action;
+    if (action instanceof ActionExecutionMetadata actionExecutionMetadata) {
       stringBuilder
           .append("  ActionKey: ")
           .append(actionExecutionMetadata.getKey(actionKeyContext, /*artifactExpander=*/ null))
@@ -234,8 +233,7 @@
           .append("]\n");
     }
 
-    if (action instanceof AbstractAction) {
-      AbstractAction abstractAction = (AbstractAction) action;
+    if (action instanceof AbstractAction abstractAction) {
       // TODO(twerth): This handles the fixed environment. We probably want to output the inherited
       // environment as well.
       Iterable<Map.Entry<String, String>> fixedEnvironment =
@@ -309,8 +307,7 @@
           .append("}\n");
     }
 
-    if (action instanceof TemplateExpansionAction) {
-      TemplateExpansionAction templateExpansionAction = (TemplateExpansionAction) action;
+    if (action instanceof TemplateExpansionAction templateExpansionAction) {
       stringBuilder
           .append("  Template: ")
           .append(AqueryUtils.getTemplateContent(templateExpansionAction))
@@ -328,9 +325,7 @@
       stringBuilder.append("  ]\n");
     }
 
-    if (action instanceof AbstractFileWriteAction.FileContentsProvider) {
-      AbstractFileWriteAction.FileContentsProvider fileAction =
-          (AbstractFileWriteAction.FileContentsProvider) action;
+    if (action instanceof AbstractFileWriteAction.FileContentsProvider fileAction) {
       stringBuilder.append(String.format("  IsExecutable: %b\n", fileAction.makeExecutable()));
       if (options.includeFileWriteContents) {
         String contents = fileAction.getFileContents(eventHandler);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
index 7197d6c..9de95f3 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/compat/FakeLoadTarget.java
@@ -101,10 +101,9 @@
 
   @Override
   public boolean equals(Object obj) {
-    if (!(obj instanceof FakeLoadTarget)) {
+    if (!(obj instanceof FakeLoadTarget other)) {
       return false;
     }
-    FakeLoadTarget other = (FakeLoadTarget) obj;
     return label.equals(other.label) && pkg.equals(other.pkg);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
index eafe800..ced31ea 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/FilesOutputFormatterCallback.java
@@ -54,13 +54,12 @@
   public void processOutput(Iterable<CqueryNode> partialResult)
       throws IOException, InterruptedException {
     for (CqueryNode target : partialResult) {
-      if (!(target instanceof ConfiguredTarget)
+      if (!(target instanceof ConfiguredTarget cf)
           || (!TopLevelArtifactHelper.shouldConsiderForDisplay(target)
               && !(target instanceof InputFileConfiguredTarget))) {
         continue;
       }
 
-      var cf = (ConfiguredTarget) target;
       TopLevelArtifactHelper.getAllArtifactsToBuild(cf, topLevelArtifactContext)
           .getImportantArtifacts()
           .toList()
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
index 2a8fde3..14196cb 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
@@ -61,8 +61,7 @@
     OptionalInt maxDepth =
         args.size() == 1 ? OptionalInt.empty() : OptionalInt.of(args.get(1).getInteger());
     QueryExpression argumentExpression = args.get(0).getExpression();
-    if (env instanceof StreamableQueryEnvironment) {
-      StreamableQueryEnvironment<T> streamableEnv = (StreamableQueryEnvironment<T>) env;
+    if (env instanceof StreamableQueryEnvironment<T> streamableEnv) {
       return maxDepth.isPresent()
           ? streamableEnv.getAllRdepsBoundedParallel(
               argumentExpression, maxDepth.getAsInt(), context, callback)
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
index 9533492..7a54073 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
@@ -63,8 +63,7 @@
         args.size() == 2 ? OptionalInt.empty() : OptionalInt.of(args.get(2).getInteger());
     QueryExpression universeExpression = args.get(0).getExpression();
     QueryExpression argumentExpression = args.get(1).getExpression();
-    if (env instanceof StreamableQueryEnvironment) {
-      StreamableQueryEnvironment<T> streamableEnv = (StreamableQueryEnvironment<T>) env;
+    if (env instanceof StreamableQueryEnvironment<T> streamableEnv) {
       return depth.isPresent()
           ? streamableEnv.getRdepsBoundedParallel(
               argumentExpression, depth.getAsInt(), universeExpression, context, callback)
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
index 8a65277..3b8edbe 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeQueryEnvironment.java
@@ -191,13 +191,11 @@
       // a wildcard such as p:* are correctly ordered w.r.t. each other, so to
       // ensure this, we add edges between any pair of directly connected
       // targets in this set.
-      if (target instanceof OutputFile) {
-        OutputFile outputFile = (OutputFile) target;
+      if (target instanceof OutputFile outputFile) {
         if (targets.contains(outputFile.getGeneratingRule())) {
           makeEdge(outputFile, outputFile.getGeneratingRule());
         }
-      } else if (target instanceof Rule) {
-        Rule rule = (Rule) target;
+      } else if (target instanceof Rule rule) {
         for (Label label : rule.getSortedLabels(dependencyFilter)) {
           if (!packages.contains(label.getPackageIdentifier())) {
             continue; // don't cause additional package loading
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeTargetAccessor.java
index 4bdbeb4..7d475ca 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/BlazeTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/BlazeTargetAccessor.java
@@ -151,9 +151,7 @@
     }
     if (ruleVisibility.equals(RuleVisibility.PUBLIC)) {
       packageSpecifications.add(QueryVisibility.everything());
-    } else if (ruleVisibility instanceof PackageGroupsRuleVisibility) {
-      PackageGroupsRuleVisibility packageGroupsVisibility =
-          (PackageGroupsRuleVisibility) ruleVisibility;
+    } else if (ruleVisibility instanceof PackageGroupsRuleVisibility packageGroupsVisibility) {
       for (Label groupLabel : packageGroupsVisibility.getPackageGroups()) {
         try {
           maybeConvertGroupVisibility(groupLabel, packageSpecifications);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/LabelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/query/LabelVisitor.java
index cf75aad..7d59727 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/LabelVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/LabelVisitor.java
@@ -355,11 +355,9 @@
       // of *different* attributes. These visitations get culled later, but we still have to pay the
       // overhead for all that.
 
-      if (!(from instanceof Rule) || !(to instanceof Rule)) {
+      if (!(from instanceof Rule fromRule) || !(to instanceof Rule toRule)) {
         return;
       }
-      Rule fromRule = (Rule) from;
-      Rule toRule = (Rule) to;
       for (Aspect aspect : attribute.getAspects(fromRule)) {
         if (AspectDefinition.satisfies(
             aspect, toRule.getRuleClassObject().getAdvertisedProviders())) {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/PathLabelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/query/PathLabelVisitor.java
index aaf0c40..7e30580 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/PathLabelVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/PathLabelVisitor.java
@@ -328,11 +328,9 @@
       // of *different* attributes. These visitations get culled later, but we still have to pay the
       // overhead for all that.
 
-      if (!(from instanceof Rule) || !(to instanceof Rule)) {
+      if (!(from instanceof Rule fromRule) || !(to instanceof Rule toRule)) {
         return;
       }
-      Rule fromRule = (Rule) from;
-      Rule toRule = (Rule) to;
       for (Aspect aspect : attribute.getAspects(fromRule)) {
         if (AspectDefinition.satisfies(
             aspect, toRule.getRuleClassObject().getAdvertisedProviders())) {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/ConservativeAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/ConservativeAspectResolver.java
index 2d227c6..087ef9d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/ConservativeAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/ConservativeAspectResolver.java
@@ -36,10 +36,9 @@
   @Override
   public ImmutableMap<Aspect, ImmutableMultimap<Attribute, Label>> computeAspectDependencies(
       Target target, DependencyFilter dependencyFilter) {
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return ImmutableMap.of();
     }
-    Rule rule = (Rule) target;
     if (!rule.hasAspects()) {
       return ImmutableMap.of();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/PreciseAspectResolver.java b/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/PreciseAspectResolver.java
index 0f538be..3f660cf 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/PreciseAspectResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/aspectresolvers/PreciseAspectResolver.java
@@ -53,10 +53,9 @@
   @Override
   public ImmutableMap<Aspect, ImmutableMultimap<Attribute, Label>> computeAspectDependencies(
       Target target, DependencyFilter dependencyFilter) throws InterruptedException {
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return ImmutableMap.of();
     }
-    Rule rule = (Rule) target;
     if (!rule.hasAspects()) {
       return ImmutableMap.of();
     }
@@ -114,12 +113,11 @@
     // Iterate over all rules...
     for (Target target : pkg.getTargets().values()) {
 
-      if (!(target instanceof Rule)) {
+      if (!(target instanceof Rule rule)) {
         continue;
       }
 
       // ...figure out which direct dependencies can possibly have aspects attached to them...
-      Rule rule = (Rule) target;
       Multimap<Attribute, Label> depsWithPossibleAspects =
           rule.getTransitions(
               (infoProvider, attribute) -> {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/ConditionalEdges.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/ConditionalEdges.java
index 9e5eb66..3bde3d9 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/ConditionalEdges.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/ConditionalEdges.java
@@ -133,8 +133,7 @@
         }
         selector.forEach(
             (key, value) -> {
-              if (value instanceof List<?>) {
-                List<?> deps = (List<?>) value;
+              if (value instanceof List<?> deps) {
                 for (Object dep : deps) {
                   if (dep instanceof Label) {
                     conditions.put((Label) dep, key);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
index 243b266..5eb7ece 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/ProtoOutputFormatter.java
@@ -180,8 +180,7 @@
       throws InterruptedException {
     Build.Target.Builder targetPb = Build.Target.newBuilder();
 
-    if (target instanceof Rule) {
-      Rule rule = (Rule) target;
+    if (target instanceof Rule rule) {
       Build.Rule.Builder rulePb =
           Build.Rule.newBuilder()
               .setName(labelPrinter.toString(rule.getLabel()))
@@ -274,8 +273,7 @@
       }
       targetPb.setType(RULE);
       targetPb.setRule(rulePb);
-    } else if (target instanceof OutputFile) {
-      OutputFile outputFile = (OutputFile) target;
+    } else if (target instanceof OutputFile outputFile) {
       Label label = outputFile.getLabel();
 
       Rule generatingRule = outputFile.getGeneratingRule();
@@ -289,8 +287,7 @@
       }
       targetPb.setType(GENERATED_FILE);
       targetPb.setGeneratedFile(output.build());
-    } else if (target instanceof InputFile) {
-      InputFile inputFile = (InputFile) target;
+    } else if (target instanceof InputFile inputFile) {
       Label label = inputFile.getLabel();
 
       Build.SourceFile.Builder input =
@@ -336,8 +333,7 @@
       }
       targetPb.setType(SOURCE_FILE);
       targetPb.setSourceFile(input.build());
-    } else if (target instanceof PackageGroup) {
-      PackageGroup packageGroup = (PackageGroup) target;
+    } else if (target instanceof PackageGroup packageGroup) {
       Build.PackageGroup.Builder packageGroupPb =
           Build.PackageGroup.newBuilder().setName(labelPrinter.toString(packageGroup.getLabel()));
       for (String containedPackage :
@@ -350,8 +346,7 @@
 
       targetPb.setType(PACKAGE_GROUP);
       targetPb.setPackageGroup(packageGroupPb);
-    } else if (target instanceof EnvironmentGroup) {
-      EnvironmentGroup envGroup = (EnvironmentGroup) target;
+    } else if (target instanceof EnvironmentGroup envGroup) {
       Build.EnvironmentGroup.Builder envGroupPb =
           Build.EnvironmentGroup.newBuilder().setName(labelPrinter.toString(envGroup.getLabel()));
       for (Label env : envGroup.getEnvironments()) {
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/SyntheticAttributeHashCalculator.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/SyntheticAttributeHashCalculator.java
index 9de70de..7de7afe 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/SyntheticAttributeHashCalculator.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/SyntheticAttributeHashCalculator.java
@@ -84,9 +84,8 @@
 
       Object valueToHash = rawAttributeMapper.getRawAttributeValue(rule, attr);
 
-      if (valueToHash instanceof ComputedDefault) {
+      if (valueToHash instanceof ComputedDefault computedDefault) {
         // ConfiguredDefaults need special handling to detect changes in evaluated values.
-        ComputedDefault computedDefault = (ComputedDefault) valueToHash;
         if (!computedDefault.dependencies().isEmpty()) {
           // TODO(b/29038463): We're skipping computed defaults that depend on other configurable
           // attributes because there currently isn't a way to evaluate such a computed default;
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/XmlOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/XmlOutputFormatter.java
index 83dcd8b..8427830 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/XmlOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/XmlOutputFormatter.java
@@ -149,8 +149,7 @@
   private Element createTargetElement(Document doc, Target target, LabelPrinter labelPrinter)
       throws InterruptedException {
     Element elem;
-    if (target instanceof Rule) {
-      Rule rule = (Rule) target;
+    if (target instanceof Rule rule) {
       elem = doc.createElement("rule");
       elem.setAttribute("class", rule.getRuleClass());
       for (Attribute attr : rule.getAttributes()) {
@@ -195,8 +194,7 @@
         outputElem.setAttribute("name", feature);
         elem.appendChild(outputElem);
       }
-    } else if (target instanceof PackageGroup) {
-      PackageGroup packageGroup = (PackageGroup) target;
+    } else if (target instanceof PackageGroup packageGroup) {
       elem = doc.createElement("package-group");
       elem.setAttribute("name", packageGroup.getName());
       Element includes =
@@ -211,14 +209,12 @@
               labelPrinter);
       packages.setAttribute("name", "packages");
       elem.appendChild(packages);
-    } else if (target instanceof OutputFile) {
-      OutputFile outputFile = (OutputFile) target;
+    } else if (target instanceof OutputFile outputFile) {
       elem = doc.createElement("generated-file");
       elem.setAttribute(
           "generating-rule", labelPrinter.toString(outputFile.getGeneratingRule().getLabel()));
-    } else if (target instanceof InputFile) {
+    } else if (target instanceof InputFile inputFile) {
       elem = doc.createElement("source-file");
-      InputFile inputFile = (InputFile) target;
       if (inputFile.getName().equals("BUILD")) {
         addStarlarkFilesToElement(doc, elem, inputFile, labelPrinter);
         addFeaturesToElement(doc, elem, inputFile);
@@ -227,8 +223,7 @@
       }
 
       addPackageGroupsToElement(doc, elem, inputFile, labelPrinter);
-    } else if (target instanceof EnvironmentGroup) {
-      EnvironmentGroup envGroup = (EnvironmentGroup) target;
+    } else if (target instanceof EnvironmentGroup envGroup) {
       elem = doc.createElement("environment-group");
       elem.setAttribute("name", envGroup.getName());
       Element environments =
@@ -318,10 +313,9 @@
           elem.appendChild(createValueElement(doc, elemType, elemValue, labelPrinter));
         }
       }
-    } else if (type instanceof Type.DictType) {
+    } else if (type instanceof Type.DictType<?, ?> dictType) {
       Set<Object> visitedValues = new HashSet<>();
       elem = doc.createElement("dict");
-      Type.DictType<?, ?> dictType = (Type.DictType<?, ?>) type;
       for (Object value : values) {
         for (Map.Entry<?, ?> entry : ((Map<?, ?>) value).entrySet()) {
           if (visitedValues.add(entry.getKey())) {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java b/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java
index 95aed14..1b8866c 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/AbstractActionInputPrefetcher.java
@@ -385,10 +385,9 @@
   private PathFragment maybeGetTreeRoot(
       ActionExecutionMetadata action, ActionInput input, MetadataSupplier metadataSupplier)
       throws IOException, InterruptedException {
-    if (!(input instanceof TreeFileArtifact)) {
+    if (!(input instanceof TreeFileArtifact treeFile)) {
       return null;
     }
-    TreeFileArtifact treeFile = (TreeFileArtifact) input;
     SpecialArtifact treeArtifact = treeFile.getParent();
     FileArtifactValue treeMetadata = metadataSupplier.getMetadata(treeArtifact);
     if (treeMetadata == null) {
@@ -420,8 +419,7 @@
       FileArtifactValue metadata,
       MetadataSupplier metadataSupplier)
       throws IOException, InterruptedException {
-    if (input instanceof TreeFileArtifact) {
-      TreeFileArtifact treeFile = (TreeFileArtifact) input;
+    if (input instanceof TreeFileArtifact treeFile) {
       SpecialArtifact treeArtifact = treeFile.getParent();
       FileArtifactValue treeMetadata = metadataSupplier.getMetadata(treeArtifact);
       if (treeMetadata == null) {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/Chunker.java b/src/main/java/com/google/devtools/build/lib/remote/Chunker.java
index 1c122f6..295656b 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/Chunker.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/Chunker.java
@@ -88,10 +88,9 @@
       if (o == this) {
         return true;
       }
-      if (!(o instanceof Chunk)) {
+      if (!(o instanceof Chunk other)) {
         return false;
       }
-      Chunk other = (Chunk) o;
       return other.offset == offset && other.data.equals(data);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionFileSystem.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionFileSystem.java
index 4ee6398..c8f44b4 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteActionFileSystem.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteActionFileSystem.java
@@ -931,11 +931,10 @@
       InMemoryContentInfo node = getOrCreateWritableInode(path);
       // If a node was already existed and is not a remote file node (i.e. directory or symlink node
       // ), throw an error.
-      if (!(node instanceof RemoteInMemoryFileInfo)) {
+      if (!(node instanceof RemoteInMemoryFileInfo remoteInMemoryFileInfo)) {
         throw new IOException("Could not inject into " + node);
       }
 
-      RemoteInMemoryFileInfo remoteInMemoryFileInfo = (RemoteInMemoryFileInfo) node;
       remoteInMemoryFileInfo.set(metadata);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
index 36f9729..4fb54a1 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteCache.java
@@ -370,11 +370,9 @@
 
           @Override
           public void onFailure(Throwable throwable) {
-            if (throwable instanceof CacheNotFoundException) {
-              var cacheNotFoundException = (CacheNotFoundException) throwable;
+            if (throwable instanceof CacheNotFoundException cacheNotFoundException) {
               cacheNotFoundException.setFilename(outputPath);
-            } else if (throwable instanceof OutputDigestMismatchException) {
-              OutputDigestMismatchException e = ((OutputDigestMismatchException) throwable);
+            } else if (throwable instanceof OutputDigestMismatchException e) {
               e.setOutputPath(outputPath);
               e.setLocalPath(localPath);
             }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
index f9f7603..cbc029e 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionCache.java
@@ -80,8 +80,7 @@
         public boolean isRemote(RemoteActionExecutionContext context, Path path)
             throws IOException {
           var fs = path.getFileSystem();
-          if (fs instanceof RemoteActionFileSystem) {
-            var remoteActionFileSystem = (RemoteActionFileSystem) fs;
+          if (fs instanceof RemoteActionFileSystem remoteActionFileSystem) {
             if (remoteActionFileSystem.isRemote(path)) {
               if (context.getReadCachePolicy().allowDiskCache()) {
                 try (var inputStream = path.getInputStream()) {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionService.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionService.java
index b33a3e7..5aee1e2 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionService.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteExecutionService.java
@@ -750,11 +750,10 @@
 
     @Override
     public boolean equals(Object object) {
-      if (!(object instanceof RemoteActionResult)) {
+      if (!(object instanceof RemoteActionResult that)) {
         return false;
       }
 
-      RemoteActionResult that = (RemoteActionResult) object;
       return Objects.equals(actionResult, that.actionResult)
           && Objects.equals(executeResponse, that.executeResponse);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
index b8b117c..a890127 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteModule.java
@@ -857,11 +857,10 @@
       ByteStreamBuildEventArtifactUploader uploader, ConfiguredTarget configuredTarget) {
     // This will either dereference an alias chain, or return the final ConfiguredTarget.
     ConfiguredTarget actualConfiguredTarget = configuredTarget.getActual();
-    if (!(actualConfiguredTarget instanceof RuleConfiguredTarget)) {
+    if (!(actualConfiguredTarget instanceof RuleConfiguredTarget ruleConfiguredTarget)) {
       return;
     }
 
-    RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) actualConfiguredTarget;
     for (ActionAnalysisMetadata action : ruleConfiguredTarget.getActions()) {
       boolean uploadLocalResults =
           Utils.shouldUploadLocalResultsToRemoteCache(remoteOptions, action.getExecutionInfo());
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteOutputChecker.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteOutputChecker.java
index 8cd47d2..ada232a 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteOutputChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteOutputChecker.java
@@ -238,8 +238,7 @@
       case COVERAGE:
       case TEST:
         // Do not download test binary in test/coverage mode.
-        if (configuredTarget instanceof RuleConfiguredTarget) {
-          var ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget;
+        if (configuredTarget instanceof RuleConfiguredTarget ruleConfiguredTarget) {
           var isTestRule = isTestRuleName(ruleConfiguredTarget.getRuleClassString());
           return !isTestRule && outputsMode != RemoteOutputsMode.MINIMAL;
         }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
index 454d560..536dbf0 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteSpawnRunner.java
@@ -503,8 +503,7 @@
       return;
     }
     for (ActionInput actionInput : spawn.getInputFiles().toList()) {
-      if (actionInput instanceof ParamFileActionInput) {
-        ParamFileActionInput paramFileActionInput = (ParamFileActionInput) actionInput;
+      if (actionInput instanceof ParamFileActionInput paramFileActionInput) {
         paramFileActionInput.atomicallyWriteRelativeTo(execRoot, ".remote");
       }
     }
@@ -560,8 +559,7 @@
       RemoteAction action, IOException exception, SpawnExecutionContext context)
       throws ExecException, InterruptedException, IOException {
     boolean remoteCacheFailed = BulkTransferException.allCausedByCacheNotFoundException(exception);
-    if (exception.getCause() instanceof ExecutionStatusException) {
-      ExecutionStatusException e = (ExecutionStatusException) exception.getCause();
+    if (exception.getCause() instanceof ExecutionStatusException e) {
       RemoteActionResult result = null;
       if (e.getResponse() != null) {
         ExecuteResponse resp = e.getResponse();
@@ -630,8 +628,7 @@
 
     String errorMessage = Utils.grpcAwareErrorMessage(exception, verboseFailures);
 
-    if (exception.getCause() instanceof ExecutionStatusException) {
-      ExecutionStatusException e = (ExecutionStatusException) exception.getCause();
+    if (exception.getCause() instanceof ExecutionStatusException e) {
       if (e.getResponse() != null) {
         if (!e.getResponse().getMessage().isEmpty()) {
           errorMessage += "\n" + e.getResponse().getMessage();
diff --git a/src/main/java/com/google/devtools/build/lib/remote/common/RemoteCacheClient.java b/src/main/java/com/google/devtools/build/lib/remote/common/RemoteCacheClient.java
index f2a4c59..7ea79ac 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/common/RemoteCacheClient.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/common/RemoteCacheClient.java
@@ -58,11 +58,10 @@
 
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ActionKey)) {
+      if (!(other instanceof ActionKey otherKey)) {
         return false;
       }
 
-      ActionKey otherKey = (ActionKey) other;
       return digest.equals(otherKey.digest);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/remote/http/HttpDownloadHandler.java b/src/main/java/com/google/devtools/build/lib/remote/http/HttpDownloadHandler.java
index a6ecc0c..5b5b401 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/http/HttpDownloadHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/http/HttpDownloadHandler.java
@@ -143,13 +143,12 @@
       throws Exception {
     checkState(userPromise == null, "handler can't be shared between pipelines.");
     userPromise = promise;
-    if (!(msg instanceof DownloadCommand)) {
+    if (!(msg instanceof DownloadCommand cmd)) {
       failAndResetUserPromise(
           new IllegalArgumentException(
               "Unsupported message type: " + StringUtil.simpleClassName(msg)));
       return;
     }
-    DownloadCommand cmd = (DownloadCommand) msg;
     out = cmd.out();
     path = constructPath(cmd.uri(), cmd.digest().getHash(), cmd.casDownload());
     skipBytes = cmd.offset();
diff --git a/src/main/java/com/google/devtools/build/lib/remote/http/HttpUploadHandler.java b/src/main/java/com/google/devtools/build/lib/remote/http/HttpUploadHandler.java
index 21e1a1f..56c4596 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/http/HttpUploadHandler.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/http/HttpUploadHandler.java
@@ -90,13 +90,12 @@
       throws Exception {
     checkState(userPromise == null, "handler can't be shared between pipelines.");
     userPromise = promise;
-    if (!(msg instanceof UploadCommand)) {
+    if (!(msg instanceof UploadCommand cmd)) {
       failAndResetUserPromise(
           new IllegalArgumentException(
               "Unsupported message type: " + StringUtil.simpleClassName(msg)));
       return;
     }
-    UploadCommand cmd = (UploadCommand) msg;
     path = constructPath(cmd.uri(), cmd.hash(), cmd.casUpload());
     contentLength = cmd.contentLength();
     HttpRequest request = buildRequest(path, constructHost(cmd.uri()), contentLength);
diff --git a/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTree.java b/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTree.java
index d695e51..cd3862e 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTree.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTree.java
@@ -64,8 +64,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof Node) {
-        Node other = (Node) o;
+      if (o instanceof Node other) {
         return Objects.equals(pathSegment, other.pathSegment);
       }
       return false;
@@ -152,8 +151,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof FileNode) {
-        FileNode other = (FileNode) o;
+      if (o instanceof FileNode other) {
         return super.equals(other)
             && Objects.equals(path, other.path)
             && Objects.equals(data, other.data)
@@ -190,8 +188,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof SymlinkNode) {
-        SymlinkNode other = (SymlinkNode) o;
+      if (o instanceof SymlinkNode other) {
         return super.equals(other) && Objects.equals(target, other.target);
       }
       return false;
@@ -236,8 +233,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof DirectoryNode) {
-        DirectoryNode other = (DirectoryNode) o;
+      if (o instanceof DirectoryNode other) {
         return super.equals(other)
             && Objects.equals(files, other.files)
             && Objects.equals(symlinks, other.symlinks)
@@ -327,10 +323,9 @@
     if (o == this) {
       return true;
     }
-    if (!(o instanceof DirectoryTree)) {
+    if (!(o instanceof DirectoryTree other)) {
       return false;
     }
-    DirectoryTree other = (DirectoryTree) o;
     return tree.equals(other.tree);
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTreeBuilder.java b/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTreeBuilder.java
index 138eb43..26c2960 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTreeBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/merkletree/DirectoryTreeBuilder.java
@@ -152,8 +152,7 @@
         tree,
         spawnScrubber,
         (input, path, currDir) -> {
-          if (input instanceof VirtualActionInput) {
-            VirtualActionInput virtualActionInput = (VirtualActionInput) input;
+          if (input instanceof VirtualActionInput virtualActionInput) {
             Digest d = digestUtil.compute(virtualActionInput);
             boolean childAdded =
                 currDir.addChild(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
index 22b0574..ca26174 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryAarInfo.java
@@ -99,11 +99,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!(object instanceof AndroidLibraryAarInfo)) {
+    if (!(object instanceof AndroidLibraryAarInfo other)) {
       return false;
     }
 
-    AndroidLibraryAarInfo other = (AndroidLibraryAarInfo) object;
     return Objects.equals(aar, other.aar)
         && transitiveAars.equals(other.transitiveAars)
         && transitiveAarArtifacts.equals(other.transitiveAarArtifacts);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
index 6f232b6..426d667 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidManifest.java
@@ -375,12 +375,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!(object instanceof AndroidManifest)) {
+    if (!(object instanceof AndroidManifest other)) {
       return false;
     }
 
-    AndroidManifest other = (AndroidManifest) object;
-
     return manifest.equals(other.manifest)
         && Objects.equals(pkg, other.pkg)
         && exported == other.exported;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
index fd2f6d2..ce19781 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResources.java
@@ -444,11 +444,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!(object instanceof AndroidResources)) {
+    if (!(object instanceof AndroidResources other)) {
       return false;
     }
 
-    AndroidResources other = (AndroidResources) object;
     return resources.equals(other.resources) && resourceRoots.equals(other.resourceRoots);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
index 2905419..65eb1df 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/MergedAndroidResources.java
@@ -202,11 +202,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!super.equals(object) || !(object instanceof MergedAndroidResources)) {
+    if (!super.equals(object) || !(object instanceof MergedAndroidResources other)) {
       return false;
     }
 
-    MergedAndroidResources other = (MergedAndroidResources) object;
     return Objects.equals(mergedResources, other.mergedResources)
         && classJar.equals(other.classJar)
         && Objects.equals(aapt2RTxt, other.aapt2RTxt)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
index 02bb261..ec4a0a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ParsedAndroidResources.java
@@ -145,11 +145,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!super.equals(object) || !(object instanceof ParsedAndroidResources)) {
+    if (!super.equals(object) || !(object instanceof ParsedAndroidResources other)) {
       return false;
     }
 
-    ParsedAndroidResources other = (ParsedAndroidResources) object;
     return Objects.equals(symbols, other.symbols)
         && Objects.equals(compiledSymbols, other.compiledSymbols)
         && label.equals(other.label)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
index d82f347..b98771d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceApk.java
@@ -264,8 +264,7 @@
   }
 
   AndroidAssetsInfo toAssetsInfo(Label label) {
-    if (primaryAssets instanceof MergedAndroidAssets) {
-      MergedAndroidAssets merged = (MergedAndroidAssets) primaryAssets;
+    if (primaryAssets instanceof MergedAndroidAssets merged) {
       return merged.toProvider();
     }
     return assetDeps.toInfo(label);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
index 95945ab..14abc1e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceFilterFactory.java
@@ -198,11 +198,10 @@
    */
   @Override
   public boolean equals(Object object) {
-    if (!(object instanceof ResourceFilterFactory)) {
+    if (!(object instanceof ResourceFilterFactory other)) {
       return false;
     }
 
-    ResourceFilterFactory other = (ResourceFilterFactory) object;
     return configFilters.equals(other.configFilters) && densities.equals(other.densities);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
index dfc8c59..ed2db85 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/ValidatedAndroidResources.java
@@ -219,11 +219,10 @@
 
   @Override
   public boolean equals(Object object) {
-    if (!super.equals(object) || !(object instanceof ValidatedAndroidResources)) {
+    if (!super.equals(object) || !(object instanceof ValidatedAndroidResources other)) {
       return false;
     }
 
-    ValidatedAndroidResources other = (ValidatedAndroidResources) object;
     return rTxt.equals(other.rTxt)
         && sourceJar.equals(other.sourceJar)
         && apk.equals(other.apk)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
index 2f55cec..bc3d2e8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/AppleConfiguration.java
@@ -457,10 +457,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof AppleConfiguration)) {
+    if (!(obj instanceof AppleConfiguration that)) {
       return false;
     }
-    AppleConfiguration that = (AppleConfiguration) obj;
     return this.options.equals(that.options);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
index 6d866cc..314ea08 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java
@@ -196,10 +196,9 @@
     if (other == null) {
       return false;
     }
-    if (!(other instanceof XcodeVersionProperties)) {
+    if (!(other instanceof XcodeVersionProperties otherData)) {
       return false;
     }
-    XcodeVersionProperties otherData = (XcodeVersionProperties) other;
     return xcodeVersion.equals(otherData.getXcodeVersion())
         && defaultIosSdkVersion.equals(otherData.getDefaultIosSdkVersion())
         && defaultVisionosSdkVersion.equals(otherData.getDefaultVisionosSdkVersion())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
index 911541e..44babde 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionRuleData.java
@@ -88,10 +88,9 @@
     if (other == null) {
       return false;
     }
-    if (!(other instanceof XcodeVersionRuleData)) {
+    if (!(other instanceof XcodeVersionRuleData otherData)) {
       return false;
     }
-    XcodeVersionRuleData otherData = (XcodeVersionRuleData) other;
     return (getVersion().equals(otherData.getVersion())
         && xcodeVersionProperties
             .getXcodeVersion()
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
index c1927db..36b73d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
@@ -128,10 +128,9 @@
 
   @Override
   public boolean equals(Object otherObject) {
-    if (!(otherObject instanceof CcInfo)) {
+    if (!(otherObject instanceof CcInfo other)) {
       return false;
     }
-    CcInfo other = (CcInfo) otherObject;
     if (this == other) {
       return true;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
index ee20b08..1794531 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkingContext.java
@@ -90,10 +90,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof LinkOptions)) {
+      if (!(obj instanceof LinkOptions that)) {
         return false;
       }
-      LinkOptions that = (LinkOptions) obj;
       if (!this.symbolForEquality.equals(that.symbolForEquality)) {
         return false;
       }
@@ -181,10 +180,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof Linkstamp)) {
+      if (!(obj instanceof Linkstamp other)) {
         return false;
       }
-      Linkstamp other = (Linkstamp) obj;
       return artifact.equals(other.artifact) && nestedDigest == other.nestedDigest;
     }
   }
@@ -355,10 +353,9 @@
 
     @Override
     public boolean equals(Object otherObject) {
-      if (!(otherObject instanceof LinkerInput)) {
+      if (!(otherObject instanceof LinkerInput other)) {
         return false;
       }
-      LinkerInput other = (LinkerInput) otherObject;
       if (this == other) {
         return true;
       }
@@ -615,10 +612,9 @@
 
   @Override
   public boolean equals(Object otherObject) {
-    if (!(otherObject instanceof CcLinkingContext)) {
+    if (!(otherObject instanceof CcLinkingContext other)) {
       return false;
     }
-    CcLinkingContext other = (CcLinkingContext) otherObject;
     if (this == other) {
       return true;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
index adb34d2..0c9a00b 100755
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcModule.java
@@ -2633,8 +2633,7 @@
           "Cannot use experimental ExtraLinkTimeLibrary creation API outside of builtins");
     }
     boolean nonGlobalFunc = false;
-    if (buildLibraryFunc instanceof StarlarkFunction) {
-      StarlarkFunction fn = (StarlarkFunction) buildLibraryFunc;
+    if (buildLibraryFunc instanceof StarlarkFunction fn) {
       if (fn.getModule().getGlobal(fn.getName()) != fn) {
         nonGlobalFunc = true;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
index eb5ffeb..d0c2893 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainFeatures.java
@@ -136,8 +136,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof Flag) {
-        Flag that = (Flag) object;
+      if (object instanceof Flag that) {
         return Iterables.elementsEqual(chunks, that.chunks);
       }
       return false;
@@ -268,8 +267,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof EnvEntry) {
-        EnvEntry that = (EnvEntry) object;
+      if (object instanceof EnvEntry that) {
         return Objects.equals(key, that.key)
             && Iterables.elementsEqual(valueChunks, that.valueChunks);
       }
@@ -455,8 +453,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof FlagGroup) {
-        FlagGroup that = (FlagGroup) object;
+      if (object instanceof FlagGroup that) {
         return Iterables.elementsEqual(expandables, that.expandables)
             && Objects.equals(iterateOverVariable, that.iterateOverVariable)
             && Iterables.elementsEqual(expandIfAllAvailable, that.expandIfAllAvailable)
@@ -588,8 +585,7 @@
 
     @Override
     public boolean equals(@Nullable Object object) {
-      if (object instanceof FlagSet) {
-        FlagSet that = (FlagSet) object;
+      if (object instanceof FlagSet that) {
         return Iterables.elementsEqual(actions, that.actions)
             && Iterables.elementsEqual(expandIfAllAvailable, that.expandIfAllAvailable)
             && Iterables.elementsEqual(withFeatureSets, that.withFeatureSets)
@@ -652,8 +648,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof WithFeatureSet) {
-        WithFeatureSet that = (WithFeatureSet) object;
+      if (object instanceof WithFeatureSet that) {
         return Iterables.elementsEqual(features, that.features)
             && Iterables.elementsEqual(notFeatures, that.notFeatures);
       }
@@ -735,8 +730,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof EnvSet) {
-        EnvSet that = (EnvSet) object;
+      if (object instanceof EnvSet that) {
         return Iterables.elementsEqual(actions, that.actions)
             && Iterables.elementsEqual(envEntries, that.envEntries)
             && Iterables.elementsEqual(withFeatureSets, that.withFeatureSets);
@@ -870,8 +864,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof Feature) {
-        Feature that = (Feature) object;
+      if (object instanceof Feature that) {
         return name.equals(that.name)
             && Iterables.elementsEqual(flagSets, that.flagSets)
             && Iterables.elementsEqual(envSets, that.envSets)
@@ -1172,10 +1165,9 @@
       if (other == this) {
         return true;
       }
-      if (!(other instanceof ActionConfig)) {
+      if (!(other instanceof ActionConfig that)) {
         return false;
       }
-      ActionConfig that = (ActionConfig) other;
 
       return Objects.equals(configName, that.configName)
           && Objects.equals(actionName, that.actionName)
@@ -1436,8 +1428,7 @@
       if (object == this) {
         return true;
       }
-      if (object instanceof FeatureConfiguration) {
-        FeatureConfiguration that = (FeatureConfiguration) object;
+      if (object instanceof FeatureConfiguration that) {
         // Only compare actionConfigByActionName, enabledActionConfigActionnames and enabledFeatures
         // because enabledFeatureNames is based on the list of Features.
         return Objects.equals(actionConfigByActionName, that.actionConfigByActionName)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
index 563a0bc..c17919d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainVariables.java
@@ -87,8 +87,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof StringLiteralChunk) {
-        StringLiteralChunk that = (StringLiteralChunk) object;
+      if (object instanceof StringLiteralChunk that) {
         return text.equals(that.text);
       }
       return false;
@@ -128,8 +127,7 @@
       if (this == object) {
         return true;
       }
-      if (object instanceof VariableChunk) {
-        VariableChunk that = (VariableChunk) object;
+      if (object instanceof VariableChunk that) {
         return variableName.equals(that.variableName);
       }
       return false;
@@ -731,13 +729,12 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof LibraryToLinkValue)) {
+      if (!(obj instanceof LibraryToLinkValue other)) {
         return false;
       }
       if (this == obj) {
         return true;
       }
-      LibraryToLinkValue other = (LibraryToLinkValue) obj;
       return this.getTypeName().equals(other.getTypeName())
           && getIsWholeArchive() == other.getIsWholeArchive();
     }
@@ -768,13 +765,12 @@
 
       @Override
       public boolean equals(Object obj) {
-        if (!(obj instanceof LibraryToLinkValueWithName)) {
+        if (!(obj instanceof LibraryToLinkValueWithName other)) {
           return false;
         }
         if (this == obj) {
           return true;
         }
-        LibraryToLinkValueWithName other = (LibraryToLinkValueWithName) obj;
         return this.name.equals(other.name) && super.equals(other);
       }
 
@@ -817,13 +813,12 @@
 
       @Override
       public boolean equals(Object obj) {
-        if (!(obj instanceof ForVersionedDynamicLibrary)) {
+        if (!(obj instanceof ForVersionedDynamicLibrary other)) {
           return false;
         }
         if (this == obj) {
           return true;
         }
-        ForVersionedDynamicLibrary other = (ForVersionedDynamicLibrary) obj;
         return this.path.equals(other.path) && super.equals(other);
       }
 
@@ -935,13 +930,12 @@
 
       @Override
       public boolean equals(Object obj) {
-        if (!(obj instanceof ForObjectFileGroup)) {
+        if (!(obj instanceof ForObjectFileGroup other)) {
           return false;
         }
         if (this == obj) {
           return true;
         }
-        ForObjectFileGroup other = (ForObjectFileGroup) obj;
         return this.objectFiles.equals(other.objectFiles) && super.equals(other);
       }
 
@@ -1480,13 +1474,12 @@
      */
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof MapVariables)) {
+      if (!(other instanceof MapVariables that)) {
         return false;
       }
       if (this == other) {
         return true;
       }
-      MapVariables that = (MapVariables) other;
       if (this.parent != that.parent) {
         return false;
       }
@@ -1532,13 +1525,12 @@
 
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof SingleVariables)) {
+      if (!(other instanceof SingleVariables that)) {
         return false;
       }
       if (this == other) {
         return true;
       }
-      SingleVariables that = (SingleVariables) other;
       if (this.parent != that.parent) {
         return false;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java
index 7d68c3a..539f58b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppModuleMap.java
@@ -93,8 +93,7 @@
     if (this == other) {
       return true;
     }
-    if (other instanceof CppModuleMap) {
-      CppModuleMap that = (CppModuleMap) other;
+    if (other instanceof CppModuleMap that) {
       return artifact.equals(that.artifact)
           && umbrellaHeader.equals(that.umbrellaHeader)
           && name.equals(that.name);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoInputFile.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoInputFile.java
index 94d4f6e..32399bf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoInputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/FdoInputFile.java
@@ -54,11 +54,10 @@
       return true;
     }
 
-    if (!(o instanceof FdoInputFile)) {
+    if (!(o instanceof FdoInputFile that)) {
       return false;
     }
 
-    FdoInputFile that = (FdoInputFile) o;
     return Objects.equals(this.artifact, that.artifact)
         && Objects.equals(this.absolutePath, that.absolutePath);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
index e42a409..85e01cd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LinkerInputs.java
@@ -97,11 +97,10 @@
         return true;
       }
 
-      if (!(that instanceof SimpleLinkerInput)) {
+      if (!(that instanceof SimpleLinkerInput other)) {
         return false;
       }
 
-      SimpleLinkerInput other = (SimpleLinkerInput) that;
       return artifact.equals(other.artifact);
     }
 
@@ -236,11 +235,10 @@
         return true;
       }
 
-      if (!(that instanceof SolibLibraryToLink)) {
+      if (!(that instanceof SolibLibraryToLink thatSolib)) {
         return false;
       }
 
-      SolibLibraryToLink thatSolib = (SolibLibraryToLink) that;
       return solibSymlinkArtifact.equals(thatSolib.solibSymlinkArtifact)
           && libraryArtifact.equals(thatSolib.libraryArtifact);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
index 289a75d..0d43610 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoBackendArtifacts.java
@@ -509,10 +509,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof LtoBackendArtifacts)) {
+    if (!(o instanceof LtoBackendArtifacts that)) {
       return false;
     }
-    LtoBackendArtifacts that = (LtoBackendArtifacts) o;
     return Objects.equals(index, that.index)
         && bitcodeFile.equals(that.bitcodeFile)
         && Objects.equals(imports, that.imports)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/PropellerOptimizeInputFile.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/PropellerOptimizeInputFile.java
index 4a9ad05..ffe73bb 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/PropellerOptimizeInputFile.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/PropellerOptimizeInputFile.java
@@ -57,11 +57,10 @@
       return true;
     }
 
-    if (!(o instanceof PropellerOptimizeInputFile)) {
+    if (!(o instanceof PropellerOptimizeInputFile that)) {
       return false;
     }
 
-    PropellerOptimizeInputFile that = (PropellerOptimizeInputFile) o;
     return Objects.equals(this.ccArtifact, that.ccArtifact)
         && Objects.equals(this.ldArtifact, that.ldArtifact);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/StarlarkDefinedLinkTimeLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/StarlarkDefinedLinkTimeLibrary.java
index 82cdeb4..2ef8f37 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/StarlarkDefinedLinkTimeLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/StarlarkDefinedLinkTimeLibrary.java
@@ -98,10 +98,9 @@
             + " in "
             + buildLibraryFunction.getLocation()
             + " should return (depset[CcLinkingContext], depset[File])";
-    if (!(response instanceof Tuple)) {
+    if (!(response instanceof Tuple responseTuple)) {
       throw new RuleErrorException(errorMsg);
     }
-    Tuple responseTuple = (Tuple) response;
     if (responseTuple.size() != 2) {
       throw new RuleErrorException(errorMsg);
     }
@@ -172,10 +171,9 @@
 
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof Key)) {
+      if (!(other instanceof Key key)) {
         return false;
       }
-      Key key = (Key) other;
       return builderFunction.equals(key.builderFunction)
           && constantFields.equals(key.constantFields)
           && depsetFields.equals(key.depsetFields);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/UserVariablesExtension.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/UserVariablesExtension.java
index 2221954..3844d2d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/UserVariablesExtension.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/UserVariablesExtension.java
@@ -46,8 +46,7 @@
           throw new EvalException(
               "Trying to build UserVariableExtension, found non-string type in sequence.");
         }
-      } else if (entry.getValue() instanceof Depset) {
-        Depset depset = (Depset) entry.getValue();
+      } else if (entry.getValue() instanceof Depset depset) {
         if (depset.isEmpty()) {
           continue;
         }
@@ -82,8 +81,7 @@
         } catch (EvalException e) {
           // Cannot throw, cast already checked in constructor.
         }
-      } else if (entry.getValue() instanceof String) {
-        String value = (String) entry.getValue();
+      } else if (entry.getValue() instanceof String value) {
         builder.addStringVariable(entry.getKey(), value);
       } else {
         // If it's any other type we should have thrown an EvalException in the constructor already.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
index 0594d42..3f44a6d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQueryDirectPackageProviderFactory.java
@@ -314,8 +314,7 @@
         if (target == null) {
           try {
             Object o = TargetLoadingUtil.loadTarget(env, label);
-            if (o instanceof TargetAndErrorIfAny) {
-              TargetAndErrorIfAny targetAndErrorIfAny = (TargetAndErrorIfAny) o;
+            if (o instanceof TargetAndErrorIfAny targetAndErrorIfAny) {
               if (!targetAndErrorIfAny.isPackageLoadedSuccessfully()) {
                 throw BrokenQueryScopeException.of(targetAndErrorIfAny.getErrorLoadingTarget());
               }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
index f8e601a..c812352 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationInfoProvider.java
@@ -78,8 +78,7 @@
       return null;
     } else if (value instanceof JavaCompilationInfoProvider) {
       return (JavaCompilationInfoProvider) value;
-    } else if (value instanceof StructImpl) {
-      StructImpl info = (StructImpl) value;
+    } else if (value instanceof StructImpl info) {
       Builder builder =
           new Builder()
               .setJavacOpts(
@@ -204,10 +203,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof JavaCompilationInfoProvider)) {
+    if (!(obj instanceof JavaCompilationInfoProvider other)) {
       return false;
     }
-    JavaCompilationInfoProvider other = (JavaCompilationInfoProvider) obj;
     return getJavacOpts().shallowEquals(other.getJavacOpts())
         && Objects.equals(getRuntimeClasspath(), other.getRuntimeClasspath())
         && Objects.equals(getCompilationClasspath(), other.getCompilationClasspath())
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
index 53b2e50..35525a5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaGenJarsProvider.java
@@ -91,8 +91,7 @@
       return EMPTY;
     } else if (obj instanceof JavaGenJarsProvider) {
       return (JavaGenJarsProvider) obj;
-    } else if (obj instanceof StructImpl) {
-      StructImpl struct = (StructImpl) obj;
+    } else if (obj instanceof StructImpl struct) {
       return new AutoValue_JavaGenJarsProvider_NativeJavaGenJarsProvider(
           struct.getValue("enabled", Boolean.class),
           nullIfNone(struct.getValue("class_jar"), Artifact.class),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
index fe2dff7..8d449cc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java
@@ -545,11 +545,10 @@
     if (this == otherObject) {
       return true;
     }
-    if (!(otherObject instanceof JavaInfo)) {
+    if (!(otherObject instanceof JavaInfo other)) {
       return false;
     }
 
-    JavaInfo other = (JavaInfo) otherObject;
     return Objects.equals(providerJavaCompilationArgs, other.providerJavaCompilationArgs)
         && Objects.equals(providerJavaSourceJars, other.providerJavaSourceJars)
         && Objects.equals(providerJavaRuleOutputJars, other.providerJavaRuleOutputJars)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaModuleFlagsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaModuleFlagsProvider.java
index f2713aa..ea016e3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaModuleFlagsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaModuleFlagsProvider.java
@@ -129,8 +129,7 @@
       return null;
     } else if (value instanceof JavaModuleFlagsProvider) {
       return (JavaModuleFlagsProvider) value;
-    } else if (value instanceof StructImpl) {
-      StructImpl moduleFlagsInfo = (StructImpl) value;
+    } else if (value instanceof StructImpl moduleFlagsInfo) {
       return JavaModuleFlagsProvider.create(
           moduleFlagsInfo.getValue("add_exports", Depset.class).toList(String.class),
           moduleFlagsInfo.getValue("add_opens", Depset.class).toList(String.class),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfo.java
index 4979bd9..5477280 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPluginInfo.java
@@ -156,8 +156,7 @@
     public static JavaPluginData wrap(Object obj) throws EvalException, RuleErrorException {
       if (obj instanceof JavaPluginData) {
         return (JavaPluginData) obj;
-      } else if (obj instanceof StructImpl) {
-        StructImpl struct = (StructImpl) obj;
+      } else if (obj instanceof StructImpl struct) {
         return JavaPluginData.create(
             Depset.cast(struct.getValue("processor_classes"), String.class, "processor_classes"),
             Depset.cast(struct.getValue("processor_jars"), Artifact.class, "processor_jars"),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
index e7f69c6..c355f83 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaToolchainProvider.java
@@ -354,8 +354,7 @@
     static JspecifyInfo fromStarlark(@Nullable StarlarkValue value) throws RuleErrorException {
       if (value == null || value == Starlark.NONE) {
         return null;
-      } else if (value instanceof StructImpl) {
-        StructImpl struct = (StructImpl) value;
+      } else if (value instanceof StructImpl struct) {
         try {
           return new AutoValue_JavaToolchainProvider_JspecifyInfo(
               JavaPluginData.wrap(struct.getValue("processor")),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
index 63f4b67..b1e9cf7 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java
@@ -156,10 +156,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof ResourceArgMapFn)) {
+      if (!(o instanceof ResourceArgMapFn that)) {
         return false;
       }
-      ResourceArgMapFn that = (ResourceArgMapFn) o;
       return semantics.equals(that.semantics);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
index 17b13f1..bcc17c5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java
@@ -444,11 +444,10 @@
       } else {
         Iterable<Object> toAddIterable = (Iterable<Object>) toAdd;
         for (Object toAddObject : toAddIterable) {
-          if (!(toAddObject instanceof ObjcProvider)) {
+          if (!(toAddObject instanceof ObjcProvider objcProvider)) {
             throw Starlark.errorf(
                 AppleStarlarkCommon.BAD_PROVIDERS_ELEM_ERROR, Starlark.type(toAddObject));
           } else {
-            ObjcProvider objcProvider = (ObjcProvider) toAddObject;
             this.addTransitiveAndPropagate(objcProvider);
           }
         }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepoRecordedInput.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepoRecordedInput.java
index b5b9a4d..1d98a44 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepoRecordedInput.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepoRecordedInput.java
@@ -282,10 +282,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof File)) {
+      if (!(o instanceof File that)) {
         return false;
       }
-      File that = (File) o;
       return Objects.equals(path, that.path);
     }
 
@@ -368,10 +367,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof Dirents)) {
+      if (!(o instanceof Dirents that)) {
         return false;
       }
-      Dirents that = (Dirents) o;
       return Objects.equals(path, that.path);
     }
 
@@ -452,10 +450,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof DirTree)) {
+      if (!(o instanceof DirTree that)) {
         return false;
       }
-      DirTree that = (DirTree) o;
       return Objects.equals(path, that.path);
     }
 
@@ -518,10 +515,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof EnvVar)) {
+      if (!(o instanceof EnvVar envVar)) {
         return false;
       }
-      EnvVar envVar = (EnvVar) o;
       return Objects.equals(name, envVar.name);
     }
 
@@ -588,10 +584,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof RecordedRepoMapping)) {
+      if (!(o instanceof RecordedRepoMapping that)) {
         return false;
       }
-      RecordedRepoMapping that = (RecordedRepoMapping) o;
       return Objects.equals(sourceRepo, that.sourceRepo)
           && Objects.equals(apparentName, that.apparentName);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
index 1ca031f..38a830c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java
@@ -120,8 +120,7 @@
         return true;
       }
 
-      if (other instanceof SuccessfulRepositoryDirectoryValue) {
-        SuccessfulRepositoryDirectoryValue otherValue = (SuccessfulRepositoryDirectoryValue) other;
+      if (other instanceof SuccessfulRepositoryDirectoryValue otherValue) {
         return Objects.equal(path, otherValue.path)
             && Objects.equal(sourceDir, otherValue.sourceDir)
             && Arrays.equals(digest, otherValue.digest)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
index 62efe2c..a07a150 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/ResolvedFileValue.java
@@ -74,10 +74,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof ResolvedFileKey)) {
+      if (!(obj instanceof ResolvedFileKey other)) {
         return false;
       }
-      ResolvedFileKey other = (ResolvedFileKey) obj;
       return Objects.equals(path, other.path);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
index 4a291c3..253974e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/BuildEventStreamer.java
@@ -504,8 +504,7 @@
       buildEvent(freedEvent);
     }
 
-    if (event instanceof BuildCompleteEvent) {
-      BuildCompleteEvent buildCompleteEvent = (BuildCompleteEvent) event;
+    if (event instanceof BuildCompleteEvent buildCompleteEvent) {
       if (isCrash(buildCompleteEvent) || isCatastrophe(buildCompleteEvent)) {
         addAbortReason(AbortReason.INTERNAL);
       } else if (isIncomplete(buildCompleteEvent)) {
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/RcChunkOfArgs.java b/src/main/java/com/google/devtools/build/lib/runtime/RcChunkOfArgs.java
index 6e6fadc..40db118b 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/RcChunkOfArgs.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/RcChunkOfArgs.java
@@ -35,8 +35,7 @@
 
   @Override
   public boolean equals(Object o) {
-    if (o instanceof RcChunkOfArgs) {
-      RcChunkOfArgs other = (RcChunkOfArgs) o;
+    if (o instanceof RcChunkOfArgs other) {
       return getRcFile().equals(other.getRcFile()) && getArgs().equals(other.getArgs());
     }
     return false;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/ConfigCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/ConfigCommand.java
index be85da5..0b00d75 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/ConfigCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/ConfigCommand.java
@@ -134,8 +134,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof ConfigurationDiffForOutput) {
-        ConfigurationDiffForOutput other = (ConfigurationDiffForOutput) o;
+      if (o instanceof ConfigurationDiffForOutput other) {
         return other.configHash1.equals(configHash1)
             && other.configHash2.equals(configHash2)
             && other.fragmentsDiff.equals(fragmentsDiff);
@@ -166,8 +165,7 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof FragmentDiffForOutput) {
-        FragmentDiffForOutput other = (FragmentDiffForOutput) o;
+      if (o instanceof FragmentDiffForOutput other) {
         return other.name.equals(name) && other.optionsDiff.equals(optionsDiff);
       }
       return false;
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
index 172a8cf..fc0161a 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/RunCommand.java
@@ -1129,10 +1129,9 @@
    * code.
    */
   private static boolean isExecutableNonTestRule(Target target) {
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return false;
     }
-    Rule rule = ((Rule) target);
     if (rule.getRuleClassObject().hasAttr("$is_executable", Type.BOOLEAN)) {
       return NonconfigurableAttributeMapper.of(rule).get("$is_executable", Type.BOOLEAN);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
index ac7187e..65509a1 100644
--- a/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
+++ b/src/main/java/com/google/devtools/build/lib/sandbox/SandboxHelpers.java
@@ -557,9 +557,8 @@
       }
       PathFragment pathFragment = e.getKey();
       ActionInput actionInput = e.getValue();
-      if (actionInput instanceof VirtualActionInput) {
+      if (actionInput instanceof VirtualActionInput input) {
         // TODO(larsrc): Figure out which VAIs actually require atomicity, maybe avoid it.
-        VirtualActionInput input = (VirtualActionInput) actionInput;
         byte[] digest =
             input.atomicallyWriteRelativeTo(
                 execRootPath,
@@ -582,8 +581,7 @@
           inputPath = null;
         } else if (actionInput instanceof VirtualActionInput) {
           inputPath = RootedPath.toRootedPath(withinSandboxExecRoot, actionInput.getExecPath());
-        } else if (actionInput instanceof Artifact) {
-          Artifact inputArtifact = (Artifact) actionInput;
+        } else if (actionInput instanceof Artifact inputArtifact) {
           if (sandboxSourceRoots == null) {
             inputPath = RootedPath.toRootedPath(withinSandboxExecRoot, inputArtifact.getExecPath());
           } else {
diff --git a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
index cefd4c6..35e4e0e 100644
--- a/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
+++ b/src/main/java/com/google/devtools/build/lib/shell/Consumers.java
@@ -193,8 +193,7 @@
       } catch (ExecutionException ee) {
         // Runnable threw a RuntimeException
         Throwable nested = ee.getCause();
-        if (nested instanceof RuntimeException) {
-          final RuntimeException re = (RuntimeException) nested;
+        if (nested instanceof final RuntimeException re) {
           // The stream sink classes, unfortunately, tunnel IOExceptions
           // out of run() in a RuntimeException. If that's the case,
           // unpack and re-throw the IOException. Otherwise, re-throw
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java
index 188ec40..f96186b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java
@@ -58,8 +58,7 @@
       return prettyPrintArtifact(((Artifact) arg));
     } else if (arg instanceof ActionLookupData) {
       return "action from: " + arg;
-    } else if (arg instanceof TopLevelActionLookupKeyWrapper) {
-      TopLevelActionLookupKeyWrapper key = (TopLevelActionLookupKeyWrapper) arg;
+    } else if (arg instanceof TopLevelActionLookupKeyWrapper key) {
       if (skyFunctionName.equals(SkyFunctions.TARGET_COMPLETION)) {
         return "configured target: " + key.actionLookupKey().getLabel();
       }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 209e7fa..0fb59c1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -1046,8 +1046,7 @@
             actionForError);
         continue;
       }
-      if (retrievedMetadata instanceof TreeArtifactValue) {
-        TreeArtifactValue treeValue = (TreeArtifactValue) retrievedMetadata;
+      if (retrievedMetadata instanceof TreeArtifactValue treeValue) {
         inputData.putTreeArtifact((SpecialArtifact) input, treeValue, /* depOwner= */ null);
         treeValue
             .getArchivedRepresentation()
@@ -1082,12 +1081,11 @@
     // See SkyframeAwareActionTest.testRaceConditionBetweenInputAcquisitionAndSkyframeDeps
     checkState(!env.valuesMissing(), action);
 
-    if (action instanceof SkyframeAwareAction) {
+    if (action instanceof SkyframeAwareAction skyframeAwareAction) {
       // Skyframe-aware actions should be executed unconditionally, i.e. bypass action cache
       // checking. See documentation of SkyframeAwareAction.
       checkState(action.executeUnconditionally(), action);
 
-      SkyframeAwareAction skyframeAwareAction = (SkyframeAwareAction) action;
       ImmutableList<? extends SkyKey> keys = skyframeAwareAction.getDirectSkyframeDependencies();
       SkyframeLookupResult values = env.getValuesAndExceptions(keys);
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
index 9dbc860..ecdea6f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java
@@ -224,10 +224,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ActionExecutionValue)) {
+    if (!(obj instanceof ActionExecutionValue o)) {
       return false;
     }
-    ActionExecutionValue o = (ActionExecutionValue) obj;
     return getAllFileValues().equals(o.getAllFileValues())
         && getAllTreeArtifactValues().equals(o.getAllTreeArtifactValues())
         && Objects.equals(getOutputSymlinks(), o.getOutputSymlinks())
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java
index 5d750cb..8feecef 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMapHelper.java
@@ -75,12 +75,11 @@
       Environment env,
       MetadataConsumerForMetrics consumer)
       throws InterruptedException {
-    if (value instanceof RunfilesArtifactValue) {
+    if (value instanceof RunfilesArtifactValue runfilesArtifactValue) {
       // Note: we don't expand the .runfiles/MANIFEST file into the inputs. The reason for that
       // being that the MANIFEST file contains absolute paths that don't work with remote execution.
       // Instead, the way the SpawnInputExpander expands runfiles is via the Runfiles class
       // which contains all artifacts in the runfiles tree minus the MANIFEST file.
-      RunfilesArtifactValue runfilesArtifactValue = (RunfilesArtifactValue) value;
       runfilesArtifactValue.forEachFile(
           (artifact, metadata) -> {
             inputMap.put(artifact, metadata, /* depOwner= */ key);
@@ -104,8 +103,7 @@
       // We have to cache the "digest" of the aggregating value itself, because the action cache
       // checker may want it.
       inputMap.putRunfilesMetadata(key, runfilesArtifactValue, /* depOwner= */ key);
-    } else if (value instanceof TreeArtifactValue) {
-      TreeArtifactValue treeArtifactValue = (TreeArtifactValue) value;
+    } else if (value instanceof TreeArtifactValue treeArtifactValue) {
       expandTreeArtifactAndPopulateArtifactData(
           key, treeArtifactValue, treeArtifactConsumer, inputMap, /* depOwner= */ key);
       consumer.accumulate(treeArtifactValue);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java
index 008b62b..ea71359 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionInputMetadataProvider.java
@@ -75,14 +75,13 @@
   @Nullable
   @Override
   public FileArtifactValue getInputMetadata(ActionInput actionInput) throws IOException {
-    if (!(actionInput instanceof Artifact)) {
+    if (!(actionInput instanceof Artifact artifact)) {
       PathFragment inputPath = actionInput.getExecPath();
       PathFragment filesetKeyPath =
           inputPath.startsWith(execRoot) ? inputPath.relativeTo(execRoot) : inputPath;
       return filesetMapping.get(filesetKeyPath);
     }
 
-    Artifact artifact = (Artifact) actionInput;
     FileArtifactValue value;
 
     value = inputArtifactData.getInputMetadata(artifact);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
index c8b1559..29d0e91 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionValue.java
@@ -104,10 +104,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof ActionTemplateExpansionKey)) {
+      if (!(obj instanceof ActionTemplateExpansionKey that)) {
         return false;
       }
-      ActionTemplateExpansionKey that = (ActionTemplateExpansionKey) obj;
       return this.actionIndex == that.actionIndex
           && this.actionLookupKey.equals(that.actionLookupKey);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
index 4fe991b..4b6ce18 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ArtifactFunction.java
@@ -659,11 +659,10 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof DirectoryArtifactTraversalRequest)) {
+      if (!(o instanceof DirectoryArtifactTraversalRequest other)) {
         return false;
       }
       // Artifact is only for error info and not considered in hash code or equality.
-      DirectoryArtifactTraversalRequest other = (DirectoryArtifactTraversalRequest) o;
       return root.equals(other.root) && skipTestingForSubpackage == other.skipTestingForSubpackage;
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
index 5343f98..5fec4dd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java
@@ -390,8 +390,7 @@
       if (!e.depReportedOwnError()) {
         env.getListener().handle(Event.error(e.getLocation(), e.getMessage()));
       }
-      if (e.getCause() instanceof ConfiguredValueCreationException) {
-        ConfiguredValueCreationException cause = (ConfiguredValueCreationException) e.getCause();
+      if (e.getCause() instanceof ConfiguredValueCreationException cause) {
         throw new AspectFunctionException(
             new AspectCreationException(
                 cause.getMessage(), cause.getRootCauses(), cause.getDetailedExitCode()));
@@ -771,8 +770,8 @@
         view.createAnalysisEnvironment(key, events, env, configuration, starlarkBuiltinsValue);
 
     ConfiguredAspect configuredAspect;
-    if (aspect.getDefinition().applyToGeneratingRules() && associatedTarget instanceof OutputFile) {
-      OutputFile outputFile = (OutputFile) associatedTarget;
+    if (aspect.getDefinition().applyToGeneratingRules()
+        && associatedTarget instanceof OutputFile outputFile) {
       Label label = outputFile.getGeneratingRule().getLabel();
       return createAliasAspect(
           env, associatedTarget, key, aspect, key.withLabel(label), transitiveState);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
index 3f4d7fb..43775da 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectKeyCreator.java
@@ -210,10 +210,9 @@
       if (this == other) {
         return true;
       }
-      if (!(other instanceof AspectKey)) {
+      if (!(other instanceof AspectKey that)) {
         return false;
       }
-      AspectKey that = (AspectKey) other;
       return hashCode() == that.hashCode()
           && Objects.equal(getBaseKeys(), that.getBaseKeys())
           && Objects.equal(getBaseConfiguredTargetKey(), that.getBaseConfiguredTargetKey())
@@ -384,10 +383,9 @@
       if (o == this) {
         return true;
       }
-      if (!(o instanceof TopLevelAspectsKey)) {
+      if (!(o instanceof TopLevelAspectsKey that)) {
         return false;
       }
-      TopLevelAspectsKey that = (TopLevelAspectsKey) o;
       return hashCode() == that.hashCode()
           && Objects.equal(targetLabel, that.targetLabel)
           && Objects.equal(getBaseConfiguredTargetKey(), that.getBaseConfiguredTargetKey())
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverFunction.java
index 1a6b8d4..74c24ca 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverFunction.java
@@ -230,8 +230,7 @@
       }
     }
 
-    if (topLevelSkyValue instanceof ConfiguredTargetValue) {
-      ConfiguredTargetValue configuredTargetValue = (ConfiguredTargetValue) topLevelSkyValue;
+    if (topLevelSkyValue instanceof ConfiguredTargetValue configuredTargetValue) {
       ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
       // It's possible that this code path is triggered AFTER the analysis cache clean up and the
       // transitive packages for package root resolution is already cleared. In such a case, the
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverKey.java
index 75c3a36..74bfd90 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildDriverKey.java
@@ -121,8 +121,7 @@
 
   @Override
   public boolean equals(Object other) {
-    if (other instanceof BuildDriverKey) {
-      BuildDriverKey otherBuildDriverKey = (BuildDriverKey) other;
+    if (other instanceof BuildDriverKey otherBuildDriverKey) {
       return actionLookupKey.equals(otherBuildDriverKey.actionLookupKey)
           && topLevelArtifactContext.equals(otherBuildDriverKey.topLevelArtifactContext)
           && explicitlyRequested == otherBuildDriverKey.explicitlyRequested;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
index ac1d548..40f725c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildTopLevelAspectsDetailsFunction.java
@@ -276,10 +276,9 @@
       if (o == this) {
         return true;
       }
-      if (!(o instanceof BuildTopLevelAspectsDetailsKey)) {
+      if (!(o instanceof BuildTopLevelAspectsDetailsKey that)) {
         return false;
       }
-      BuildTopLevelAspectsDetailsKey that = (BuildTopLevelAspectsDetailsKey) o;
       return hashCode == that.hashCode
           && topLevelAspectsClasses.equals(that.topLevelAspectsClasses)
           && topLevelAspectsParameters.equals(that.topLevelAspectsParameters);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
index cd35333..b310eda 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlCompileValue.java
@@ -216,8 +216,7 @@
       if (this == other) {
         return true;
       }
-      if (other instanceof Key) {
-        Key that = (Key) other;
+      if (other instanceof Key that) {
         // Compare roots last since that's the more expensive step.
         return this.kind == that.kind
             && Objects.equals(this.label, that.label)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
index 7f556d1..7c17bf8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlLoadFunction.java
@@ -903,9 +903,8 @@
     Label enclosingFileLabel = key.getLabel();
     RepositoryName repoName = enclosingFileLabel.getRepository();
 
-    if (key instanceof BzlLoadValue.KeyForWorkspace) {
+    if (key instanceof BzlLoadValue.KeyForWorkspace keyForWorkspace) {
       // Still during workspace file evaluation
-      BzlLoadValue.KeyForWorkspace keyForWorkspace = (BzlLoadValue.KeyForWorkspace) key;
       RepositoryMapping pureWorkspaceMapping;
       if (keyForWorkspace.getWorkspaceChunk() == 0) {
         // There is no previous workspace chunk
@@ -1393,8 +1392,7 @@
     // TODO(adonovan): change the semantics; see b/65374671.
     thread.setPostAssignHook(
         (name, value) -> {
-          if (value instanceof StarlarkExportable) {
-            StarlarkExportable exp = (StarlarkExportable) value;
+          if (value instanceof StarlarkExportable exp) {
             if (!exp.isExported()) {
               exp.export(handler, label, name);
             }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoCycleReporter.java
index 6ed9f15..d11de3b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoCycleReporter.java
@@ -133,13 +133,11 @@
             SkyKey input = (SkyKey) rawInput;
             if (input instanceof RepositoryDirectoryValue.Key) {
               return ((RepositoryDirectoryValue.Key) input).argument().toString();
-            } else if (input.argument() instanceof ModuleExtensionId) {
-              ModuleExtensionId id = (ModuleExtensionId) input.argument();
+            } else if (input.argument() instanceof ModuleExtensionId id) {
               return String.format(
                   "extension '%s' defined in %s",
                   id.getExtensionName(), id.getBzlFileLabel().getCanonicalForm());
-            } else if (input.argument() instanceof RepositoryMappingValue.Key) {
-              var key = (RepositoryMappingValue.Key) input.argument();
+            } else if (input.argument() instanceof RepositoryMappingValue.Key key) {
               if (key == RepositoryMappingValue.KEY_FOR_ROOT_MODULE_WITHOUT_WORKSPACE_REPOS) {
                 return "repository mapping of @@ without WORKSPACE repos";
               }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
index 29b0d86..8f699c7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CollectPackagesUnderDirectoryValue.java
@@ -102,11 +102,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof NoErrorCollectPackagesUnderDirectoryValue)) {
+      if (!(o instanceof NoErrorCollectPackagesUnderDirectoryValue that)) {
         return false;
       }
-      NoErrorCollectPackagesUnderDirectoryValue that =
-          (NoErrorCollectPackagesUnderDirectoryValue) o;
       return this.isDirectoryPackage == that.isDirectoryPackage
           && Objects.equals(
               this.getSubdirectoryTransitivelyContainsPackagesOrErrors(),
@@ -157,10 +155,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof ErrorCollectPackagesUnderDirectoryValue)) {
+      if (!(o instanceof ErrorCollectPackagesUnderDirectoryValue that)) {
         return false;
       }
-      ErrorCollectPackagesUnderDirectoryValue that = (ErrorCollectPackagesUnderDirectoryValue) o;
       return Objects.equals(this.errorMessage, that.errorMessage)
           && Objects.equals(
               this.getSubdirectoryTransitivelyContainsPackagesOrErrors(),
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index e61458f..51c1487 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -441,8 +441,7 @@
     analysisEnvironment.disable(target);
     Preconditions.checkNotNull(configuredTarget, target);
 
-    if (configuredTarget instanceof RuleConfiguredTarget) {
-      RuleConfiguredTarget ruleConfiguredTarget = (RuleConfiguredTarget) configuredTarget;
+    if (configuredTarget instanceof RuleConfiguredTarget ruleConfiguredTarget) {
       return new RuleConfiguredTargetValue(ruleConfiguredTarget, transitivePackages);
     } else {
       // Expected 4 args, but got 3.
@@ -481,8 +480,7 @@
         state.targetAndConfigurationProducer = null;
       }
       result = state.targetAndConfigurationResult;
-      if (result instanceof TargetAndConfigurationError) {
-        var error = (TargetAndConfigurationError) result;
+      if (result instanceof TargetAndConfigurationError error) {
         switch (error.kind()) {
           case CONFIGURED_VALUE_CREATION:
             ConfiguredValueCreationException e = error.configuredValueCreation();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
index da4a351..e51e03b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetKey.java
@@ -129,10 +129,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ConfiguredTargetKey)) {
+    if (!(obj instanceof ConfiguredTargetKey other)) {
       return false;
     }
-    ConfiguredTargetKey other = (ConfiguredTargetKey) obj;
     return hashCode == other.hashCode
         && getLabel().equals(other.getLabel())
         && Objects.equals(configurationKey, other.configurationKey)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunction.java
index 7e4eb9c..39e60e9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunction.java
@@ -44,9 +44,8 @@
 
     // Does the requested package cross into a sub-repository, which we should report via the
     // correct package identifier?
-    if (pkgLookupValue instanceof IncorrectRepositoryReferencePackageLookupValue) {
-      IncorrectRepositoryReferencePackageLookupValue incorrectPackageLookupValue =
-          (IncorrectRepositoryReferencePackageLookupValue) pkgLookupValue;
+    if (pkgLookupValue
+        instanceof IncorrectRepositoryReferencePackageLookupValue incorrectPackageLookupValue) {
       PackageIdentifier correctPackageIdentifier =
           incorrectPackageLookupValue.getCorrectedPackageIdentifier();
       return env.getValue(ContainingPackageLookupValue.key(correctPackageIdentifier));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
index 31f7b1d..cf8a9bd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupValue.java
@@ -229,10 +229,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof ContainingPackage)) {
+      if (!(obj instanceof ContainingPackage other)) {
         return false;
       }
-      ContainingPackage other = (ContainingPackage) obj;
       return containingPackage.equals(other.containingPackage)
           && containingPackageRoot.equals(other.containingPackageRoot)
           && hasProjectFile == other.hasProjectFile;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/DependencyResolver.java
index fb3b9e7..c0b69ef 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DependencyResolver.java
@@ -495,8 +495,7 @@
   private void handleException(ExtendedEventHandler listener, Target target, Exception untyped)
       throws ReportedException {
 
-    if (untyped instanceof DependencyEvaluationException) {
-      DependencyEvaluationException e = (DependencyEvaluationException) untyped;
+    if (untyped instanceof DependencyEvaluationException e) {
       String errorMessage = e.getMessage();
       if (!e.depReportedOwnError()) {
         listener.handle(Event.error(e.getLocation(), e.getMessage()));
@@ -532,15 +531,13 @@
                   errorMessage,
                   null,
                   e.getDetailedExitCode()));
-    } else if (untyped instanceof ConfiguredValueCreationException) {
-      ConfiguredValueCreationException e = (ConfiguredValueCreationException) untyped;
+    } else if (untyped instanceof ConfiguredValueCreationException e) {
       if (!e.getMessage().isEmpty()) {
         // Report the error to the user.
         listener.handle(Event.error(e.getLocation(), e.getMessage()));
       }
       throw new ReportedException(e);
-    } else if (untyped instanceof AspectCreationException) {
-      AspectCreationException e = (AspectCreationException) untyped;
+    } else if (untyped instanceof AspectCreationException e) {
       if (!e.getMessage().isEmpty()) {
         // Report the error to the user.
         listener.handle(Event.error(null, e.getMessage()));
@@ -552,8 +549,7 @@
               e.getMessage(),
               e.getCauses(),
               e.getDetailedExitCode()));
-    } else if (untyped instanceof ToolchainException) {
-      ToolchainException e = (ToolchainException) untyped;
+    } else if (untyped instanceof ToolchainException e) {
       ConfiguredValueCreationException cvce =
           e.asConfiguredValueCreationException(targetAndConfiguration);
       listener.handle(Event.error(target.getLocation(), cvce.getMessage()));
@@ -760,11 +756,10 @@
       ExtendedEventHandler listener)
       throws InterruptedException {
     var target = targetAndConfiguration.getTarget();
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return UnloadedToolchainContextsInputs.empty();
     }
 
-    Rule rule = (Rule) target;
     var configuration = targetAndConfiguration.getConfiguration();
     boolean useAutoExecGroups =
         rule.isAttrDefined("$use_auto_exec_groups", Type.BOOLEAN)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
index f4a1283..468b8ee 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingStateValue.java
@@ -107,10 +107,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof DirectoryListingStateValue)) {
+    if (!(obj instanceof DirectoryListingStateValue other)) {
       return false;
     }
-    DirectoryListingStateValue other = (DirectoryListingStateValue) obj;
     return compactSortedDirents.equals(other.compactSortedDirents);
   }
 
@@ -157,13 +156,12 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof CompactSortedDirents)) {
+      if (!(obj instanceof CompactSortedDirents other)) {
         return false;
       }
       if (this == obj) {
         return true;
       }
-      CompactSortedDirents other = (CompactSortedDirents) obj;
       return Arrays.equals(names,  other.names) && packedTypes.equals(other.packedTypes);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
index 44a31bc..d9e9f91 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DirectoryListingValue.java
@@ -121,10 +121,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof RegularDirectoryListingValue)) {
+      if (!(obj instanceof RegularDirectoryListingValue other)) {
         return false;
       }
-      RegularDirectoryListingValue other = (RegularDirectoryListingValue) obj;
       return directoryListingStateValue.equals(other.directoryListingStateValue);
     }
 
@@ -161,10 +160,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof DifferentRealPathDirectoryListingValue)) {
+      if (!(obj instanceof DifferentRealPathDirectoryListingValue other)) {
         return false;
       }
-      DifferentRealPathDirectoryListingValue other = (DifferentRealPathDirectoryListingValue) obj;
       return realDirRootedPath.equals(other.realDirRootedPath)
           && directoryListingStateValue.equals(other.directoryListingStateValue);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetTraversalRequest.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetTraversalRequest.java
index d163eb8..b74ac99 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetTraversalRequest.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetTraversalRequest.java
@@ -104,10 +104,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof FilesetTraversalRequest)) {
+    if (!(o instanceof FilesetTraversalRequest other)) {
       return false;
     }
-    FilesetTraversalRequest other = (FilesetTraversalRequest) o;
     return root().equals(other.root())
         && isRootGenerated() == other.isRootGenerated()
         && crossPkgBoundaries() == other.crossPkgBoundaries()
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
index d021e99..1803cdb 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobDescriptor.java
@@ -131,10 +131,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof GlobDescriptor)) {
+    if (!(obj instanceof GlobDescriptor other)) {
       return false;
     }
-    GlobDescriptor other = (GlobDescriptor) obj;
     return packageId.equals(other.packageId)
         && packageRoot.equals(other.packageRoot)
         && subdir.equals(other.subdir)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobsValue.java
index 6c1aadd..a19eded 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobsValue.java
@@ -89,11 +89,10 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof GlobRequest)) {
+      if (!(obj instanceof GlobRequest other)) {
         return false;
       }
 
-      GlobRequest other = (GlobRequest) obj;
       return pattern.equals(other.pattern) && globOperation.equals(other.globOperation);
     }
 
@@ -205,10 +204,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof Key)) {
+      if (!(obj instanceof Key other)) {
         return false;
       }
-      Key other = (Key) obj;
       return packageIdentifier.equals(other.packageIdentifier)
           && packageRoot.equals(other.packageRoot)
           && globRequests.equals(other.globRequests);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
index c3a0817..46dfbe7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/IgnoredPackagePrefixesValue.java
@@ -62,8 +62,7 @@
 
   @Override
   public boolean equals(Object obj) {
-    if (obj instanceof IgnoredPackagePrefixesValue) {
-      IgnoredPackagePrefixesValue other = (IgnoredPackagePrefixesValue) obj;
+    if (obj instanceof IgnoredPackagePrefixesValue other) {
       return this.patterns.equals(other.patterns);
     }
     return false;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/IncrementalArtifactConflictFinder.java b/src/main/java/com/google/devtools/build/lib/skyframe/IncrementalArtifactConflictFinder.java
index 12e5362..7ad14e1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/IncrementalArtifactConflictFinder.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/IncrementalArtifactConflictFinder.java
@@ -545,13 +545,12 @@
         return;
       }
       for (SkyKey dep : directDeps) {
-        if (!(dep instanceof ActionLookupKey)) {
+        if (!(dep instanceof ActionLookupKey depKey)) {
           // The subgraph of dependencies of ActionLookupKeys never has a non-ActionLookupKey
           // depending on an ActionLookupKey. So we can skip any non-ActionLookupKeys in the
           // traversal as an optimization.
           continue;
         }
-        ActionLookupKey depKey = (ActionLookupKey) dep;
         if (dedupSet.add(depKey)) {
           exclusivePool.execute(
               new CheckForConflictsUnderKey(depKey, actionCheckingFutures, badActionMap, dedupSet));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
index 5d7bc6a..1ce39d7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupValue.java
@@ -172,10 +172,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof SuccessfulLocalRepositoryLookupValue)) {
+      if (!(obj instanceof SuccessfulLocalRepositoryLookupValue other)) {
         return false;
       }
-      SuccessfulLocalRepositoryLookupValue other = (SuccessfulLocalRepositoryLookupValue) obj;
       return repositoryName.equals(other.repositoryName);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
index bb67897..6107412 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageErrorMessageValue.java
@@ -152,10 +152,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof NoSuchPackageExceptionValue)) {
+      if (!(obj instanceof NoSuchPackageExceptionValue other)) {
         return false;
       }
-      NoSuchPackageExceptionValue other = (NoSuchPackageExceptionValue) obj;
       return errorMessage.equals(other.errorMessage);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index 7673205..742a490 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -1511,10 +1511,9 @@
         if (this == other) {
           return true;
         }
-        if (!(other instanceof PackageFunctionException.Builder)) {
+        if (!(other instanceof Builder otherBuilder)) {
           return false;
         }
-        PackageFunctionException.Builder otherBuilder = (PackageFunctionException.Builder) other;
         return Objects.equals(exceptionType, otherBuilder.exceptionType)
             && Objects.equals(packageIdentifier, otherBuilder.packageIdentifier)
             && Objects.equals(transience, otherBuilder.transience)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
index 099e234..d2e1f51 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java
@@ -245,10 +245,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof SuccessfulPackageLookupValue)) {
+      if (!(obj instanceof SuccessfulPackageLookupValue other)) {
         return false;
       }
-      SuccessfulPackageLookupValue other = (SuccessfulPackageLookupValue) obj;
       return root.equals(other.root)
           && buildFileName == other.buildFileName
           && hasProjectFile == other.hasProjectFile;
@@ -291,13 +290,12 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof SuccessfulExternalPackageLookupValue)) {
+      if (!(obj instanceof SuccessfulExternalPackageLookupValue other)) {
         return false;
       }
       if (!super.equals(obj)) {
         return false;
       }
-      SuccessfulExternalPackageLookupValue other = (SuccessfulExternalPackageLookupValue) obj;
       return repository.equals(other.repository);
     }
 
@@ -382,10 +380,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof InvalidNamePackageLookupValue)) {
+      if (!(obj instanceof InvalidNamePackageLookupValue other)) {
         return false;
       }
-      InvalidNamePackageLookupValue other = (InvalidNamePackageLookupValue) obj;
       return errorMsg.equals(other.errorMsg);
     }
 
@@ -438,11 +435,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof IncorrectRepositoryReferencePackageLookupValue)) {
+      if (!(obj instanceof IncorrectRepositoryReferencePackageLookupValue other)) {
         return false;
       }
-      IncorrectRepositoryReferencePackageLookupValue other =
-          (IncorrectRepositoryReferencePackageLookupValue) obj;
       return Objects.equal(invalidPackageIdentifier, other.invalidPackageIdentifier)
           && Objects.equal(correctedPackageIdentifier, other.correctedPackageIdentifier);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
index 11f53d1..21082d2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java
@@ -122,10 +122,9 @@
 
   @Override
   public boolean equals(Object obj) {
-    if (!(obj instanceof PrecomputedValue)) {
+    if (!(obj instanceof PrecomputedValue other)) {
       return false;
     }
-    PrecomputedValue other = (PrecomputedValue) obj;
     return value.equals(other.value);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
index 0429fd2..d684d9b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsValue.java
@@ -106,10 +106,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof TargetPatternSequence)) {
+      if (!(o instanceof TargetPatternSequence that)) {
         return false;
       }
-      TargetPatternSequence that = (TargetPatternSequence) o;
       return Objects.equals(offset, that.offset) && Objects.equals(patterns, that.patterns);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
index 35a48ea..36c8ba7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfTargetsUnderDirectoryValue.java
@@ -117,11 +117,10 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof PrepareDepsOfTargetsUnderDirectoryKey)) {
+      if (!(o instanceof PrepareDepsOfTargetsUnderDirectoryKey that)) {
         return false;
       }
 
-      PrepareDepsOfTargetsUnderDirectoryKey that = (PrepareDepsOfTargetsUnderDirectoryKey) o;
       return Objects.equals(recursivePkgKey, that.recursivePkgKey)
           && Objects.equals(filteringPolicy, that.filteringPolicy);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
index 16296c6..42e0cd9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
@@ -186,8 +186,7 @@
       if (rootInfo.type.isFile()) {
         return resultForFileRoot(traversal.root().asRootedPath(), rootInfo);
       }
-      if (rootInfo.type.isDirectory() && rootInfo.metadata instanceof TreeArtifactValue) {
-        TreeArtifactValue value = (TreeArtifactValue) rootInfo.metadata;
+      if (rootInfo.type.isDirectory() && rootInfo.metadata instanceof TreeArtifactValue value) {
         ImmutableList.Builder<RecursiveFilesystemTraversalValue> traversalValues =
             ImmutableList.builderWithExpectedSize(value.getChildValues().size());
         for (Map.Entry<TreeFileArtifact, FileArtifactValue> entry
@@ -457,19 +456,15 @@
   @VisibleForTesting
   static HasDigest withDigest(HasDigest fsVal, Path path, XattrProvider syscallCache)
       throws IOException {
-    if (fsVal instanceof FileStateValue) {
-      FileStateValue fsv = (FileStateValue) fsVal;
-      if (fsv instanceof RegularFileStateValueWithDigest) {
-        RegularFileStateValueWithDigest rfsv = (RegularFileStateValueWithDigest) fsv;
+    if (fsVal instanceof FileStateValue fsv) {
+      if (fsv instanceof RegularFileStateValueWithDigest rfsv) {
         return FileArtifactValue.createForVirtualActionInput(rfsv.getDigest(), rfsv.getSize());
-      } else if (fsv instanceof RegularFileStateValueWithContentsProxy) {
-        RegularFileStateValueWithContentsProxy rfsv = (RegularFileStateValueWithContentsProxy) fsv;
+      } else if (fsv instanceof RegularFileStateValueWithContentsProxy rfsv) {
         return FileArtifactValue.createForNormalFileUsingPath(path, rfsv.getSize(), syscallCache);
       }
 
       return new HasDigest.ByteStringDigest(fsv.getValueFingerprint());
-    } else if (fsVal instanceof FileArtifactValue) {
-      FileArtifactValue fav = ((FileArtifactValue) fsVal);
+    } else if (fsVal instanceof FileArtifactValue fav) {
       if (fav.getDigest() != null) {
         return fav;
       }
@@ -718,8 +713,7 @@
       if (value == null) {
         continue;
       }
-      if (key instanceof FileValue.Key) {
-        FileValue.Key fileKey = (FileValue.Key) key;
+      if (key instanceof FileValue.Key fileKey) {
         FileInfo fileInfo =
             toFileInfo((FileValue) value, env, fileKey.argument().asPath(), syscallCache);
         if (fileInfo != null) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
index a4c79ac..db2b079 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalValue.java
@@ -257,10 +257,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof Symlink)) {
+      if (!(obj instanceof Symlink o)) {
         return false;
       }
-      Symlink o = (Symlink) obj;
       return linkName.equals(o.linkName) && unresolvedLinkTarget.equals(o.unresolvedLinkTarget);
     }
 
@@ -660,10 +659,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof RecursiveFilesystemTraversalValue)) {
+    if (!(obj instanceof RecursiveFilesystemTraversalValue o)) {
       return false;
     }
-    RecursiveFilesystemTraversalValue o = (RecursiveFilesystemTraversalValue) obj;
     return resolvedRoot.equals(o.resolvedRoot) && resolvedPaths.equals(o.resolvedPaths);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgKey.java
index c9d2038..3038da9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgKey.java
@@ -70,11 +70,10 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof RecursivePkgKey)) {
+    if (!(o instanceof RecursivePkgKey that)) {
       return false;
     }
 
-    RecursivePkgKey that = (RecursivePkgKey) o;
     return excludedPaths.equals(that.excludedPaths)
         && rootedPath.equals(that.rootedPath)
         && repositoryName.equals(that.repositoryName);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index 3f45d40..f298648 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -503,8 +503,7 @@
       SkyValue value = skyKeyAndValue.getValue();
       SkyKey key = skyKeyAndValue.getKey();
       SkyFunctionName functionName = key.functionName();
-      if (value instanceof RuleConfiguredTargetValue) {
-        RuleConfiguredTargetValue ctValue = (RuleConfiguredTargetValue) value;
+      if (value instanceof RuleConfiguredTargetValue ctValue) {
         ConfiguredTarget configuredTarget = ctValue.getConfiguredTarget();
         if (configuredTarget instanceof RuleConfiguredTarget) {
 
@@ -612,8 +611,7 @@
         continue;
       }
       try {
-        if (skyValue instanceof RuleConfiguredTargetValue) {
-          var configuredTarget = (RuleConfiguredTargetValue) skyValue;
+        if (skyValue instanceof RuleConfiguredTargetValue configuredTarget) {
           // Only dumps the value for non-delegating keys.
           if (configuredTarget.getConfiguredTarget().getLookupKey().equals(key)) {
             actionGraphDump.dumpConfiguredTarget(configuredTarget);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyValueDirtinessChecker.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyValueDirtinessChecker.java
index 5451bce..217380c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyValueDirtinessChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyValueDirtinessChecker.java
@@ -170,10 +170,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof DirtyResult)) {
+      if (!(obj instanceof DirtyResult that)) {
         return false;
       }
-      DirtyResult that = (DirtyResult) obj;
       return this.isDirty == that.isDirty
           && Objects.equals(this.newValue, that.newValue)
           && Objects.equals(this.newMaxTransitiveSourceVersion, that.newMaxTransitiveSourceVersion);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
index 83174f3..c17c6f6 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java
@@ -698,8 +698,7 @@
           eventPosted = true;
         }
 
-        if (action instanceof NotifyOnActionCacheHit) {
-          NotifyOnActionCacheHit notify = (NotifyOnActionCacheHit) action;
+        if (action instanceof NotifyOnActionCacheHit notify) {
           ExtendedEventHandler contextEventHandler = selectEventHandler(action);
           ActionCachedContext context =
               new ActionCachedContext() {
@@ -894,11 +893,9 @@
       }
 
       Path primaryOutputPath = actionExecutionContext.getInputPath(action.getPrimaryOutput());
-      if (e instanceof LostInputsActionExecutionException) {
+      if (e instanceof LostInputsActionExecutionException lostInputsException) {
         // If inputs were lost during input discovery, then enrich the exception, informing action
         // rewinding machinery that these lost inputs are now Skyframe deps of the action.
-        LostInputsActionExecutionException lostInputsException =
-            (LostInputsActionExecutionException) e;
         lostInputsException.setFromInputDiscovery();
         enrichLostInputsException(
             primaryOutputPath, actionLookupData, fileOutErr, lostInputsException);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index 4873893..a58434c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -1084,11 +1084,10 @@
     }
     Target target = labelTargetMap.get(label);
 
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       return TestType.NOT_TEST;
     }
 
-    Rule rule = (Rule) target;
     TestType fromExplicitFlagOrTag;
     if (buildDriverKeyTestContext.getTestStrategy().equals("exclusive")
         || TargetUtils.isExclusiveTestRule(rule)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeErrorProcessor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeErrorProcessor.java
index 954b164..e90e586 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeErrorProcessor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeErrorProcessor.java
@@ -462,11 +462,9 @@
     // cases like action conflict or execution-related errors.
     // TODO(b/249690006): Can we simplify things by moving aspects events here?
     if (errorKey.argument() instanceof TopLevelAspectsKey) {
-      if (exception instanceof TopLevelConflictException) {
-        TopLevelConflictException tlce = (TopLevelConflictException) exception;
+      if (exception instanceof TopLevelConflictException tlce) {
         actionConflicts = tlce.getTransitiveActionConflicts();
-      } else if (exception instanceof ActionConflictException) {
-        ActionConflictException ace = (ActionConflictException) exception;
+      } else if (exception instanceof ActionConflictException ace) {
         actionConflicts = ImmutableMap.of(ace.getAttemptedAction(), ace);
         aspectKeyForConflictReporting = ace.getAspectKey();
       } else if (isExecutionException(exception)) {
@@ -502,16 +500,13 @@
     Label topLevelLabel = ctKey.getLabel();
     NestedSet<Cause> analysisRootCauses;
 
-    if (exception instanceof TopLevelConflictException) {
-      TopLevelConflictException tlce = (TopLevelConflictException) exception;
+    if (exception instanceof TopLevelConflictException tlce) {
       actionConflicts = tlce.getTransitiveActionConflicts();
       analysisRootCauses = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
-    } else if (exception instanceof ActionConflictException) {
-      ActionConflictException ace = (ActionConflictException) exception;
+    } else if (exception instanceof ActionConflictException ace) {
       actionConflicts = ImmutableMap.of(ace.getAttemptedAction(), ace);
       analysisRootCauses = NestedSetBuilder.emptySet(Order.STABLE_ORDER);
-    } else if (exception instanceof ConfiguredValueCreationException) {
-      ConfiguredValueCreationException ctCause = (ConfiguredValueCreationException) exception;
+    } else if (exception instanceof ConfiguredValueCreationException ctCause) {
       // Previously, the nested set was de-duplicating loading root cause labels. Now that we
       // track Cause instances including a message, we get one event per label and message. In
       // order to keep backwards compatibility, we de-duplicate root cause labels here.
@@ -904,8 +899,7 @@
     if (innerCause instanceof TestExecException) {
       throw (TestExecException) innerCause;
     }
-    if (cause instanceof ActionExecutionException) {
-      ActionExecutionException actionExecutionCause = (ActionExecutionException) cause;
+    if (cause instanceof ActionExecutionException actionExecutionCause) {
       String message = cause.getMessage();
       if (actionExecutionCause.getAction() != null) {
         message = actionExecutionCause.getAction().describe() + " failed: " + message;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 68051e0..f4e50fa 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -3761,13 +3761,12 @@
         }
         var subtasks = new ArrayList<VisitActionLookupKey>();
         for (SkyKey dep : directDeps) {
-          if (!(dep instanceof ActionLookupKey)) {
+          if (!(dep instanceof ActionLookupKey depKey)) {
             // The subgraph of dependencies of ActionLookupKeys never has a non-ActionLookupKey
             // depending on an ActionLookupKey. So we can skip any non-ActionLookupKeys in the
             // traversal as an optimization.
             continue;
           }
-          ActionLookupKey depKey = (ActionLookupKey) dep;
           if (tryClaimVisitation(depKey, collected)) {
             subtasks.add(new VisitActionLookupKey(depKey, collected));
           }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetExcludingFilteringPolicy.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetExcludingFilteringPolicy.java
index ef23fd2..c6e9cba 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetExcludingFilteringPolicy.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetExcludingFilteringPolicy.java
@@ -45,10 +45,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof TargetExcludingFilteringPolicy)) {
+    if (!(o instanceof TargetExcludingFilteringPolicy that)) {
       return false;
     }
-    TargetExcludingFilteringPolicy that = (TargetExcludingFilteringPolicy) o;
     return Objects.equals(excludedSingleTargets, that.excludedSingleTargets);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
index eca2f5c..2ef869b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternErrorFunction.java
@@ -72,10 +72,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof Key)) {
+      if (!(obj instanceof Key that)) {
         return false;
       }
-      Key that = (Key) obj;
       return this.message.equals(that.message)
           && this.detailedExitCode.equals(that.detailedExitCode);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
index 0de10a2..b6042ce 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseValue.java
@@ -119,10 +119,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof TargetPatternPhaseValue)) {
+    if (!(obj instanceof TargetPatternPhaseValue that)) {
       return false;
     }
-    TargetPatternPhaseValue that = (TargetPatternPhaseValue) obj;
     return Objects.equals(this.targetLabels, that.targetLabels)
         && Objects.equals(this.testsToRunLabels, that.testsToRunLabels)
         && Objects.equals(this.workspaceName, that.workspaceName)
@@ -290,10 +289,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof TargetPatternPhaseKey)) {
+      if (!(obj instanceof TargetPatternPhaseKey other)) {
         return false;
       }
-      TargetPatternPhaseKey other = (TargetPatternPhaseKey) obj;
       return other.targetPatterns.equals(this.targetPatterns)
           && other.offset.equals(this.offset)
           && other.compileOneDependency == compileOneDependency
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
index 1ef1321..57e5e14 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternValue.java
@@ -261,10 +261,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof TargetPatternKey)) {
+      if (!(obj instanceof TargetPatternKey other)) {
         return false;
       }
-      TargetPatternKey other = (TargetPatternKey) obj;
 
       return other.signedParsedPattern.equals(this.signedParsedPattern)
           && other.policy.equals(this.policy)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionValue.java
index 778a6d0..71b3057 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestExpansionValue.java
@@ -92,10 +92,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof TestExpansionKey)) {
+      if (!(obj instanceof TestExpansionKey other)) {
         return false;
       }
-      TestExpansionKey other = (TestExpansionKey) obj;
       return other.label.equals(label) && other.strict == strict;
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternValue.java
index 25099e7..f435144 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TestsForTargetPatternValue.java
@@ -87,10 +87,9 @@
       if (this == obj) {
         return true;
       }
-      if (!(obj instanceof TestsForTargetPatternKey)) {
+      if (!(obj instanceof TestsForTargetPatternKey other)) {
         return false;
       }
-      TestsForTargetPatternKey other = (TestsForTargetPatternKey) obj;
       return other.targets.equals(targets);
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
index 7f1b101..76106e7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveBaseTraversalFunction.java
@@ -165,12 +165,11 @@
    */
   private Iterable<SkyKey> getStrictLabelAspectKeys(
       Target target, SkyframeLookupResult depMap, Environment env) throws InterruptedException {
-    if (!(target instanceof Rule)) {
+    if (!(target instanceof Rule rule)) {
       // Aspects can be declared only for Rules.
       return ImmutableList.of();
     }
 
-    Rule rule = (Rule) target;
     if (!rule.hasAspects()) {
       return ImmutableList.of();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
index eec6238..0b62013 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTargetFunction.java
@@ -141,16 +141,14 @@
 
   private static void maybeReportErrorAboutMissingEdge(
       Target target, Label depLabel, NoSuchThingException e, EventHandler eventHandler) {
-    if (e instanceof NoSuchTargetException) {
-      NoSuchTargetException nste = (NoSuchTargetException) e;
+    if (e instanceof NoSuchTargetException nste) {
       if (depLabel.equals(nste.getLabel())) {
         eventHandler.handle(
             Event.error(
                 TargetUtils.getLocationMaybe(target),
                 TargetUtils.formatMissingEdge(target, depLabel, e)));
       }
-    } else if (e instanceof NoSuchPackageException) {
-      NoSuchPackageException nspe = (NoSuchPackageException) e;
+    } else if (e instanceof NoSuchPackageException nspe) {
       if (nspe.getPackageId().equals(depLabel.getPackageIdentifier())) {
         eventHandler.handle(
             Event.error(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
index c11f7d8..166da7c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TransitiveTraversalValue.java
@@ -67,8 +67,7 @@
 
   static TransitiveTraversalValue forTarget(Target target, @Nullable String errorMessage) {
     if (errorMessage == null) {
-      if (target instanceof Rule && ((Rule) target).getRuleClassObject().isStarlark()) {
-        Rule rule = (Rule) target;
+      if (target instanceof Rule rule && ((Rule) target).getRuleClassObject().isStarlark()) {
         // Do not intern values for Starlark rules.
         return TransitiveTraversalValue.create(
             rule.getRuleClassObject().getAdvertisedProviders(), rule.getTargetKind(), errorMessage);
@@ -131,10 +130,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof TransitiveTraversalValue)) {
+    if (!(o instanceof TransitiveTraversalValue that)) {
       return false;
     }
-    TransitiveTraversalValue that = (TransitiveTraversalValue) o;
     return Objects.equals(this.getErrorMessage(), that.getErrorMessage())
         && Objects.equals(this.getKind(), that.getKind())
         && this.getProviders().equals(that.getProviders());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java b/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
index cdaa014..2e4ad9f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TraversalInfoRootPackageExtractor.java
@@ -243,8 +243,7 @@
       if (this == obj) {
         return true;
       }
-      if (obj instanceof TraversalInfo) {
-        TraversalInfo otherTraversal = (TraversalInfo) obj;
+      if (obj instanceof TraversalInfo otherTraversal) {
         return Objects.equal(rootedDir, otherTraversal.rootedDir)
             && Objects.equal(forbiddenSubdirectories, otherTraversal.forbiddenSubdirectories)
             && Objects.equal(excludedSubdirectories, otherTraversal.excludedSubdirectories);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
index 2dc18e7..5cac9e8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TreeArtifactValue.java
@@ -234,10 +234,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof TreeArtifactCompositeFileArtifactValue)) {
+      if (!(o instanceof TreeArtifactCompositeFileArtifactValue that)) {
         return false;
       }
-      TreeArtifactCompositeFileArtifactValue that = (TreeArtifactCompositeFileArtifactValue) o;
       return Arrays.equals(digest, that.digest)
           && Objects.equals(materializationExecPath, that.materializationExecPath);
     }
@@ -394,11 +393,10 @@
       return true;
     }
 
-    if (!(other instanceof TreeArtifactValue)) {
+    if (!(other instanceof TreeArtifactValue that)) {
       return false;
     }
 
-    TreeArtifactValue that = (TreeArtifactValue) other;
     return Arrays.equals(digest, that.digest)
         && childData.equals(that.childData)
         && Objects.equals(archivedRepresentation, that.archivedRepresentation)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
index b5cca7d..fbd0e0e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/WorkspaceNameValue.java
@@ -57,10 +57,9 @@
 
   @Override
   public boolean equals(Object obj) {
-    if (!(obj instanceof WorkspaceNameValue)) {
+    if (!(obj instanceof WorkspaceNameValue other)) {
       return false;
     }
-    WorkspaceNameValue other = (WorkspaceNameValue) obj;
     return Objects.equals(workspaceName, other.workspaceName);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
index aced4ba..50fbeb1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/actiongraph/v2/ActionGraphDump.java
@@ -142,8 +142,8 @@
           TemplateExpansionException {
 
     // Store the content of param files.
-    if (includeParamFiles && (action instanceof ParameterFileWriteAction)) {
-      ParameterFileWriteAction parameterFileWriteAction = (ParameterFileWriteAction) action;
+    if (includeParamFiles
+        && (action instanceof ParameterFileWriteAction parameterFileWriteAction)) {
 
       Iterable<String> fileContent = parameterFileWriteAction.getArguments();
       String paramFileExecPath = action.getPrimaryOutput().getExecPathString();
@@ -167,8 +167,7 @@
             .setMnemonic(action.getMnemonic())
             .setTargetId(knownTargets.dataToIdAndStreamOutputProto(targetIdentifier));
 
-    if (action instanceof ActionExecutionMetadata) {
-      ActionExecutionMetadata actionExecutionMetadata = (ActionExecutionMetadata) action;
+    if (action instanceof ActionExecutionMetadata actionExecutionMetadata) {
       actionBuilder
           .setActionKey(
               actionExecutionMetadata.getKey(getActionKeyContext(), /*artifactExpander=*/ null))
@@ -176,8 +175,7 @@
     }
 
     // store environment
-    if (action instanceof AbstractAction && action instanceof CommandAction) {
-      AbstractAction spawnAction = (AbstractAction) action;
+    if (action instanceof AbstractAction spawnAction && action instanceof CommandAction) {
       // Some actions (e.g. CppCompileAction) don't override getEnvironment, but only
       // getEffectiveEnvironment. Since calling the latter with an empty client env returns the
       // fixed part of the full ActionEnvironment with the default implementations provided by
@@ -195,8 +193,7 @@
       }
     }
 
-    if (includeActionCmdLine && action instanceof CommandAction) {
-      CommandAction commandAction = (CommandAction) action;
+    if (includeActionCmdLine && action instanceof CommandAction commandAction) {
       actionBuilder.addAllArguments(commandAction.getArguments());
     }
 
@@ -281,8 +278,7 @@
           knownArtifacts.dataToIdAndStreamOutputProto(action.getPrimaryOutput()));
     }
 
-    if (action instanceof TemplateExpansionAction) {
-      TemplateExpansionAction templateExpansionAction = (TemplateExpansionAction) action;
+    if (action instanceof TemplateExpansionAction templateExpansionAction) {
       actionBuilder.setTemplateContent(AqueryUtils.getTemplateContent(templateExpansionAction));
 
       for (Substitution substitution : templateExpansionAction.getSubstitutions()) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKey.java
index 97cc4db..b50c639 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKey.java
@@ -69,10 +69,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof BuildConfigurationKey)) {
+    if (!(o instanceof BuildConfigurationKey otherConfig)) {
       return false;
     }
-    BuildConfigurationKey otherConfig = (BuildConfigurationKey) o;
     return options.equals(otherConfig.options);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKeyValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKeyValue.java
index cc79cc1..a3a0e4e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKeyValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/BuildConfigurationKeyValue.java
@@ -106,10 +106,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof BuildConfigurationKeyValue)) {
+    if (!(obj instanceof BuildConfigurationKeyValue that)) {
       return false;
     }
-    BuildConfigurationKeyValue that = (BuildConfigurationKeyValue) obj;
     return this.buildConfigurationKey.equals(that.buildConfigurationKey);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/ParsedFlagsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/config/ParsedFlagsValue.java
index e037495..3a7343e 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/ParsedFlagsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/ParsedFlagsValue.java
@@ -117,10 +117,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ParsedFlagsValue)) {
+    if (!(obj instanceof ParsedFlagsValue that)) {
       return false;
     }
-    ParsedFlagsValue that = (ParsedFlagsValue) obj;
     return this.flags.equals(that.flags);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
index 39de359..8e5a067b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingValue.java
@@ -281,10 +281,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof PlatformMappingValue)) {
+    if (!(obj instanceof PlatformMappingValue that)) {
       return false;
     }
-    PlatformMappingValue that = (PlatformMappingValue) obj;
     return this.flagsToPlatforms.equals(that.flagsToPlatforms)
         && this.platformsToFlags.equals(that.platformsToFlags)
         && this.optionsClasses.equals(that.optionsClasses);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
index e064916..335c7af 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredExecutionPlatformsValue.java
@@ -70,10 +70,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof Key)) {
+      if (!(obj instanceof Key that)) {
         return false;
       }
-      Key that = (Key) obj;
       return Objects.equals(this.configurationKey, that.configurationKey);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsCycleReporter.java
index 53c44e5..05fca20 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsCycleReporter.java
@@ -91,8 +91,7 @@
                 ((SingleToolchainResolutionKey) input).toolchainType().toolchainType();
             return String.format("toolchain type %s", toolchainType);
           }
-          if (input instanceof ToolchainContextKey) {
-            ToolchainContextKey toolchainContextKey = (ToolchainContextKey) input;
+          if (input instanceof ToolchainContextKey toolchainContextKey) {
             String toolchainTypes =
                 toolchainContextKey.toolchainTypes().stream()
                     .map(ToolchainTypeRequirement::toolchainType)
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
index 6ad0967..0ae2953 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/RegisteredToolchainsValue.java
@@ -79,10 +79,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof Key)) {
+      if (!(obj instanceof Key that)) {
         return false;
       }
-      Key that = (Key) obj;
       return Objects.equals(this.configurationKey, that.configurationKey);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ContextGuardedValue.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ContextGuardedValue.java
index 5223e1b..30c1f0a 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ContextGuardedValue.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/core/ContextGuardedValue.java
@@ -46,8 +46,7 @@
           StarlarkSemantics semantics, @Nullable Object clientData) {
         // Filtering of predeclareds is only done at compile time, when the client data is
         // BazelCompileContext and not BazelModuleContext.
-        if (clientData != null && clientData instanceof BazelCompileContext) {
-          BazelCompileContext context = (BazelCompileContext) clientData;
+        if (clientData != null && clientData instanceof BazelCompileContext context) {
           Label label = context.label();
 
           for (PackageIdentifier entry : allowedEntries) {
diff --git a/src/main/java/com/google/devtools/build/lib/util/MaybeCompleteSet.java b/src/main/java/com/google/devtools/build/lib/util/MaybeCompleteSet.java
index 1b9ae71..ef5074a 100644
--- a/src/main/java/com/google/devtools/build/lib/util/MaybeCompleteSet.java
+++ b/src/main/java/com/google/devtools/build/lib/util/MaybeCompleteSet.java
@@ -73,10 +73,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof MaybeCompleteSet)) {
+    if (!(o instanceof MaybeCompleteSet<?> that)) {
       return false;
     }
-    MaybeCompleteSet<?> that = (MaybeCompleteSet<?>) o;
     return Objects.equal(internalSet, that.internalSet);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/util/RegexFilter.java b/src/main/java/com/google/devtools/build/lib/util/RegexFilter.java
index 4e2056f..99bf3b6 100644
--- a/src/main/java/com/google/devtools/build/lib/util/RegexFilter.java
+++ b/src/main/java/com/google/devtools/build/lib/util/RegexFilter.java
@@ -178,11 +178,10 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof RegexFilter)) {
+    if (!(other instanceof RegexFilter otherFilter)) {
       return false;
     }
 
-    RegexFilter otherFilter = (RegexFilter) other;
     if (this.exclusionPattern == null ^ otherFilter.exclusionPattern == null) {
       return false;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/util/ThreadUtils.java b/src/main/java/com/google/devtools/build/lib/util/ThreadUtils.java
index b4f61d9..ed9ff0d 100644
--- a/src/main/java/com/google/devtools/build/lib/util/ThreadUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/util/ThreadUtils.java
@@ -122,10 +122,9 @@
       if (obj == this) {
         return true;
       }
-      if (!(obj instanceof StackTraceAndState)) {
+      if (!(obj instanceof StackTraceAndState that)) {
         return false;
       }
-      StackTraceAndState that = (StackTraceAndState) obj;
       return Arrays.equals(this.trace, that.trace) && this.state.equals(that.state);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/DigestUtils.java b/src/main/java/com/google/devtools/build/lib/vfs/DigestUtils.java
index ac2fa2b..465263c 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/DigestUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/DigestUtils.java
@@ -75,10 +75,9 @@
     public boolean equals(Object object) {
       if (object == this) {
         return true;
-      } else if (!(object instanceof CacheKey)) {
+      } else if (!(object instanceof CacheKey key)) {
         return false;
       } else {
-        CacheKey key = (CacheKey) object;
         return path.equals(key.path)
             && nodeId == key.nodeId
             && changeTime == key.changeTime
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java b/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java
index cd14593..9fafd96 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/Dirent.java
@@ -55,13 +55,12 @@
 
   @Override
   public boolean equals(Object other) {
-    if (!(other instanceof Dirent)) {
+    if (!(other instanceof Dirent otherDirent)) {
       return false;
     }
     if (this == other) {
       return true;
     }
-    Dirent otherDirent = (Dirent) other;
     return name.equals(otherDirent.name) && type.equals(otherDirent.type);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/ModifiedFileSet.java b/src/main/java/com/google/devtools/build/lib/vfs/ModifiedFileSet.java
index 500cd9d..131ea71 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/ModifiedFileSet.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/ModifiedFileSet.java
@@ -79,10 +79,9 @@
     if (o == this) {
       return true;
     }
-    if (!(o instanceof ModifiedFileSet)) {
+    if (!(o instanceof ModifiedFileSet other)) {
       return false;
     }
-    ModifiedFileSet other = (ModifiedFileSet) o;
     return treatEverythingAsModified() == other.treatEverythingAsModified()
         && treatEverythingAsDeleted() == other.treatEverythingAsDeleted()
         && Objects.equals(modified, other.modified);
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Path.java b/src/main/java/com/google/devtools/build/lib/vfs/Path.java
index d1affa7..f4a73ed 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/Path.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/Path.java
@@ -193,10 +193,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof Path)) {
+    if (!(o instanceof Path other)) {
       return false;
     }
-    Path other = (Path) o;
     return fileSystem == other.fileSystem && pathFragment.equals(other.pathFragment);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/Root.java b/src/main/java/com/google/devtools/build/lib/vfs/Root.java
index 8eaf36b..eda52ae 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/Root.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/Root.java
@@ -246,10 +246,9 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof AbsoluteRoot)) {
+      if (!(o instanceof AbsoluteRoot that)) {
         return false;
       }
-      AbsoluteRoot that = (AbsoluteRoot) o;
       return fileSystem.equals(that.fileSystem);
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
index 74fdb77..4e52e41 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/RootedPath.java
@@ -128,10 +128,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof RootedPath)) {
+    if (!(obj instanceof RootedPath other)) {
       return false;
     }
-    RootedPath other = (RootedPath) obj;
     return hashCode == other.hashCode
         && root.equals(other.root)
         && rootRelativePath.equals(other.rootRelativePath);
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java b/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java
index c451cab..e957fda 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/UnixGlob.java
@@ -694,10 +694,9 @@
 
         @Override
         public boolean equals(Object obj) {
-          if (!(obj instanceof GlobTask)) {
+          if (!(obj instanceof GlobTask other)) {
             return false;
           }
-          GlobTask other = (GlobTask) obj;
           return base.equals(other.base) && patternIdx == other.patternIdx;
         }
 
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
index 387d0a8..6f938ed 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerFactory.java
@@ -254,10 +254,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof WorkerFactory)) {
+    if (!(o instanceof WorkerFactory that)) {
       return false;
     }
-    WorkerFactory that = (WorkerFactory) o;
     return workerBaseDir.equals(that.workerBaseDir)
         && workerOptions.useCgroupsOnLinux == that.workerOptions.useCgroupsOnLinux
         && Objects.equals(this.hardenedSandboxOptions, that.hardenedSandboxOptions);
diff --git a/src/main/java/com/google/devtools/build/lib/worker/WorkerPoolConfig.java b/src/main/java/com/google/devtools/build/lib/worker/WorkerPoolConfig.java
index 224e1b0..2160ff2 100644
--- a/src/main/java/com/google/devtools/build/lib/worker/WorkerPoolConfig.java
+++ b/src/main/java/com/google/devtools/build/lib/worker/WorkerPoolConfig.java
@@ -69,10 +69,9 @@
     if (this == o) {
       return true;
     }
-    if (!(o instanceof WorkerPoolConfig)) {
+    if (!(o instanceof WorkerPoolConfig that)) {
       return false;
     }
-    WorkerPoolConfig that = (WorkerPoolConfig) o;
     return workerFactory.equals(that.workerFactory)
         && useNewWorkerPool == that.useNewWorkerPool
         && workerMaxInstances.equals(that.workerMaxInstances)
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 4f28236..02fabc1 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -316,13 +316,11 @@
         ProviderInfo providerInfo = providerInfoBuild.setProviderName(envEntry.getKey()).build();
         providerInfoMap.put(envEntry.getKey(), providerInfo);
       }
-      if (envEntry.getValue() instanceof StarlarkFunction) {
-        StarlarkFunction userDefinedFunction = (StarlarkFunction) envEntry.getValue();
+      if (envEntry.getValue() instanceof StarlarkFunction userDefinedFunction) {
         userDefinedFunctionMap.put(envEntry.getKey(), userDefinedFunction);
       }
-      if (envEntry.getValue() instanceof FakeStructApi) {
+      if (envEntry.getValue() instanceof FakeStructApi namespace) {
         String namespaceName = envEntry.getKey();
-        FakeStructApi namespace = (FakeStructApi) envEntry.getValue();
         putStructFields(
             namespaceName, namespace, ruleFunctions, ruleInfoMap, userDefinedFunctionMap);
       }
@@ -357,11 +355,9 @@
       if (ruleFunctions.containsKey(namespace.getValue(field))) {
         ruleInfoMap.put(
             qualifiedFieldName, ruleFunctions.get(namespace.getValue(field)).getRuleInfo().build());
-      } else if (namespace.getValue(field) instanceof StarlarkFunction) {
-        StarlarkFunction userDefinedFunction = (StarlarkFunction) namespace.getValue(field);
+      } else if (namespace.getValue(field) instanceof StarlarkFunction userDefinedFunction) {
         userDefinedFunctionMap.put(qualifiedFieldName, userDefinedFunction);
-      } else if (namespace.getValue(field) instanceof FakeStructApi) {
-        FakeStructApi innerNamespace = (FakeStructApi) namespace.getValue(field);
+      } else if (namespace.getValue(field) instanceof FakeStructApi innerNamespace) {
         putStructFields(
             qualifiedFieldName, innerNamespace, ruleFunctions, ruleInfoMap, userDefinedFunctionMap);
       }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
index 340bf2f..fa4224f 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkAttrModuleApi.java
@@ -234,8 +234,7 @@
     List<List<String>> allNameGroups = new ArrayList<>();
     for (Object object : providers) {
       List<String> providerNameGroup;
-      if (object instanceof Sequence) {
-        Sequence<?> group = (Sequence<?>) object;
+      if (object instanceof Sequence<?> group) {
         providerNameGroup = parseProviderGroup(group, thread);
         allNameGroups.add(providerNameGroup);
       } else {
@@ -256,12 +255,10 @@
   private static List<String> parseProviderGroup(Sequence<?> group, StarlarkThread thread) {
     List<String> providerNameGroup = new ArrayList<>();
     for (Object object : group) {
-      if (object instanceof ProviderApi) {
-        ProviderApi provider = (ProviderApi) object;
+      if (object instanceof ProviderApi provider) {
         String providerName = providerName(provider, thread);
         providerNameGroup.add(providerName);
-      } else if (object instanceof String) {
-        String legacyProvider = (String) object;
+      } else if (object instanceof String legacyProvider) {
         providerNameGroup.add(legacyProvider);
       }
     }
diff --git a/src/main/java/com/google/devtools/build/skyframe/CycleInfo.java b/src/main/java/com/google/devtools/build/skyframe/CycleInfo.java
index 528eb6c..02a33b1 100644
--- a/src/main/java/com/google/devtools/build/skyframe/CycleInfo.java
+++ b/src/main/java/com/google/devtools/build/skyframe/CycleInfo.java
@@ -140,11 +140,10 @@
     if (this == that) {
       return true;
     }
-    if (!(that instanceof CycleInfo)) {
+    if (!(that instanceof CycleInfo thatCycle)) {
       return false;
     }
 
-    CycleInfo thatCycle = (CycleInfo) that;
     return thatCycle.cycle.equals(this.cycle) && thatCycle.pathToCycle.equals(this.pathToCycle);
   }
 
diff --git a/src/main/java/com/google/devtools/build/skyframe/ErrorInfo.java b/src/main/java/com/google/devtools/build/skyframe/ErrorInfo.java
index fbd17d1..b18a6a4 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ErrorInfo.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ErrorInfo.java
@@ -132,12 +132,10 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof ErrorInfo)) {
+    if (!(obj instanceof ErrorInfo other)) {
       return false;
     }
 
-    ErrorInfo other = (ErrorInfo) obj;
-
     if (!Objects.equals(cycles, other.cycles)) {
       return false;
     }
diff --git a/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java b/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
index a980cd3..e62875e 100644
--- a/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
+++ b/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
@@ -475,10 +475,9 @@
     if (this == other) {
       return true;
     }
-    if (!(other instanceof GroupedDeps)) {
+    if (!(other instanceof GroupedDeps that)) {
       return false;
     }
-    GroupedDeps that = (GroupedDeps) other;
     // Fast paths for inequality.
     if (this.size != that.size
         || this.elements.size() != that.elements.size()
diff --git a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
index 5265ace..b2ef17b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
+++ b/src/main/java/com/google/devtools/build/skyframe/IntVersion.java
@@ -58,10 +58,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof IntVersion)) {
+    if (!(obj instanceof IntVersion other)) {
       return false;
     }
-    IntVersion other = (IntVersion) obj;
     return other.val == val;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skyframe/NodeEntryVisitor.java b/src/main/java/com/google/devtools/build/skyframe/NodeEntryVisitor.java
index 085e853..b6ec5ff 100644
--- a/src/main/java/com/google/devtools/build/skyframe/NodeEntryVisitor.java
+++ b/src/main/java/com/google/devtools/build/skyframe/NodeEntryVisitor.java
@@ -240,9 +240,8 @@
     progressReceiver.enqueueing(key);
 
     var runnable = runnableMakerToUse.make(key);
-    if (quiescingExecutor instanceof MultiThreadPoolsQuiescingExecutor) {
-      MultiThreadPoolsQuiescingExecutor multiThreadPoolsQuiescingExecutor =
-          (MultiThreadPoolsQuiescingExecutor) quiescingExecutor;
+    if (quiescingExecutor
+        instanceof MultiThreadPoolsQuiescingExecutor multiThreadPoolsQuiescingExecutor) {
       ThreadPoolType threadPoolType;
       if (key instanceof CPUHeavySkyKey) {
         threadPoolType = ThreadPoolType.CPU_HEAVY;
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
index 263d0e7..2abbf6e 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
@@ -664,11 +664,10 @@
       valuesMissing = true;
       return false;
     }
-    if (!(maybeWrappedValue instanceof ValueWithMetadata)) {
+    if (!(maybeWrappedValue instanceof ValueWithMetadata wrappedValue)) {
       resultCallback.acceptValue(depKey, maybeWrappedValue);
       return true;
     }
-    ValueWithMetadata wrappedValue = (ValueWithMetadata) maybeWrappedValue;
     if (!wrappedValue.hasError()) {
       resultCallback.acceptValue(depKey, wrappedValue.getValue());
       return true;
@@ -708,10 +707,9 @@
       valuesMissing = true;
       return null;
     }
-    if (!(maybeWrappedValue instanceof ValueWithMetadata)) {
+    if (!(maybeWrappedValue instanceof ValueWithMetadata wrappedValue)) {
       return maybeWrappedValue;
     }
-    ValueWithMetadata wrappedValue = (ValueWithMetadata) maybeWrappedValue;
     if (!wrappedValue.hasError()) {
       return wrappedValue.getValue();
     }
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java
index 3d3f356..b262203 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java
@@ -95,10 +95,9 @@
     if (this == obj) {
       return true;
     }
-    if (!(obj instanceof SkyFunctionName)) {
+    if (!(obj instanceof SkyFunctionName other)) {
       return false;
     }
-    SkyFunctionName other = (SkyFunctionName) obj;
     return name.equals(other.name);
   }
 
diff --git a/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java b/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java
index feb32b1..d65aa84 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java
@@ -110,12 +110,10 @@
       if (this == o) {
         return true;
       }
-      if (!(o instanceof ValueWithEvents)) {
+      if (!(o instanceof ValueWithEvents that)) {
         return false;
       }
 
-      ValueWithEvents that = (ValueWithEvents) o;
-
       // Shallow equals is a middle ground between using default equals, which might miss
       // nested sets with the same elements, and deep equality checking, which would be expensive.
       // All three choices are sound, since shallow equals and default equals are more
diff --git a/src/test/java/com/google/devtools/build/lib/actions/ActionCacheCheckerTest.java b/src/test/java/com/google/devtools/build/lib/actions/ActionCacheCheckerTest.java
index d27d3a0..70a7cfb 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/ActionCacheCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/ActionCacheCheckerTest.java
@@ -1627,10 +1627,9 @@
     @Override
     public FileArtifactValue getOutputMetadata(ActionInput input)
         throws IOException, InterruptedException {
-      if (!(input instanceof Artifact)) {
+      if (!(input instanceof Artifact output)) {
         return null;
       }
-      Artifact output = (Artifact) input;
 
       if (output.isTreeArtifact()) {
         TreeArtifactValue treeArtifactValue = getTreeArtifactValue((SpecialArtifact) output);
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 4938139..8b26fd0 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
@@ -1123,10 +1123,9 @@
     Set<BuildConfigurationKey> cts = new HashSet<>();
     for (Map.Entry<SkyKey, SkyValue> e :
         skyframeExecutor.getEvaluator().getDoneValues().entrySet()) {
-      if (!(e.getKey() instanceof ConfiguredTargetKey)) {
+      if (!(e.getKey() instanceof ConfiguredTargetKey ctKey)) {
         continue;
       }
-      ConfiguredTargetKey ctKey = (ConfiguredTargetKey) e.getKey();
       if (parsed.equals(ctKey.getLabel())) {
         cts.add(ctKey.getConfigurationKey());
       }
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/ParallelVisitorTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/ParallelVisitorTest.java
index 9565954..70b0b48 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/ParallelVisitorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/ParallelVisitorTest.java
@@ -194,10 +194,9 @@
 
     @Override
     public boolean equals(Object obj) {
-      if (!(obj instanceof InputKey)) {
+      if (!(obj instanceof InputKey other)) {
         return false;
       }
-      InputKey other = (InputKey) obj;
       return this.str.equals(other.str);
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyUnitTest.java b/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyUnitTest.java
index 32c8686..dc2c763 100644
--- a/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyUnitTest.java
+++ b/src/test/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategyUnitTest.java
@@ -120,8 +120,7 @@
             (Answer<Void>)
                 inv -> {
                   Object event = inv.getArgument(0);
-                  if (event instanceof DynamicExecutionFinishedEvent) {
-                    DynamicExecutionFinishedEvent newEvent = (DynamicExecutionFinishedEvent) event;
+                  if (event instanceof DynamicExecutionFinishedEvent newEvent) {
                     events.add(newEvent);
                   }
                   return null;
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/AbstractTargetPatternEvaluatorTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/AbstractTargetPatternEvaluatorTest.java
index 50031bb..312f3b0 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/AbstractTargetPatternEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/AbstractTargetPatternEvaluatorTest.java
@@ -134,8 +134,7 @@
     @Override
     public void post(Postable post) {
       super.post(post);
-      if (post instanceof ParsingFailedEvent) {
-        ParsingFailedEvent e = (ParsingFailedEvent) post;
+      if (post instanceof ParsingFailedEvent e) {
         events.add(Pair.of(e.getPattern(), e.getMessage()));
       }
     }
diff --git a/src/test/java/com/google/devtools/build/lib/remote/DiskCacheIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/remote/DiskCacheIntegrationTest.java
index 2c8c8a9..6374e0a 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/DiskCacheIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/DiskCacheIntegrationTest.java
@@ -57,8 +57,7 @@
       new ExtendedEventHandler() {
         @Override
         public void post(Postable obj) {
-          if (obj instanceof ActionUploadFinishedEvent) {
-            var event = (ActionUploadFinishedEvent) obj;
+          if (obj instanceof ActionUploadFinishedEvent event) {
             if (!event.action().getMnemonic().equals("Genrule") || event.store() != Store.AC) {
               return;
             }
diff --git a/src/test/java/com/google/devtools/build/lib/remote/http/HttpCacheClientTest.java b/src/test/java/com/google/devtools/build/lib/remote/http/HttpCacheClientTest.java
index 2b85082..1130455 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/http/HttpCacheClientTest.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/http/HttpCacheClientTest.java
@@ -296,8 +296,7 @@
                   retryScheduler,
                   Retrier.ALLOW_ALL_CALLS);
             });
-    if (socketAddress instanceof DomainSocketAddress) {
-      DomainSocketAddress domainSocketAddress = (DomainSocketAddress) socketAddress;
+    if (socketAddress instanceof DomainSocketAddress domainSocketAddress) {
       URI uri = new URI("http://localhost");
       return HttpCacheClient.create(
           domainSocketAddress,
@@ -310,8 +309,7 @@
           retrier,
           creds,
           authAndTlsOptions);
-    } else if (socketAddress instanceof InetSocketAddress) {
-      InetSocketAddress inetSocketAddress = (InetSocketAddress) socketAddress;
+    } else if (socketAddress instanceof InetSocketAddress inetSocketAddress) {
       URI uri = new URI("http://localhost:" + inetSocketAddress.getPort());
       return HttpCacheClient.create(
           uri,
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
index 2e97759..f449807 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidBuildViewTestCase.java
@@ -271,8 +271,7 @@
   @Nullable
   protected AndroidDeployInfo getAndroidDeployInfo(Artifact artifact) throws IOException {
     Action generatingAction = getGeneratingAction(artifact);
-    if (generatingAction instanceof AndroidDeployInfoAction) {
-      AndroidDeployInfoAction writeAction = (AndroidDeployInfoAction) generatingAction;
+    if (generatingAction instanceof AndroidDeployInfoAction writeAction) {
       return writeAction.getDeployInfo();
     }
     return null;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingFunctionParserTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingFunctionParserTest.java
index 9ec1421..2d7847f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingFunctionParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/config/PlatformMappingFunctionParserTest.java
@@ -486,10 +486,9 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o == null || !(o instanceof Key)) {
+      if (o == null || !(o instanceof Key other)) {
         return false;
       }
-      Key other = (Key) o;
       return Objects.equals(mainRepoMapping, other.mainRepoMapping)
           && Objects.equals(lines, other.lines);
     }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DynamicCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DynamicCodecTest.java
index 88af573..fe20074 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DynamicCodecTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/DynamicCodecTest.java
@@ -50,10 +50,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof SimpleExample)) {
+      if (!(other instanceof SimpleExample that)) {
         return false;
       }
-      SimpleExample that = (SimpleExample) other;
       return Objects.equals(elt, that.elt) && Objects.equals(elt2, that.elt2) && x == that.x;
     }
   }
@@ -77,13 +76,12 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ExampleSubclass)) {
+      if (!(other instanceof ExampleSubclass that)) {
         return false;
       }
       if (!super.equals(other)) {
         return false;
       }
-      ExampleSubclass that = (ExampleSubclass) other;
       return Objects.equals(elt, that.elt);
     }
   }
@@ -115,10 +113,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ExampleSmallPrimitives)) {
+      if (!(other instanceof ExampleSmallPrimitives that)) {
         return false;
       }
-      ExampleSmallPrimitives that = (ExampleSmallPrimitives) other;
       return v == that.v && bit == that.bit && b == that.b && s == that.s && c == that.c;
     }
   }
@@ -147,10 +144,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ExampleMediumPrimitives)) {
+      if (!(other instanceof ExampleMediumPrimitives that)) {
         return false;
       }
-      ExampleMediumPrimitives that = (ExampleMediumPrimitives) other;
       return i == that.i && f == that.f;
     }
   }
@@ -179,10 +175,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ExampleLargePrimitives)) {
+      if (!(other instanceof ExampleLargePrimitives that)) {
         return false;
       }
-      ExampleLargePrimitives that = (ExampleLargePrimitives) other;
       return l == that.l && d == that.d;
     }
   }
@@ -215,10 +210,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof ArrayExample)) {
+      if (!(other instanceof ArrayExample that)) {
         return false;
       }
-      ArrayExample that = (ArrayExample) other;
       return Arrays.equals(text, that.text)
           && Arrays.equals(numbers, that.numbers)
           && Arrays.equals(chars, that.chars)
@@ -250,10 +244,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof NestedArrayExample)) {
+      if (!(other instanceof NestedArrayExample that)) {
         return false;
       }
-      NestedArrayExample that = (NestedArrayExample) other;
       return Arrays.deepEquals(numbers, that.numbers);
     }
   }
@@ -286,10 +279,9 @@
     public boolean equals(Object other) {
       // Integrity check. Not really part of equals.
       assertThat(b.a).isEqualTo(this);
-      if (!(other instanceof CycleA)) {
+      if (!(other instanceof CycleA that)) {
         return false;
       }
-      CycleA that = (CycleA) other;
       // Consistency check. Not really part of equals.
       assertThat(that.b.a).isEqualTo(that);
       return value == that.value && b.value() == that.b.value;
@@ -356,10 +348,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object object) {
-      if (!(object instanceof PrimitiveExample)) {
+      if (!(object instanceof PrimitiveExample that)) {
         return false;
       }
-      PrimitiveExample that = (PrimitiveExample) object;
       return booleanValue == that.booleanValue
           && intValue == that.intValue
           && doubleValue == that.doubleValue
@@ -495,10 +486,9 @@
     @SuppressWarnings("EqualsHashCode") // Testing
     @Override
     public boolean equals(Object other) {
-      if (!(other instanceof CustomHandlerExample)) {
+      if (!(other instanceof CustomHandlerExample that)) {
         return false;
       }
-      CustomHandlerExample that = (CustomHandlerExample) other;
       return Objects.equals(text, that.text) && Objects.equals(tricky, that.tricky);
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FileSymlinkExceptionCodecTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FileSymlinkExceptionCodecTest.java
index 6229aae..303c234 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FileSymlinkExceptionCodecTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/serialization/FileSymlinkExceptionCodecTest.java
@@ -55,15 +55,12 @@
       verifyDeserialization =
           (deserialized, subject) -> {
             assertThat(deserialized).hasMessageThat().isEqualTo(subject.getMessage());
-            if (deserialized instanceof FileSymlinkInfiniteExpansionException) {
-              FileSymlinkInfiniteExpansionException fsDeserialized =
-                  (FileSymlinkInfiniteExpansionException) deserialized;
+            if (deserialized instanceof FileSymlinkInfiniteExpansionException fsDeserialized) {
               FileSymlinkInfiniteExpansionException fsSubject =
                   (FileSymlinkInfiniteExpansionException) subject;
               assertThat(fsDeserialized.getPathToChain()).isEqualTo(fsSubject.getPathToChain());
               assertThat(fsDeserialized.getChain()).isEqualTo(fsSubject.getChain());
-            } else if (deserialized instanceof FileSymlinkCycleException) {
-              FileSymlinkCycleException fsDeserialized = (FileSymlinkCycleException) deserialized;
+            } else if (deserialized instanceof FileSymlinkCycleException fsDeserialized) {
               FileSymlinkCycleException fsSubject = (FileSymlinkCycleException) subject;
               assertThat(fsDeserialized.getPathToCycle()).isEqualTo(fsSubject.getPathToCycle());
               assertThat(fsDeserialized.getCycle()).isEqualTo(fsSubject.getCycle());
diff --git a/src/test/java/com/google/devtools/build/lib/util/ObjectGraphTraverserTest.java b/src/test/java/com/google/devtools/build/lib/util/ObjectGraphTraverserTest.java
index 1d20ada..9155962 100644
--- a/src/test/java/com/google/devtools/build/lib/util/ObjectGraphTraverserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/ObjectGraphTraverserTest.java
@@ -57,11 +57,10 @@
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof Edge)) {
+      if (!(o instanceof Edge that)) {
         return false;
       }
 
-      Edge that = (Edge) o;
       return that.from == from && that.to == to && that.type == type;
     }