Use regexp to use JEP394 where IntelliJ inspection fails.

PCRE regexp: `(\w+) instanceof ([A-Z]\w+)((\)|;)?.*\n.*)\(\2\) \1`

Replaced with: `$1 instanceof $2 roflmao$3roflmao`

Then processed with a Ruby script to rewrite `roflmao` with the name of the class, lowercasing the first letter.

Then I used the IntelliJ "Remove unnecessary parentheses" inspection.

#jdk21 #jep391

PiperOrigin-RevId: 628255645
Change-Id: I74031b97efa72636fdccb1c2473bc3a5f92ad7e9
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 583e0c5..5e3ca13 100644
--- a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
+++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
@@ -95,8 +95,8 @@
     for (Entry<String, Object> entry : globals.entrySet()) {
       String name = entry.getKey();
       Object obj = entry.getValue();
-      if (obj instanceof GuardedValue) {
-        obj = ((GuardedValue) obj).getObject();
+      if (obj instanceof GuardedValue guardedValue) {
+        obj = guardedValue.getObject();
       }
 
       Value.Builder value = Value.newBuilder();
@@ -175,8 +175,8 @@
     }
 
     // annotated Java method?
-    if (x instanceof BuiltinFunction) {
-      return valueFromAnnotation(((BuiltinFunction) x).getAnnotation());
+    if (x instanceof BuiltinFunction builtinFunction) {
+      return valueFromAnnotation(builtinFunction.getAnnotation());
     }
 
     // application-defined callable?  Treat as def f(**kwargs).
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
index 3169b37..a94ae5e 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
@@ -230,8 +230,8 @@
       // We cannot print anything useful here other than "optional". Let's assume the doc string for
       // the attribute explains the details.
       return null;
-    } else if (value instanceof TriState) {
-      switch ((TriState) value) {
+    } else if (value instanceof TriState triState) {
+      switch (triState) {
         case AUTO:
           return "-1";
         case NO:
diff --git a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
index 60d2cce..6b8dcb7 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/AbstractAction.java
@@ -253,8 +253,8 @@
 
   @Override
   public Collection<Artifact> getOutputs() {
-    return outputs instanceof Artifact
-        ? ImmutableSet.of((Artifact) outputs)
+    return outputs instanceof Artifact artifact
+        ? ImmutableSet.of(artifact)
         : new OutputSet((Artifact[]) outputs);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
index 3c94a5d..9cd1247 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionCacheChecker.java
@@ -534,8 +534,8 @@
           action.discoversInputs(),
           "Actions that don't know their inputs must discover them: %s",
           action);
-      if (action instanceof ActionCacheAwareAction
-          && ((ActionCacheAwareAction) action).storeInputsExecPathsInActionCache()) {
+      if (action instanceof ActionCacheAwareAction actionCacheAwareAction
+          && actionCacheAwareAction.storeInputsExecPathsInActionCache()) {
         actionInputs = NestedSetBuilder.wrap(Order.STABLE_ORDER, resolvedCacheArtifacts);
       } else {
         actionInputs =
@@ -764,8 +764,8 @@
     }
 
     boolean storeAllInputsInActionCache =
-        action instanceof ActionCacheAwareAction
-            && ((ActionCacheAwareAction) action).storeInputsExecPathsInActionCache();
+        action instanceof ActionCacheAwareAction actionCacheAwareAction
+            && actionCacheAwareAction.storeInputsExecPathsInActionCache();
     ImmutableSet<Artifact> excludePathsFromActionCache =
         !storeAllInputsInActionCache && action.discoversInputs()
             ? action.getMandatoryInputs().toSet()
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
index f643093..dae7730 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutedEvent.java
@@ -262,8 +262,8 @@
       }
     }
     try {
-      if (action instanceof CommandAction) {
-        actionBuilder.addAllCommandLine(((CommandAction) action).getArguments());
+      if (action instanceof CommandAction commandAction) {
+        actionBuilder.addAllCommandLine(commandAction.getArguments());
       }
     } catch (CommandLineExpansionException e) {
       // Command-line not available, so just not report it
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
index 3dc0a28..8232e8d 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionContext.java
@@ -508,8 +508,8 @@
     try {
       fileOutErr.close();
     } finally {
-      if (actionFileSystem instanceof Closeable) {
-        ((Closeable) actionFileSystem).close();
+      if (actionFileSystem instanceof Closeable closeable) {
+        closeable.close();
       }
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
index 0ea88b8..80466db 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionExecutionException.java
@@ -143,8 +143,8 @@
 
     DetailedExitCode code =
         DetailedExitCode.of(exception.getFailureDetail(action.describe() + " failed: " + message));
-    if (exception instanceof LostInputsExecException) {
-      return ((LostInputsExecException) exception).fromExecException(message, action, code);
+    if (exception instanceof LostInputsExecException lostInputsExecException) {
+      return lostInputsExecException.fromExecException(message, action, code);
     }
 
     return fromExecException(exception, message, action, code);
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 214f2aa..e245427 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
@@ -157,8 +157,8 @@
     Preconditions.checkNotNull(input, "input");
     Preconditions.checkNotNull(execRoot, "execRoot");
 
-    return (input instanceof Artifact)
-        ? ((Artifact) input).getPath()
+    return input instanceof Artifact artifact
+        ? artifact.getPath()
         : execRoot.getRelative(input.getExecPath());
   }
 }
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 f9613fd..9bfb78b 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
@@ -374,8 +374,8 @@
      * consistent across calls to {@link #setGeneratingActionKey} and also serialization.
      */
     private static Object getOwnerToUseForHashCode(Object owner) {
-      return owner instanceof ActionLookupData
-          ? ((ActionLookupData) owner).getActionLookupKey()
+      return owner instanceof ActionLookupData actionLookupData
+          ? actionLookupData.getActionLookupKey()
           : owner;
     }
 
@@ -1408,8 +1408,8 @@
 
     @Override
     public boolean equals(Object obj) {
-      return obj instanceof OwnerlessArtifactWrapper
-          && this.artifact.equalsWithoutOwner(((OwnerlessArtifactWrapper) obj).artifact);
+      return obj instanceof OwnerlessArtifactWrapper ownerlessArtifactWrapper
+          && this.artifact.equalsWithoutOwner(ownerlessArtifactWrapper.artifact);
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ArtifactPathResolver.java b/src/main/java/com/google/devtools/build/lib/actions/ArtifactPathResolver.java
index 08a7e67..6355c8b 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ArtifactPathResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ArtifactPathResolver.java
@@ -73,8 +73,8 @@
 
     @Override
     public Path toPath(ActionInput actionInput) {
-      if (actionInput instanceof Artifact) {
-        return ((Artifact) actionInput).getPath();
+      if (actionInput instanceof Artifact artifact) {
+        return artifact.getPath();
       }
       return execRoot.getRelative(actionInput.getExecPath());
     }
@@ -104,8 +104,8 @@
 
     @Override
     public Path toPath(ActionInput input) {
-      if (input instanceof Artifact) {
-        return fileSystem.getPath(((Artifact) input).getPath().asFragment());
+      if (input instanceof Artifact artifact) {
+        return fileSystem.getPath(artifact.getPath().asFragment());
       }
       return execRoot.getRelative(input.getExecPath());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
index 5845a14..3fb66a2 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLineItem.java
@@ -96,8 +96,8 @@
     // Since StarlarkValue should be moved out of Bazel, this refactoring would be blocked on making
     // a BuildStarlarkValue subinterface for Bazel-specific Starlark types. It would then be
     // BuildStarlarkValue, rather than StarlarkValue, that extends CommandLineItem.
-    if (object instanceof CommandLineItem) {
-      return ((CommandLineItem) object).expandToCommandLine();
+    if (object instanceof CommandLineItem commandLineItem) {
+      return commandLineItem.expandToCommandLine();
     } else {
       return object.toString();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java b/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
index 905d45f..0ea0307 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/CommandLines.java
@@ -499,8 +499,8 @@
         CommandLine commandLine;
         ParamFileInfo paramFileInfo = null;
 
-        if (obj instanceof CommandLine) {
-          commandLine = (CommandLine) obj;
+        if (obj instanceof CommandLine c) {
+          commandLine = c;
           if (i + 1 < commandLines.length && commandLines[i + 1] instanceof ParamFileInfo) {
             paramFileInfo = (ParamFileInfo) commandLines[++i];
           }
@@ -530,8 +530,8 @@
     public Iterable<String> arguments(
         @Nullable ArtifactExpander artifactExpander, PathMapper pathMapper)
         throws CommandLineExpansionException, InterruptedException {
-      if (arg instanceof PathStrippable) {
-        return ImmutableList.of(((PathStrippable) arg).expand(pathMapper::map));
+      if (arg instanceof PathStrippable pathStrippable) {
+        return ImmutableList.of(pathStrippable.expand(pathMapper::map));
       }
       return ImmutableList.of(CommandLineItem.expandToCommandLine(arg));
     }
diff --git a/src/main/java/com/google/devtools/build/lib/actions/HasDigest.java b/src/main/java/com/google/devtools/build/lib/actions/HasDigest.java
index b4951bc..671dbaa 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/HasDigest.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/HasDigest.java
@@ -38,8 +38,8 @@
 
     @Override
     public boolean equals(Object other) {
-      if (other instanceof ByteStringDigest) {
-        return bytes.equals(((ByteStringDigest) other).bytes);
+      if (other instanceof ByteStringDigest byteStringDigest) {
+        return bytes.equals(byteStringDigest.bytes);
       }
       return false;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BazelRuleAnalysisThreadContext.java b/src/main/java/com/google/devtools/build/lib/analysis/BazelRuleAnalysisThreadContext.java
index a35d112..2176762 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BazelRuleAnalysisThreadContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BazelRuleAnalysisThreadContext.java
@@ -63,8 +63,8 @@
   public static BazelRuleAnalysisThreadContext fromOrFail(StarlarkThread thread, String what)
       throws EvalException {
     BazelStarlarkContext ctx = thread.getThreadLocal(BazelStarlarkContext.class);
-    if (ctx instanceof BazelRuleAnalysisThreadContext) {
-      return (BazelRuleAnalysisThreadContext) ctx;
+    if (ctx instanceof BazelRuleAnalysisThreadContext bazelRuleAnalysisThreadContext) {
+      return bazelRuleAnalysisThreadContext;
     }
     throw Starlark.errorf("%s can only be called from a rule or aspect implementation", what);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 4525afb..ed90264 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -775,8 +775,8 @@
     for (Artifact.DerivedArtifact artifact :
         provider.getTransitiveExtraActionArtifacts().toList()) {
       ActionLookupKey owner = artifact.getArtifactOwner();
-      if (owner instanceof AspectKey) {
-        if (aspectClasses.contains(((AspectKey) owner).getAspectClass())) {
+      if (owner instanceof AspectKey aspectKey) {
+        if (aspectClasses.contains(aspectKey.getAspectClass())) {
           artifacts.add(artifact);
         }
       }
@@ -798,8 +798,8 @@
       final boolean isExclusive = topLevelOptions.runTestsExclusively();
       for (ConfiguredTarget configuredTarget : allTestTargets) {
         Target target = labelToTargetMap.get(configuredTarget.getLabel());
-        if (target instanceof Rule) {
-          if (isExclusive || TargetUtils.isExclusiveTestRule((Rule) target)) {
+        if (target instanceof Rule rule) {
+          if (isExclusive || TargetUtils.isExclusiveTestRule(rule)) {
             exclusiveTests.add(configuredTarget);
           } else if (TargetUtils.isExclusiveIfLocalTestRule((Rule) target)
               && TargetUtils.isLocalTestRule((Rule) target)) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
index 8581418..a5cbbae 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java
@@ -198,8 +198,8 @@
       // Initialize every StarlarkApiProvider
       for (int i = 0; i < providerMap.getProviderCount(); i++) {
         Object obj = providerMap.getProviderInstanceAt(i);
-        if (obj instanceof StarlarkApiProvider) {
-          ((StarlarkApiProvider) obj).init(providerMap);
+        if (obj instanceof StarlarkApiProvider starlarkApiProvider) {
+          starlarkApiProvider.init(providerMap);
         }
       }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolutionHelpers.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolutionHelpers.java
index 21476a6..916cf03 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolutionHelpers.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolutionHelpers.java
@@ -112,12 +112,12 @@
       addToolchainDeps(toolchainContexts, outgoingLabels);
     } else if (target instanceof InputFile || target instanceof EnvironmentGroup) {
       addVisibilityDepLabels(target.getVisibilityDependencyLabels(), outgoingLabels);
-    } else if (target instanceof Rule) {
-      fromRule = (Rule) target;
+    } else if (target instanceof Rule rule) {
+      fromRule = rule;
       attributeMap = ConfiguredAttributeMapper.of(fromRule, configConditions, config);
       visitRule(node, aspects, attributeMap, toolchainContexts, outgoingLabels);
-    } else if (target instanceof PackageGroup) {
-      outgoingLabels.putAll(VISIBILITY_DEPENDENCY, ((PackageGroup) target).getIncludes());
+    } else if (target instanceof PackageGroup packageGroup) {
+      outgoingLabels.putAll(VISIBILITY_DEPENDENCY, packageGroup.getIncludes());
     } else {
       throw new IllegalStateException(target.getLabel().toString());
     }
@@ -372,8 +372,8 @@
         Object defaultValue = attribute.getDefaultValue(rule);
         attributeValue =
             type.cast(
-                defaultValue instanceof ComputedDefault
-                    ? ((ComputedDefault) defaultValue).getDefault(attributeMap)
+                defaultValue instanceof ComputedDefault computedDefault
+                    ? computedDefault.getDefault(attributeMap)
                     : defaultValue);
       }
     } else if (attribute.isLateBound()) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java
index 72b778a..4cc129d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/PackageSpecificationProvider.java
@@ -99,10 +99,10 @@
   @Override
   public boolean targetInAllowlist(Object target) throws EvalException, LabelSyntaxException {
     Label targetLabel;
-    if (target instanceof String) {
-      targetLabel = Label.parseCanonical((String) target);
-    } else if (target instanceof Label) {
-      targetLabel = (Label) target;
+    if (target instanceof String string) {
+      targetLabel = Label.parseCanonical(string);
+    } else if (target instanceof Label label) {
+      targetLabel = label;
     } else {
       throw Starlark.errorf(
           "expected string or label for 'target' instead of %s", Starlark.type(target));
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 56e2f14..234b3aa 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -1608,10 +1608,10 @@
 
         // TODO(adonovan): define in terms of Starlark.len?
         boolean isEmpty = false;
-        if (attributeValue instanceof List) {
-          isEmpty = ((List<?>) attributeValue).isEmpty();
-        } else if (attributeValue instanceof Map) {
-          isEmpty = ((Map<?, ?>) attributeValue).isEmpty();
+        if (attributeValue instanceof List<?> list) {
+          isEmpty = list.isEmpty();
+        } else if (attributeValue instanceof Map<?, ?> map) {
+          isEmpty = map.isEmpty();
         }
         if (isEmpty) {
           reporter.attributeError(attr.getName(), "attribute must be non empty");
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 ae63d1b..88e2eff 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
@@ -379,8 +379,8 @@
         // It'd be nice to build this into ActionInput's CommandLine interface so we don't have
         // to explicitly check if an object is a ActionInput. Unfortunately that would require
         // a lot more dependencies on the Java library ActionInput is built into.
-        return pathMapper != null && object instanceof ActionInput
-            ? pathMapper.getMappedExecPathString((ActionInput) object)
+        return pathMapper != null && object instanceof ActionInput actionInput
+            ? pathMapper.getMappedExecPathString(actionInput)
             : CommandLineItem.expandToCommandLine(object);
       }
 
@@ -1298,11 +1298,11 @@
     String previousFlag = null;
     for (int i = 0; i < count; ) {
       Object arg = arguments.get(i++);
-      if (arg instanceof TreeFileArtifactArgvFragment) {
-        arg = substituteTreeFileArtifactArgvFragment((TreeFileArtifactArgvFragment) arg);
+      if (arg instanceof TreeFileArtifactArgvFragment treeFileArtifactArgvFragment) {
+        arg = substituteTreeFileArtifactArgvFragment(treeFileArtifactArgvFragment);
       }
-      if (arg instanceof NestedSet) {
-        evalSimpleVectorArg(((NestedSet<?>) arg).toList(), builder, pathMapper, previousFlag);
+      if (arg instanceof NestedSet<?> nestedSet) {
+        evalSimpleVectorArg(nestedSet.toList(), builder, pathMapper, previousFlag);
       } else if (arg instanceof Iterable) {
         evalSimpleVectorArg((Iterable<?>) arg, builder, pathMapper, previousFlag);
       } else if (arg instanceof ArgvFragment) {
@@ -1312,17 +1312,17 @@
         } else {
           i = ((ArgvFragment) arg).eval(arguments, i, builder, pathMapper);
         }
-      } else if (arg instanceof ActionInput) {
-        builder.add(pathMapper.getMappedExecPathString((ActionInput) arg));
-      } else if (arg instanceof PathFragment) {
-        builder.add(pathMapper.map((PathFragment) arg).getPathString());
+      } else if (arg instanceof ActionInput actionInput) {
+        builder.add(pathMapper.getMappedExecPathString(actionInput));
+      } else if (arg instanceof PathFragment pathFragment) {
+        builder.add(pathMapper.map(pathFragment).getPathString());
       } else {
         builder.add(CommandLineItem.expandToCommandLine(arg));
       }
       // Track the last scalar string argument (e.g. "--javacopts") so that the PathMapper can
       // heuristically map subsequent argument collections that contain paths.
-      if (arg instanceof String) {
-        previousFlag = (String) arg;
+      if (arg instanceof String string) {
+        previousFlag = string;
       } else {
         previousFlag = null;
       }
@@ -1337,8 +1337,8 @@
       String previousFlag) {
     ExceptionlessMapFn<Object> mapFn = pathMapper.getMapFn(previousFlag);
     for (Object value : arg) {
-      if (value instanceof ActionInput) {
-        builder.add(pathMapper.getMappedExecPathString((ActionInput) value));
+      if (value instanceof ActionInput actionInput) {
+        builder.add(pathMapper.getMappedExecPathString(actionInput));
       } else {
         mapFn.expandToCommandLine(value, builder::add);
       }
@@ -1365,8 +1365,8 @@
     int count = arguments.size();
     for (int i = 0; i < count; ) {
       Object arg = arguments.get(i++);
-      if (arg instanceof TreeFileArtifactArgvFragment) {
-        arg = substituteTreeFileArtifactArgvFragment((TreeFileArtifactArgvFragment) arg);
+      if (arg instanceof TreeFileArtifactArgvFragment treeFileArtifactArgvFragment) {
+        arg = substituteTreeFileArtifactArgvFragment(treeFileArtifactArgvFragment);
       }
       if (arg instanceof NestedSet) {
         actionKeyContext.addNestedSetToFingerprint(fingerprint, (NestedSet<Object>) arg);
@@ -1374,8 +1374,8 @@
         for (Object value : (Iterable<Object>) arg) {
           fingerprint.addString(CommandLineItem.expandToCommandLine(value));
         }
-      } else if (arg instanceof ArgvFragment) {
-        i = ((ArgvFragment) arg).addToFingerprint(arguments, i, actionKeyContext, fingerprint);
+      } else if (arg instanceof ArgvFragment argvFragment) {
+        i = argvFragment.addToFingerprint(arguments, i, actionKeyContext, fingerprint);
       } else {
         fingerprint.addString(CommandLineItem.expandToCommandLine(arg));
       }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
index a7b08e1..77a1f2c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/SpawnAction.java
@@ -254,8 +254,8 @@
     } catch (CommandLineExpansionException e) {
       throw createCommandLineException(e);
     } catch (ExecException e) {
-      if (e instanceof SpawnExecException) {
-        throw ((SpawnExecException) e).toActionExecutionException(this);
+      if (e instanceof SpawnExecException spawnExecException) {
+        throw spawnExecException.toActionExecutionException(this);
       }
       throw ActionExecutionException.fromExecException(e, this);
     }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapper.java
index 1c8bfc6..6336171 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/actions/StrippingPathMapper.java
@@ -111,8 +111,8 @@
     final StringStripper argStripper = new StringStripper(outputRoot.getPathString());
     final ExceptionlessMapFn<Object> structuredArgStripper =
         (object, args) -> {
-          if (object instanceof String) {
-            args.accept(argStripper.strip((String) object));
+          if (object instanceof String string) {
+            args.accept(argStripper.strip(string));
           } else {
             args.accept(CommandLineItem.expandToCommandLine(object));
           }
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 aab9af5..77c39d9 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
@@ -573,8 +573,8 @@
 
       if (result instanceof NoneType) {
         return ImmutableMap.of();
-      } else if (result instanceof Dict) {
-        if (((Dict<?, ?>) result).isEmpty()) {
+      } else if (result instanceof Dict<?, ?> dict) {
+        if (dict.isEmpty()) {
           return ImmutableMap.of();
         }
         try {
@@ -609,8 +609,8 @@
           return null;
         }
 
-      } else if (result instanceof Sequence) {
-        if (((Sequence<?>) result).isEmpty()) {
+      } else if (result instanceof Sequence<?> sequence) {
+        if (sequence.isEmpty()) {
           return ImmutableMap.of();
         }
         ImmutableMap.Builder<String, Map<String, Object>> builder = ImmutableMap.builder();
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionFactories.java b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionFactories.java
index 33dcda4..6774117 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionFactories.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionFactories.java
@@ -35,8 +35,8 @@
       return NoTransition.createFactory();
     } else if (transition instanceof NullTransition) {
       return NullTransition.createFactory();
-    } else if (transition instanceof SplitTransition) {
-      return split((SplitTransition) transition);
+    } else if (transition instanceof SplitTransition splitTransition) {
+      return split(splitTransition);
     }
     return new AutoValue_TransitionFactories_IdentityFactory<T>(transition);
   }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java
index c6abb56..215b586 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/ComposingTransition.java
@@ -102,8 +102,8 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof ComposingTransition
-        && ((ComposingTransition) other).transition1.equals(this.transition1)
+    return other instanceof ComposingTransition composingTransition
+        && composingTransition.transition1.equals(this.transition1)
         && ((ComposingTransition) other).transition2.equals(this.transition2);
   }
 
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 03041a5..4579e40 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
@@ -312,16 +312,16 @@
       Dict.Builder<String, Object> dict, Object key, Object providerInstance) {
     // The key may be of many types, but we need a string for the intended use.
     String keyAsString;
-    if (key instanceof String) {
-      keyAsString = (String) key;
+    if (key instanceof String string) {
+      keyAsString = string;
     } else if (key instanceof Provider.Key) {
       if (key instanceof StarlarkProvider.Key k) {
         keyAsString = k.getExtensionLabel() + "%" + k.getExportedName();
       } else {
         keyAsString = key.toString();
       }
-    } else if (key instanceof Class) {
-      keyAsString = ((Class<?>) key).getSimpleName();
+    } else if (key instanceof Class<?> aClass) {
+      keyAsString = aClass.getSimpleName();
     } else {
       // ???
       return;
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 20166c5..76b5430 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
@@ -113,13 +113,13 @@
 
   @Override
   protected void addExtraStarlarkKeys(Consumer<String> result) {
-    if (base instanceof AbstractConfiguredTarget) {
-      ((AbstractConfiguredTarget) base).addExtraStarlarkKeys(result);
+    if (base instanceof AbstractConfiguredTarget abstractConfiguredTarget) {
+      abstractConfiguredTarget.addExtraStarlarkKeys(result);
     }
     for (int i = 0; i < nonBaseProviders.getProviderCount(); i++) {
       Object classAt = nonBaseProviders.getProviderKeyAt(i);
-      if (classAt instanceof String) {
-        result.accept((String) classAt);
+      if (classAt instanceof String string) {
+        result.accept(string);
       }
     }
     result.accept(AbstractConfiguredTarget.ACTIONS_FIELD_NAME);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
index d78f147..2db33de 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/configuredtargets/RuleConfiguredTarget.java
@@ -110,8 +110,8 @@
     // Initialize every StarlarkApiProvider
     for (int i = 0; i < providers.getProviderCount(); i++) {
       Object obj = providers.getProviderInstanceAt(i);
-      if (obj instanceof StarlarkApiProvider) {
-        ((StarlarkApiProvider) obj).init(this);
+      if (obj instanceof StarlarkApiProvider starlarkApiProvider) {
+        starlarkApiProvider.init(this);
       }
     }
 
@@ -218,8 +218,8 @@
   protected void addExtraStarlarkKeys(Consumer<String> result) {
     for (int i = 0; i < providers.getProviderCount(); i++) {
       Object classAt = providers.getProviderKeyAt(i);
-      if (classAt instanceof String) {
-        result.accept((String) classAt);
+      if (classAt instanceof String string) {
+        result.accept(string);
       }
     }
     result.accept(ACTIONS_FIELD_NAME);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
index 3d8696e..e30cbbd 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/ConstraintSemantics.java
@@ -132,8 +132,8 @@
    *     matching group is found
    */
   static EnvironmentGroup getEnvironmentGroup(Target envTarget) throws EnvironmentLookupException {
-    if (!(envTarget instanceof Rule)
-        || !((Rule) envTarget).getRuleClass().equals(ConstraintConstants.ENVIRONMENT_RULE)) {
+    if (!(envTarget instanceof Rule rule)
+        || !rule.getRuleClass().equals(ConstraintConstants.ENVIRONMENT_RULE)) {
       throw createEnvironmentLookupException(
           envTarget.getLabel() + " is not a valid environment definition",
           Code.INVALID_ENVIRONMENT);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/RuleContextConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/RuleContextConstraintSemantics.java
index 7e96585..8b2bfa8 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/RuleContextConstraintSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/RuleContextConstraintSemantics.java
@@ -753,8 +753,8 @@
         // while dep.getLabel() refers to the target the alias points to. So add this quick check
         // to make sure we're comparing the same labels.
         Label depLabelInSelect =
-            (dep instanceof ConfiguredTarget)
-                ? ((ConfiguredTarget) dep).getOriginalLabel()
+            dep instanceof ConfiguredTarget configuredTarget
+                ? configuredTarget.getOriginalLabel()
                 : dep.getLabel();
         // Output files inherit the environment spec of their generating rule.
         if (dep instanceof OutputFileConfiguredTarget) {
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java b/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java
index 1e4939d..4d8ea6c 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/constraints/TopLevelConstraintSemantics.java
@@ -436,8 +436,8 @@
     topLevelTarget = topLevelTarget.getActual();
     // Now check the target against expected environments.
     TransitiveInfoCollection asProvider;
-    if (topLevelTarget instanceof OutputFileConfiguredTarget) {
-      asProvider = ((OutputFileConfiguredTarget) topLevelTarget).getGeneratingRule();
+    if (topLevelTarget instanceof OutputFileConfiguredTarget outputFileConfiguredTarget) {
+      asProvider = outputFileConfiguredTarget.getGeneratingRule();
     } else {
       asProvider = topLevelTarget;
     }
@@ -491,8 +491,8 @@
       Collection<MissingEnvironment> missingEnvironments) {
     StringJoiner msg = new StringJoiner("\n");
     ConfiguredTarget targetWithProvider = configuredTarget.getActual();
-    if (targetWithProvider instanceof OutputFileConfiguredTarget) {
-      targetWithProvider = ((OutputFileConfiguredTarget) targetWithProvider).getGeneratingRule();
+    if (targetWithProvider instanceof OutputFileConfiguredTarget outputFileConfiguredTarget) {
+      targetWithProvider = outputFileConfiguredTarget.getGeneratingRule();
     }
     SupportedEnvironmentsProvider supportedEnvironments =
         targetWithProvider.getProvider(SupportedEnvironmentsProvider.class);
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/BuildConfigurationKeyProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/BuildConfigurationKeyProducer.java
index 77c9936..10fa563 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/producers/BuildConfigurationKeyProducer.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/BuildConfigurationKeyProducer.java
@@ -91,8 +91,8 @@
       sink.acceptPlatformMappingError(exception);
       return;
     }
-    if (value instanceof PlatformMappingValue) {
-      this.platformMappingValue = (PlatformMappingValue) value;
+    if (value instanceof PlatformMappingValue platformMappingValue) {
+      this.platformMappingValue = platformMappingValue;
       return;
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/producers/ConfiguredTargetAndDataProducer.java b/src/main/java/com/google/devtools/build/lib/analysis/producers/ConfiguredTargetAndDataProducer.java
index 9843f14..840e662 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/producers/ConfiguredTargetAndDataProducer.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/producers/ConfiguredTargetAndDataProducer.java
@@ -188,12 +188,12 @@
 
   @Override
   public void accept(SkyValue value) {
-    if (value instanceof BuildConfigurationValue) {
-      this.configurationValue = (BuildConfigurationValue) value;
+    if (value instanceof BuildConfigurationValue buildConfigurationValue) {
+      this.configurationValue = buildConfigurationValue;
       return;
     }
-    if (value instanceof PackageValue) {
-      this.pkg = ((PackageValue) value).getPackage();
+    if (value instanceof PackageValue packageValue) {
+      this.pkg = packageValue.getPackage();
       return;
     }
     throw new IllegalArgumentException("unexpected value: " + value);
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 0ba66c0..664fa58 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
@@ -107,8 +107,8 @@
 
   private void acceptParsedFlagsValue(
       @Nullable SkyValue value, @Nullable OptionsParsingException exception) {
-    if (value != null && value instanceof ParsedFlagsValue) {
-      this.parsedFlags = ((ParsedFlagsValue) value).flags();
+    if (value != null && value instanceof ParsedFlagsValue parsedFlagsValue) {
+      this.parsedFlags = parsedFlagsValue.flags();
       return;
     }
     if (exception != null) {
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 23cd0f0..c63f650 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
@@ -477,8 +477,8 @@
         // Convert NoneType to null.
         if (optionValue instanceof NoneType) {
           optionValue = null;
-        } else if (optionValue instanceof StarlarkInt) {
-          optionValue = ((StarlarkInt) optionValue).toIntUnchecked();
+        } else if (optionValue instanceof StarlarkInt starlarkInt) {
+          optionValue = starlarkInt.toIntUnchecked();
         } else if (optionValue instanceof List<?>) {
           // Converting back to the Java-native type makes it easier to check if a Starlark
           // transition set the same value a native transition would. This is important for
@@ -516,8 +516,8 @@
                           optionValueAsList.stream()
                               .map(
                                   element ->
-                                      element instanceof Label
-                                          ? ((Label) element).getUnambiguousCanonicalForm()
+                                      element instanceof Label label
+                                          ? label.getUnambiguousCanonicalForm()
                                           : element.toString())
                               .collect(joining(",")),
                           starlarkTransition.getPackageContext());
@@ -529,8 +529,8 @@
                 Object converted =
                     def.getConverter()
                         .convert(e.toString(), starlarkTransition.getPackageContext());
-                if (converted instanceof List) {
-                  valueBuilder.addAll((List<?>) converted);
+                if (converted instanceof List<?> list) {
+                  valueBuilder.addAll(list);
                 } else {
                   valueBuilder.add(converted);
                 }
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 86c3d7c..3868fb0 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
@@ -698,8 +698,8 @@
     builder.addOutputs(outputArtifacts);
 
     if (unusedInputsList != Starlark.NONE) {
-      if (unusedInputsList instanceof Artifact) {
-        builder.setUnusedInputsList(Optional.of((Artifact) unusedInputsList));
+      if (unusedInputsList instanceof Artifact artifact) {
+        builder.setUnusedInputsList(Optional.of(artifact));
       } else {
         throw Starlark.errorf(
             "expected value of type 'File' for a member of parameter 'unused_inputs_list' but got"
@@ -790,8 +790,8 @@
     builder.setExecutionInfo(executionInfo);
 
     Label toolchainLabel = null;
-    if (toolchainUnchecked instanceof Label) {
-      toolchainLabel = (Label) toolchainUnchecked;
+    if (toolchainUnchecked instanceof Label label) {
+      toolchainLabel = label;
     } else if (toolchainUnchecked instanceof String) {
       try {
         toolchainLabel =
@@ -916,12 +916,12 @@
       }
 
       Object value = resourceSetMap.get(key);
-      if (value instanceof StarlarkInt) {
-        return ((StarlarkInt) value).toDouble();
+      if (value instanceof StarlarkInt starlarkInt) {
+        return starlarkInt.toDouble();
       }
 
-      if (value instanceof StarlarkFloat) {
-        return ((StarlarkFloat) value).toDouble();
+      if (value instanceof StarlarkFloat starlarkFloat) {
+        return starlarkFloat.toDouble();
       }
       throw new EvalException(
           String.format(
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 1f3e813..b902146 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
@@ -297,8 +297,8 @@
         builder.cfg(ExecutionTransitionFactory.createFactory());
       } else if (trans.equals("exec")) {
         builder.cfg(ExecutionTransitionFactory.createFactory());
-      } else if (trans instanceof ExecutionTransitionFactory) {
-        builder.cfg((ExecutionTransitionFactory) trans);
+      } else if (trans instanceof ExecutionTransitionFactory executionTransitionFactory) {
+        builder.cfg(executionTransitionFactory);
       } else if (trans instanceof SplitTransition) {
         // TODO(jcater): remove TransitionFactories usage.
         builder.cfg(TransitionFactories.of((SplitTransition) trans));
@@ -377,8 +377,8 @@
     ImmutableList.Builder<StarlarkProviderIdentifier> result = ImmutableList.builder();
 
     for (Object obj : list) {
-      if (obj instanceof String) {
-        result.add(StarlarkProviderIdentifier.forLegacy((String) obj));
+      if (obj instanceof String string) {
+        result.add(StarlarkProviderIdentifier.forLegacy(string));
       } else if (obj instanceof Provider constructor) {
         if (!constructor.isExported()) {
           throw Starlark.errorf(
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 0f62e64..2d4d5ed 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
@@ -888,8 +888,8 @@
     // It'd be nice to build this into DerivedArtifact's CommandLine interface so we don't have
     // to explicitly check if an object is a DerivedArtifact. Unfortunately that would require
     // a lot more dependencies on the Java library DerivedArtifact is built into.
-    return object instanceof DerivedArtifact
-        ? pathMapper.map(((DerivedArtifact) object).getExecPath()).getPathString()
+    return object instanceof DerivedArtifact derivedArtifact
+        ? pathMapper.map(derivedArtifact.getExecPath()).getPathString()
         : CommandLineItem.expandToCommandLine(object);
   }
 
@@ -1037,8 +1037,8 @@
       int count = originalValues.size();
       // map_each can accept either each object, or each object + a directory expander.
       boolean wantsDirectoryExpander =
-          (mapFn instanceof StarlarkFunction)
-              && ((StarlarkFunction) mapFn).getParameterNames().size() >= 2;
+          mapFn instanceof StarlarkFunction starlarkFunction
+              && starlarkFunction.getParameterNames().size() >= 2;
       // We create a list that we reuse for the args to map_each
       List<Object> args = new ArrayList<>(2);
       args.add(null); // This will be overwritten each iteration.
@@ -1054,10 +1054,10 @@
       for (int i = 0; i < count; ++i) {
         args.set(0, originalValues.get(i));
         Object ret = Starlark.call(thread, mapFn, args, /*kwargs=*/ ImmutableMap.of());
-        if (ret instanceof String) {
-          consumer.accept((String) ret);
-        } else if (ret instanceof Sequence) {
-          for (Object val : ((Sequence<?>) ret)) {
+        if (ret instanceof String string) {
+          consumer.accept(string);
+        } else if (ret instanceof Sequence<?> sequence) {
+          for (Object val : sequence) {
             if (!(val instanceof String)) {
               throw new CommandLineExpansionException(
                   "Expected map_each to return string, None, or list of strings, "
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 6141a08..f89f2b4 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
@@ -328,8 +328,8 @@
           }
         }
       } else {
-        if (info instanceof StarlarkInfo) {
-          info = ((StarlarkInfo) info).unsafeOptimizeMemoryLayout();
+        if (info instanceof StarlarkInfo starlarkInfo) {
+          info = starlarkInfo.unsafeOptimizeMemoryLayout();
         }
         Provider.Key providerKey = getProviderKey(info);
         // Single declared provider
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 1047a563..e6ece09 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
@@ -293,8 +293,8 @@
               this, ((AspectContext) ruleContext).getMainAspectPrerequisitesCollection());
       for (Attribute attribute : attributes) {
         Object defaultValue = attribute.getDefaultValue(null);
-        if (defaultValue instanceof ComputedDefault) {
-          defaultValue = ((ComputedDefault) defaultValue).getDefault(ruleContext.attributes());
+        if (defaultValue instanceof ComputedDefault computedDefault) {
+          defaultValue = computedDefault.getDefault(ruleContext.attributes());
         }
         aspectBuilder.addAttribute(attribute, defaultValue);
       }
@@ -315,8 +315,8 @@
         }
         for (Attribute attribute : aspect.getDefinition().getAttributes().values()) {
           Object defaultValue = attribute.getDefaultValue(null);
-          if (defaultValue instanceof ComputedDefault) {
-            defaultValue = ((ComputedDefault) defaultValue).getDefault(ruleContext.attributes());
+          if (defaultValue instanceof ComputedDefault computedDefault) {
+            defaultValue = computedDefault.getDefault(ruleContext.attributes());
           }
           ruleBuilder.addAttribute(attribute, defaultValue);
         }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkToolchainContext.java
index 763f11c..6463a73 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkToolchainContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/StarlarkToolchainContext.java
@@ -86,10 +86,10 @@
   }
 
   private Label transformKey(StarlarkThread starlarkThread, Object key) throws EvalException {
-    if (key instanceof Label) {
-      return (Label) key;
-    } else if (key instanceof ToolchainTypeInfo) {
-      return ((ToolchainTypeInfo) key).typeLabel();
+    if (key instanceof Label label) {
+      return label;
+    } else if (key instanceof ToolchainTypeInfo toolchainTypeInfo) {
+      return toolchainTypeInfo.typeLabel();
     } else if (key instanceof String) {
       try {
         LabelConverter converter = LabelConverter.forBzlEvaluatingThread(starlarkThread);
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 d8f64f9..0584a4c 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
@@ -417,8 +417,8 @@
       extends ConfigurationTransition.Visitor<TransitionException> {
     @Override
     default void accept(ConfigurationTransition transition) throws TransitionException {
-      if (transition instanceof StarlarkTransition) {
-        this.accept((StarlarkTransition) transition);
+      if (transition instanceof StarlarkTransition starlarkTransition) {
+        this.accept(starlarkTransition);
       }
     }
 
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 b717829..b2bef45 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
@@ -140,10 +140,10 @@
                     mapEach,
                     /*args=*/ ImmutableList.of(val),
                     /*kwargs=*/ ImmutableMap.of());
-            if (ret instanceof String) {
-              parts.add((String) ret);
-            } else if (ret instanceof Sequence) {
-              for (Object v : ((Sequence) ret)) {
+            if (ret instanceof String string) {
+              parts.add(string);
+            } else if (ret instanceof Sequence<?> sequence) {
+              for (Object v : sequence) {
                 if (!(v instanceof String)) {
                   throw Starlark.errorf(
                       "Function provided to map_each must return string, None, or list of strings,"
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 ce7e897..36b0dc8 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
@@ -77,8 +77,8 @@
         if (supportFilesElement instanceof Depset) {
           supportFilesBuilder.addTransitive(
               Depset.cast(supportFilesElement, Artifact.class, "coverage_support_files"));
-        } else if (supportFilesElement instanceof Artifact) {
-          supportFilesBuilder.add((Artifact) supportFilesElement);
+        } else if (supportFilesElement instanceof Artifact artifact) {
+          supportFilesBuilder.add(artifact);
         } else {
           throw Starlark.errorf(
               "at index %d of coverage_support_files, got element of type %s, want one of depset,"
diff --git a/src/main/java/com/google/devtools/build/lib/authandtls/NetrcParser.java b/src/main/java/com/google/devtools/build/lib/authandtls/NetrcParser.java
index 10be801..1ad0c8c 100644
--- a/src/main/java/com/google/devtools/build/lib/authandtls/NetrcParser.java
+++ b/src/main/java/com/google/devtools/build/lib/authandtls/NetrcParser.java
@@ -137,8 +137,8 @@
     boolean done = false;
     while (!done && tokenStream.hasNext()) {
       Token token = tokenStream.next();
-      if (token instanceof ItemToken) {
-        String item = ((ItemToken) token).item();
+      if (token instanceof ItemToken itemToken) {
+        String item = itemToken.item();
         switch (item) {
           case MACHINE:
             String machine = nextItem(tokenStream);
@@ -168,8 +168,8 @@
   private static String nextItem(TokenStream tokenStream) throws IOException {
     while (tokenStream.hasNext()) {
       Token token = tokenStream.next();
-      if (token instanceof ItemToken) {
-        return ((ItemToken) token).item();
+      if (token instanceof ItemToken itemToken) {
+        return itemToken.item();
       }
     }
 
@@ -185,8 +185,8 @@
     while (!done && tokenStream.hasNext()) {
       // Peek rather than taking next token since we probably won't process it
       Token token = tokenStream.peek();
-      if (token instanceof ItemToken) {
-        String item = ((ItemToken) token).item();
+      if (token instanceof ItemToken itemToken) {
+        String item = itemToken.item();
         switch (item) {
           case LOGIN:
             tokenStream.next();
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValuesAdapter.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValuesAdapter.java
index 85fdd2a..ed035a2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValuesAdapter.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/AttributeValuesAdapter.java
@@ -72,8 +72,8 @@
   private JsonElement serializeObject(Object obj) {
     if (obj.equals(Starlark.NONE)) {
       return JsonNull.INSTANCE;
-    } else if (obj instanceof Boolean) {
-      return new JsonPrimitive((Boolean) obj);
+    } else if (obj instanceof Boolean bool) {
+      return new JsonPrimitive(bool);
     } else if (obj instanceof StarlarkInt) {
       try {
         return new JsonPrimitive(((StarlarkInt) obj).toInt("serialization into the lockfile"));
@@ -145,8 +145,8 @@
    * @return serialized object
    */
   private String serializeObjToString(Object obj) {
-    if (obj instanceof Label) {
-      String labelString = ((Label) obj).getUnambiguousCanonicalForm();
+    if (obj instanceof Label label) {
+      String labelString = label.getUnambiguousCanonicalForm();
       Preconditions.checkState(labelString.startsWith("@@"));
       return labelString;
     }
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 e075b96..dab0397 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
@@ -264,8 +264,8 @@
       @Nullable ModuleOverride override = overrides.get(depSpec.getName());
       if (override instanceof NonRegistryOverride) {
         newVersion = Version.EMPTY;
-      } else if (override instanceof SingleVersionOverride) {
-        Version overrideVersion = ((SingleVersionOverride) override).getVersion();
+      } else if (override instanceof SingleVersionOverride singleVersionOverride) {
+        Version overrideVersion = singleVersionOverride.getVersion();
         if (!overrideVersion.isEmpty()) {
           newVersion = overrideVersion;
         }
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 6054406..2d25525 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
@@ -576,8 +576,8 @@
     // TODO(wyv): Move registry object creation to BazelRepositoryModule so we don't repeatedly
     //   create them, and we can better report the error (is it a flag error or override error?).
     List<String> registries = Objects.requireNonNull(REGISTRIES.get(env));
-    if (override instanceof RegistryOverride) {
-      String overrideRegistry = ((RegistryOverride) override).getRegistry();
+    if (override instanceof RegistryOverride registryOverride) {
+      String overrideRegistry = registryOverride.getRegistry();
       if (!overrideRegistry.isEmpty()) {
         registries = ImmutableList.of(overrideRegistry);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java
index ae0eae0..1ee8e2d 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleFileGlobals.java
@@ -950,8 +950,8 @@
     context.setNonModuleCalled();
     validateModuleName(moduleName);
     ImmutableList<String> urlList =
-        urls instanceof String
-            ? ImmutableList.of((String) urls)
+        urls instanceof String string
+            ? ImmutableList.of(string)
             : Sequence.cast(urls, String.class, "urls").getImmutableList();
     context.addOverride(
         moduleName,
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 8358c08..5550521 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
@@ -896,8 +896,8 @@
                     Starlark.type(returnValue)),
                 Transience.PERSISTENT);
           }
-          if (returnValue instanceof ModuleExtensionMetadata) {
-            moduleExtensionMetadata = Optional.of((ModuleExtensionMetadata) returnValue);
+          if (returnValue instanceof ModuleExtensionMetadata retMetadata) {
+            moduleExtensionMetadata = Optional.of(retMetadata);
           } else {
             moduleExtensionMetadata = Optional.empty();
           }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/commands/ModCommand.java b/src/main/java/com/google/devtools/build/lib/bazel/commands/ModCommand.java
index 2dd0708..5ff673c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/commands/ModCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/commands/ModCommand.java
@@ -594,9 +594,8 @@
       buildozerCommand.build().execute();
     } catch (InterruptedException | CommandException e) {
       String suffix = "";
-      if (e instanceof AbnormalTerminationException) {
-        if (((AbnormalTerminationException) e).getResult().getTerminationStatus().getRawExitCode()
-            == 3) {
+      if (e instanceof AbnormalTerminationException abnormalTerminationException) {
+        if (abnormalTerminationException.getResult().getTerminationStatus().getRawExitCode() == 3) {
           // Buildozer exits with exit code 3 if it didn't make any changes.
           return BlazeCommandResult.success();
         }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
index 134f1a0..47c169c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/DecompressorValue.java
@@ -86,8 +86,9 @@
 
   @Override
   public boolean equals(Object other) {
-    return this == other || (other instanceof DecompressorValue
-        && directory.equals(((DecompressorValue) other).directory));
+    return this == other
+        || other instanceof DecompressorValue decompressorValue
+            && directory.equals(decompressorValue.directory);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
index 8c79a47..84b9ec7 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/RepositoryResolvedModule.java
@@ -117,8 +117,8 @@
       // In WORKSPACE files, the Label constructor is not available.
       // Fortunately, in all places where a label is needed,
       // we can pass the canonical string associated with this label.
-      if (o instanceof Label) {
-        return this.repr(((Label) o).getCanonicalForm());
+      if (o instanceof Label label) {
+        return this.repr(label.getCanonicalForm());
       }
       return super.repr(o);
     }
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 c0923ad..5bed266 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
@@ -353,8 +353,8 @@
       Object urlOrList, boolean ensureNonEmpty, boolean checksumGiven)
       throws RepositoryFunctionException, EvalException {
     ImmutableList<String> urlStrings;
-    if (urlOrList instanceof String) {
-      urlStrings = ImmutableList.of((String) urlOrList);
+    if (urlOrList instanceof String string) {
+      urlStrings = ImmutableList.of(string);
     } else {
       urlStrings = checkAllUrls((Iterable<?>) urlOrList);
     }
@@ -1148,10 +1148,10 @@
       throws EvalException, InterruptedException {
     if (path instanceof String) {
       return new StarlarkPath(this, workingDirectory.getRelative(path.toString()));
-    } else if (path instanceof Label) {
-      return getPathFromLabel((Label) path);
-    } else if (path instanceof StarlarkPath) {
-      return (StarlarkPath) path;
+    } else if (path instanceof Label label) {
+      return getPathFromLabel(label);
+    } else if (path instanceof StarlarkPath starlarkPath) {
+      return starlarkPath;
     } else {
       // This can never happen because we check it in the Starlark interpreter.
       throw new IllegalArgumentException("expected string or label for path");
@@ -1583,8 +1583,8 @@
 
     List<String> args = new ArrayList<>(arguments.size());
     for (Object arg : arguments) {
-      if (arg instanceof Label) {
-        args.add(getPathFromLabel((Label) arg).toString());
+      if (arg instanceof Label label) {
+        args.add(getPathFromLabel(label).toString());
       } else {
         // String or StarlarkPath expected
         args.add(arg.toString());
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
index ad28d31..9793202 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryContext.java
@@ -630,24 +630,24 @@
     boolean needsRestart = false;
     for (String name : attr.getFieldNames()) {
       Object value = attr.getValue(name);
-      if (value instanceof Label) {
-        if (dependOnLabelIgnoringErrors((Label) value)) {
+      if (value instanceof Label label) {
+        if (dependOnLabelIgnoringErrors(label)) {
           needsRestart = true;
         }
       }
-      if (value instanceof Sequence) {
-        for (Object entry : (Sequence) value) {
-          if (entry instanceof Label) {
-            if (dependOnLabelIgnoringErrors((Label) entry)) {
+      if (value instanceof Sequence<?> sequence) {
+        for (Object entry : sequence) {
+          if (entry instanceof Label label2) {
+            if (dependOnLabelIgnoringErrors(label2)) {
               needsRestart = true;
             }
           }
         }
       }
-      if (value instanceof Dict) {
-        for (Object entry : ((Dict) value).keySet()) {
-          if (entry instanceof Label) {
-            if (dependOnLabelIgnoringErrors((Label) entry)) {
+      if (value instanceof Dict<?, ?> dict) {
+        for (Object entry : dict.keySet()) {
+          if (entry instanceof Label label2) {
+            if (dependOnLabelIgnoringErrors(label2)) {
               needsRestart = true;
             }
           }
diff --git a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
index 733a90a..2242fc2 100644
--- a/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
+++ b/src/main/java/com/google/devtools/build/lib/buildeventservice/BuildEventServiceUploader.java
@@ -199,8 +199,8 @@
         return;
       }
       // BuildCompletingEvent marks the end of the build in the BEP event stream.
-      if (event instanceof BuildCompletingEvent) {
-        ExitCode exitCode = ((BuildCompletingEvent) event).getExitCode();
+      if (event instanceof BuildCompletingEvent buildCompletingEvent) {
+        ExitCode exitCode = buildCompletingEvent.getExitCode();
         if (exitCode != null && exitCode.getNumericExitCode() == 0) {
           buildStatus = COMMAND_SUCCEEDED;
         } else {
@@ -599,13 +599,13 @@
         // of events that haven't been uploaded.
         EventLoopCommand event;
         while ((event = ackQueue.pollFirst()) != null) {
-          if (event instanceof SendRegularBuildEventCommand) {
-            cancelLocalFileUpload((SendRegularBuildEventCommand) event);
+          if (event instanceof SendRegularBuildEventCommand sendRegularBuildEventCommand) {
+            cancelLocalFileUpload(sendRegularBuildEventCommand);
           }
         }
         while ((event = eventQueue.pollFirst()) != null) {
-          if (event instanceof SendRegularBuildEventCommand) {
-            cancelLocalFileUpload((SendRegularBuildEventCommand) event);
+          if (event instanceof SendRegularBuildEventCommand sendRegularBuildEventCommand) {
+            cancelLocalFileUpload(sendRegularBuildEventCommand);
           }
         }
       }
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/BazelModuleContext.java b/src/main/java/com/google/devtools/build/lib/cmdline/BazelModuleContext.java
index 9bd7dd4..2fa9e1c 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/BazelModuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/BazelModuleContext.java
@@ -113,8 +113,8 @@
   @Nullable
   public static BazelModuleContext of(Module m) {
     @Nullable Object data = m.getClientData();
-    if (data instanceof BazelModuleContext) {
-      return (BazelModuleContext) data;
+    if (data instanceof BazelModuleContext bazelModuleContext) {
+      return bazelModuleContext;
     } else {
       return null;
     }
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 3255764..4bc2c27 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
@@ -70,8 +70,8 @@
   public ImmutableList<SkyKey> getDirectDepKeys() {
     ImmutableList.Builder<SkyKey> depKeys = ImmutableList.builderWithExpectedSize(children.length);
     for (Object child : children) {
-      if (child instanceof Artifact) {
-        depKeys.add(Artifact.key((Artifact) child));
+      if (child instanceof Artifact artifact) {
+        depKeys.add(Artifact.key(artifact));
       } else {
         depKeys.add(createInternal((Object[]) child));
       }
@@ -82,8 +82,8 @@
   /** Applies a consumer function to the direct artifacts of this nested set. */
   public void applyToDirectArtifacts(DirectArtifactConsumer function) throws InterruptedException {
     for (Object child : children) {
-      if (child instanceof Artifact) {
-        function.accept((Artifact) child);
+      if (child instanceof Artifact artifact) {
+        function.accept(artifact);
       }
     }
   }
@@ -173,8 +173,8 @@
     if (this == that) {
       return true;
     }
-    return that instanceof ArtifactNestedSetKey
-        && children == ((ArtifactNestedSetKey) that).children;
+    return that instanceof ArtifactNestedSetKey artifactNestedSetKey
+        && children == artifactNestedSetKey.children;
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategy.java b/src/main/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategy.java
index 5233680..eeced23 100644
--- a/src/main/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/dynamic/DynamicSpawnStrategy.java
@@ -547,8 +547,8 @@
       return null;
     } catch (ExecutionException e) {
       Throwable cause = e.getCause();
-      if (cause instanceof ExecException) {
-        throw (ExecException) cause;
+      if (cause instanceof ExecException execException) {
+        throw execException;
       } else if (cause instanceof InterruptedException) {
         // If the branch was interrupted, it might be due to a user interrupt or due to our request
         // for cancellation. Assume the latter here because if this was actually a user interrupt,
diff --git a/src/main/java/com/google/devtools/build/lib/exec/ExpandedSpawnLogContext.java b/src/main/java/com/google/devtools/build/lib/exec/ExpandedSpawnLogContext.java
index 53c538c..0dc9b04 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/ExpandedSpawnLogContext.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/ExpandedSpawnLogContext.java
@@ -169,8 +169,8 @@
 
           boolean isTool =
               toolFiles.contains(input)
-                  || (input instanceof TreeFileArtifact
-                      && toolFiles.contains(((TreeFileArtifact) input).getParent()));
+                  || input instanceof TreeFileArtifact treeFileArtifact
+                      && toolFiles.contains(treeFileArtifact.getParent());
 
           Path contentPath = fileSystem.getPath(execRoot.getRelative(input.getExecPathString()));
 
diff --git a/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java b/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
index 413f0bc..985f455 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/SpawnLogContext.java
@@ -155,8 +155,8 @@
     }
 
     if (input != null) {
-      if (input instanceof VirtualActionInput) {
-        byte[] blob = ((VirtualActionInput) input).getBytes().toByteArray();
+      if (input instanceof VirtualActionInput virtualActionInput) {
+        byte[] blob = virtualActionInput.getBytes().toByteArray();
         return builder
             .setHash(digestHashFunction.getHashFunction().hashBytes(blob).toString())
             .setSizeBytes(blob.length)
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 58f10d8..fb59fd9 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
@@ -133,8 +133,7 @@
   @VisibleForTesting
   public static Predicate<Target> testTimeoutFilter(final Set<TestTimeout> allowedTimeouts) {
     return target ->
-        target instanceof Rule
-            && allowedTimeouts.contains(TestTimeout.getTestTimeout((Rule) target));
+        target instanceof Rule rule && allowedTimeouts.contains(TestTimeout.getTestTimeout(rule));
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 88906d5..400403f 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -1149,8 +1149,8 @@
   }
 
   protected static FailureDetail createUnsuccessfulKeyFailure(Exception exception) {
-    return exception instanceof DetailedException
-        ? ((DetailedException) exception).getDetailedExitCode().getFailureDetail()
+    return exception instanceof DetailedException detailedException
+        ? detailedException.getDetailedExitCode().getFailureDetail()
         : FailureDetail.newBuilder()
             .setMessage(exception.getMessage())
             .setQuery(Query.newBuilder().setCode(Code.SKYQUERY_TARGET_EXCEPTION))
diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
index 72e183c..ef438c6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java
@@ -263,8 +263,8 @@
   protected RuleConfiguredTarget getRuleConfiguredTarget(
       ConfiguredTargetValue configuredTargetValue) {
     ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
-    if (configuredTarget instanceof RuleConfiguredTarget) {
-      return (RuleConfiguredTarget) configuredTarget;
+    if (configuredTarget instanceof RuleConfiguredTarget ruleConfiguredTarget) {
+      return ruleConfiguredTarget;
     }
     return null;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
index 8a4f21d..24182af 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java
@@ -323,10 +323,10 @@
     SkyValue value = getConfiguredTargetValue(key);
     if (value == null) {
       return null;
-    } else if (value instanceof ConfiguredTargetValue) {
-      return ((ConfiguredTargetValue) value).getConfiguredTarget();
-    } else if (value instanceof AspectValue && key instanceof AspectKey) {
-      return (AspectKey) key;
+    } else if (value instanceof ConfiguredTargetValue configuredTargetValue) {
+      return configuredTargetValue.getConfiguredTarget();
+    } else if (value instanceof AspectValue && key instanceof AspectKey aspectValue) {
+      return aspectValue;
     } else {
       throw new IllegalStateException("unknown value type for CqueryNode");
     }
@@ -490,8 +490,8 @@
   @Nullable
   @Override
   protected RuleConfiguredTarget getRuleConfiguredTarget(CqueryNode configuredTarget) {
-    if (configuredTarget instanceof RuleConfiguredTarget) {
-      return (RuleConfiguredTarget) configuredTarget;
+    if (configuredTarget instanceof RuleConfiguredTarget ruleConfiguredTarget) {
+      return ruleConfiguredTarget;
     }
     return null;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
index 0f88b01..96e8c9e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryExpression.java
@@ -109,7 +109,7 @@
 
   /** Checks if this QueryExpression has a SomePathFunction at its top level. */
   public boolean isTopLevelSomePathFunction() {
-    return this instanceof FunctionExpression
-        && "somepath".equals(((FunctionExpression) this).getFunction().getName());
+    return this instanceof FunctionExpression functionExpression
+        && "somepath".equals(functionExpression.getFunction().getName());
   }
 }
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 7d59727..0d4917f 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
@@ -398,8 +398,8 @@
       observeNode(target);
 
       // LabelVisitor has some legacy special handling of OutputFiles.
-      if (target instanceof OutputFile) {
-        Rule rule = ((OutputFile) target).getGeneratingRule();
+      if (target instanceof OutputFile outputFile) {
+        Rule rule = outputFile.getGeneratingRule();
         observeEdge(target, null, rule);
         visit(null, null, rule, depth + 1, count + 1);
       }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
index 623a85f..c40f384 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/query/output/BuildOutputFormatter.java
@@ -190,8 +190,8 @@
           licenseTypes.add(Ascii.toLowerCase(licenseType.toString()));
         }
         value = licenseTypes;
-      } else if (value instanceof TriState) {
-        value = ((TriState) value).toInt();
+      } else if (value instanceof TriState triState) {
+        value = triState.toInt();
       }
       return new Printer() {
         // Print labels in their canonical form.
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 3bde3d9..daf9b0f 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
@@ -135,12 +135,12 @@
             (key, value) -> {
               if (value instanceof List<?> deps) {
                 for (Object dep : deps) {
-                  if (dep instanceof Label) {
-                    conditions.put((Label) dep, key);
+                  if (dep instanceof Label label) {
+                    conditions.put(label, key);
                   }
                 }
-              } else if (value instanceof Label) {
-                conditions.put((Label) value, key);
+              } else if (value instanceof Label label) {
+                conditions.put(label, key);
               }
             });
       }
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 8427830..e96e5b7 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
@@ -350,8 +350,8 @@
         // Values such as those of attribute "linkstamp" may be null.
         if (value != null) {
           try {
-            if (value instanceof Label) {
-              elem.setAttribute("value", labelPrinter.toString((Label) value));
+            if (value instanceof Label label) {
+              elem.setAttribute("value", labelPrinter.toString(label));
             } else {
               elem.setAttribute("value", value.toString());
             }
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 1b8866c..8378624 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
@@ -331,8 +331,8 @@
       ActionInput input,
       Priority priority) {
     try {
-      if (input instanceof VirtualActionInput) {
-        prefetchVirtualActionInput((VirtualActionInput) input);
+      if (input instanceof VirtualActionInput virtualActionInput) {
+        prefetchVirtualActionInput(virtualActionInput);
         return immediateVoidFuture();
       }
 
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 295656b..12c43bb 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
@@ -325,8 +325,8 @@
     public Builder setInput(long size, ActionInput actionInput, Path execRoot) {
       checkState(inputStream == null);
       this.size = size;
-      if (actionInput instanceof VirtualActionInput) {
-        inputStream = () -> ((VirtualActionInput) actionInput).getBytes().newInput();
+      if (actionInput instanceof VirtualActionInput virtualActionInput) {
+        inputStream = () -> virtualActionInput.getBytes().newInput();
       } else {
         inputStream = () -> ActionInputHelper.toInputPath(actionInput, execRoot).getInputStream();
       }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/GoogleChannelConnectionFactory.java b/src/main/java/com/google/devtools/build/lib/remote/GoogleChannelConnectionFactory.java
index b20252f..6481c5b 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/GoogleChannelConnectionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/GoogleChannelConnectionFactory.java
@@ -159,8 +159,8 @@
               reporter.handle(Event.error(message));
 
               IOException exception;
-              if (error instanceof IOException) {
-                exception = (IOException) error;
+              if (error instanceof IOException ioException) {
+                exception = ioException;
               } else {
                 exception = new IOException(error);
               }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/LeaseService.java b/src/main/java/com/google/devtools/build/lib/remote/LeaseService.java
index 2058fa1..2bc6218 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/LeaseService.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/LeaseService.java
@@ -88,8 +88,8 @@
           if (key.functionName().equals(SkyFunctions.ACTION_EXECUTION)) {
             try {
               var value = memoizingEvaluator.getExistingValue(key);
-              return value instanceof ActionExecutionValue
-                  && isRemote((ActionExecutionValue) value);
+              return value instanceof ActionExecutionValue actionExecutionValue
+                  && isRemote(actionExecutionValue);
             } catch (InterruptedException ignored) {
               return false;
             }
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 c8f44b4..55cad40 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
@@ -291,8 +291,8 @@
   private boolean isRemote(PathFragment path) throws IOException {
     // Files in the local filesystem are non-remote by definition, so stat only in-memory sources.
     var status = statInternal(path, FollowMode.FOLLOW_ALL, StatSources.IN_MEMORY_ONLY);
-    return (status instanceof FileStatusWithMetadata)
-        && ((FileStatusWithMetadata) status).getMetadata().isRemote();
+    return status instanceof FileStatusWithMetadata fileStatusWithMetadata
+        && fileStatusWithMetadata.getMetadata().isRemote();
   }
 
   public void updateContext(ActionExecutionMetadata action) {
@@ -427,8 +427,8 @@
     // The parent path has already been canonicalized by resolveSymbolicLinks, so FOLLOW_NONE is
     // effectively the same as FOLLOW_PARENT, but more efficient.
     var status = statInternal(path, FollowMode.FOLLOW_NONE, StatSources.IN_MEMORY_ONLY);
-    if (status instanceof FileStatusWithDigest) {
-      return ((FileStatusWithDigest) status).getDigest();
+    if (status instanceof FileStatusWithDigest fileStatusWithDigest) {
+      return fileStatusWithDigest.getDigest();
     }
     return localFs.getPath(path).getFastDigest();
   }
@@ -440,8 +440,8 @@
     // The parent path has already been canonicalized by resolveSymbolicLinks, so FOLLOW_NONE is
     // effectively the same as FOLLOW_PARENT, but more efficient.
     var status = statInternal(path, FollowMode.FOLLOW_NONE, StatSources.IN_MEMORY_ONLY);
-    if (status instanceof FileStatusWithDigest) {
-      return ((FileStatusWithDigest) status).getDigest();
+    if (status instanceof FileStatusWithDigest fileStatusWithDigest) {
+      return fileStatusWithDigest.getDigest();
     }
     return localFs.getPath(path).getDigest();
   }
@@ -526,8 +526,8 @@
     if (path.startsWith(execRoot)) {
       var execPath = path.relativeTo(execRoot);
       var metadata = inputArtifactData.getMetadata(execPath);
-      if (metadata instanceof UnresolvedSymlinkArtifactValue) {
-        return PathFragment.create(((UnresolvedSymlinkArtifactValue) metadata).getSymlinkTarget());
+      if (metadata instanceof UnresolvedSymlinkArtifactValue unresolvedSymlinkArtifactValue) {
+        return PathFragment.create(unresolvedSymlinkArtifactValue.getSymlinkTarget());
       }
       if (metadata != null) {
         // Other input artifacts are never symlinks.
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 4fb54a1..51b95e0 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
@@ -273,8 +273,8 @@
 
           @Override
           public void onFailure(Throwable t) {
-            if (t instanceof CacheNotFoundException) {
-              ((CacheNotFoundException) t).setFilename(blobName);
+            if (t instanceof CacheNotFoundException cacheNotFoundException) {
+              cacheNotFoundException.setFilename(blobName);
             }
             future.setException(t);
           }
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 5aee1e2..2f314cb 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
@@ -460,10 +460,10 @@
       return (priorFuture != null ? priorFuture : freshFuture).join();
     } catch (CompletionException e) {
       Throwable cause = checkNotNull(e.getCause());
-      if (cause instanceof IOException) {
-        throw (IOException) cause;
-      } else if (cause instanceof ForbiddenActionInputException) {
-        throw (ForbiddenActionInputException) cause;
+      if (cause instanceof IOException ioException) {
+        throw ioException;
+      } else if (cause instanceof ForbiddenActionInputException forbiddenActionInputException) {
+        throw forbiddenActionInputException;
       } else {
         checkState(cause instanceof RuntimeException);
         throw (RuntimeException) cause;
@@ -1340,8 +1340,8 @@
   }
 
   private static String prettyPrint(ActionInput actionInput) {
-    if (actionInput instanceof Artifact) {
-      return ((Artifact) actionInput).prettyPrint();
+    if (actionInput instanceof Artifact artifact) {
+      return artifact.prettyPrint();
     } else {
       return actionInput.getExecPathString();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteLeaseExtension.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteLeaseExtension.java
index 8942678..909de72 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteLeaseExtension.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteLeaseExtension.java
@@ -201,8 +201,8 @@
       if (!missingDigests.contains(buildDigest(metadata))) {
         metadata.extendExpireAtEpochMilli(expireAtEpochMilli);
         if (token != null) {
-          if (artifact instanceof TreeFileArtifact) {
-            token.extendOutputTreeFile((TreeFileArtifact) artifact, expireAtEpochMilli);
+          if (artifact instanceof TreeFileArtifact treeFileArtifact) {
+            token.extendOutputTreeFile(treeFileArtifact, expireAtEpochMilli);
           } else {
             token.extendOutputFile(artifact, expireAtEpochMilli);
           }
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 97f9b4c..17e3300 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
@@ -190,8 +190,8 @@
         boolean retry = false;
         if (e instanceof ClosedChannelException) {
           retry = true;
-        } else if (e instanceof HttpException) {
-          int status = ((HttpException) e).response().status().code();
+        } else if (e instanceof HttpException httpException) {
+          int status = httpException.response().status().code();
           retry =
               status == HttpResponseStatus.INTERNAL_SERVER_ERROR.code()
                   || status == HttpResponseStatus.BAD_GATEWAY.code()
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrier.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrier.java
index 403af13..d56ca4f 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrier.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrier.java
@@ -37,8 +37,8 @@
   @Nullable
   private static Status fromException(Exception e) {
     for (Throwable cause = e; cause != null; cause = cause.getCause()) {
-      if (cause instanceof StatusRuntimeException) {
-        return ((StatusRuntimeException) cause).getStatus();
+      if (cause instanceof StatusRuntimeException statusRuntimeException) {
+        return statusRuntimeException.getStatus();
       }
     }
     return null;
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrierUtils.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrierUtils.java
index dac7bf7..4e17a89 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrierUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteRetrierUtils.java
@@ -22,10 +22,10 @@
 public final class RemoteRetrierUtils {
 
   public static boolean causedByStatus(Throwable e, Status.Code expected) {
-    if (e instanceof StatusRuntimeException) {
-      return ((StatusRuntimeException) e).getStatus().getCode() == expected;
-    } else if (e instanceof StatusException) {
-      return ((StatusException) e).getStatus().getCode() == expected;
+    if (e instanceof StatusRuntimeException statusRuntimeException) {
+      return statusRuntimeException.getStatus().getCode() == expected;
+    } else if (e instanceof StatusException statusException) {
+      return statusException.getStatus().getCode() == expected;
     } else if (e.getCause() != null) {
       return causedByStatus(e.getCause(), expected);
     }
@@ -33,8 +33,8 @@
   }
 
   public static boolean causedByExecTimeout(Throwable e) {
-    if (e instanceof ExecutionStatusException) {
-      return ((ExecutionStatusException) e).isExecutionTimeout();
+    if (e instanceof ExecutionStatusException executionStatusException) {
+      return executionStatusException.isExecutionTimeout();
     } else if (e.getCause() != null) {
       return causedByExecTimeout(e.getCause());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/remote/common/BulkTransferException.java b/src/main/java/com/google/devtools/build/lib/remote/common/BulkTransferException.java
index 6bf7c9d..543abee 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/common/BulkTransferException.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/common/BulkTransferException.java
@@ -45,10 +45,10 @@
    * filter and record whether all suppressed exceptions are CacheNotFoundExceptions.
    */
   public void add(IOException e) {
-    if (e instanceof BulkTransferException) {
-      for (Throwable t : ((BulkTransferException) e).getSuppressed()) {
+    if (e instanceof BulkTransferException bulkTransferException) {
+      for (Throwable t : bulkTransferException.getSuppressed()) {
         checkState(t instanceof IOException);
-        add((IOException) t);
+        add(bulkTransferException);
       }
       return;
     }
@@ -62,8 +62,8 @@
   }
 
   public static boolean anyCausedByCacheNotFoundException(Throwable e) {
-    return e instanceof BulkTransferException
-        && ((BulkTransferException) e).anyCausedByCacheNotFoundException();
+    return e instanceof BulkTransferException bulkTransferException
+        && bulkTransferException.anyCausedByCacheNotFoundException();
   }
 
   public boolean allCausedByCacheNotFoundException() {
@@ -71,8 +71,8 @@
   }
 
   public static boolean allCausedByCacheNotFoundException(Throwable e) {
-    return e instanceof BulkTransferException
-        && ((BulkTransferException) e).allCausedByCacheNotFoundException();
+    return e instanceof BulkTransferException bulkTransferException
+        && bulkTransferException.allCausedByCacheNotFoundException();
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/remote/common/LazyFileOutputStream.java b/src/main/java/com/google/devtools/build/lib/remote/common/LazyFileOutputStream.java
index 44b3e44..2c5891f 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/common/LazyFileOutputStream.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/common/LazyFileOutputStream.java
@@ -68,8 +68,8 @@
    */
   public void syncIfPossible() throws IOException {
     ensureOpen();
-    if (out instanceof FileOutputStream) {
-      ((FileOutputStream) out).getFD().sync();
+    if (out instanceof FileOutputStream fileOutputStream) {
+      fileOutputStream.getFD().sync();
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/remote/http/HttpCacheClient.java b/src/main/java/com/google/devtools/build/lib/remote/http/HttpCacheClient.java
index 1c4b51b..3d036a4 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/http/HttpCacheClient.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/http/HttpCacheClient.java
@@ -540,8 +540,8 @@
                             // Unsafe.throwException to
                             // re-throw a checked exception that hasn't been declared in the method
                             // signature.
-                            if (cause instanceof HttpException) {
-                              HttpResponse response = ((HttpException) cause).response();
+                            if (cause instanceof HttpException httpException) {
+                              HttpResponse response = httpException.response();
                               if (!dataWritten.get() && authTokenExpired(response)) {
                                 // The error is due to an auth token having expired. Let's try
                                 // again.
@@ -589,8 +589,8 @@
                             outerF.set(null);
                           } else {
                             Throwable cause = f.cause();
-                            if (cause instanceof HttpException) {
-                              HttpResponse response = ((HttpException) cause).response();
+                            if (cause instanceof HttpException httpException) {
+                              HttpResponse response = httpException.response();
                               if (cacheMiss(response.status())) {
                                 outerF.setException(new CacheNotFoundException(cmd.digest()));
                                 return;
@@ -667,8 +667,8 @@
                           result.set(null);
                         } else {
                           Throwable cause = f.cause();
-                          if (cause instanceof HttpException) {
-                            HttpResponse response = ((HttpException) cause).response();
+                          if (cause instanceof HttpException httpException) {
+                            HttpResponse response = httpException.response();
                             try {
                               // If the error is due to an expired auth token and we can reset
                               // the input stream, then try again.
@@ -754,9 +754,9 @@
       in.reset();
       return true;
     }
-    if (in instanceof FileInputStream) {
+    if (in instanceof FileInputStream fileInputStream) {
       // FileInputStream does not support reset().
-      ((FileInputStream) in).getChannel().position(0);
+      fileInputStream.getChannel().position(0);
       return true;
     }
     return false;
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 5b5b401..561329f 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
@@ -74,8 +74,8 @@
     }
     checkState(userPromise != null, "response before request");
 
-    if (msg instanceof HttpResponse) {
-      response = (HttpResponse) msg;
+    if (msg instanceof HttpResponse httpResponse) {
+      response = httpResponse;
       if (!response.protocolVersion().equals(HttpVersion.HTTP_1_1)) {
         HttpException error =
             new HttpException(
diff --git a/src/main/java/com/google/devtools/build/lib/remote/util/RxUtils.java b/src/main/java/com/google/devtools/build/lib/remote/util/RxUtils.java
index c5aa657..6d5260c 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/util/RxUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/util/RxUtils.java
@@ -83,8 +83,8 @@
         .toSingleDefault(TransferResult.ok())
         .onErrorResumeNext(
             error -> {
-              if (error instanceof IOException) {
-                return Single.just(TransferResult.error((IOException) error));
+              if (error instanceof IOException ioException) {
+                return Single.just(TransferResult.error(ioException));
               } else if (error instanceof InterruptedException) {
                 return Single.just(TransferResult.interrupted());
               } else {
diff --git a/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java b/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
index 61c4c4f..327d58e 100644
--- a/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
+++ b/src/main/java/com/google/devtools/build/lib/remote/util/Utils.java
@@ -112,14 +112,14 @@
       throw new InterruptedException();
     } catch (ExecutionException e) {
       Throwable cause = e.getCause();
-      if (cause instanceof InterruptedException) {
-        throw (InterruptedException) cause;
+      if (cause instanceof InterruptedException interruptedException) {
+        throw interruptedException;
       }
-      if (cause instanceof IOException) {
-        throw (IOException) cause;
+      if (cause instanceof IOException ioException) {
+        throw ioException;
       }
-      if (cause instanceof RuntimeException) {
-        throw (RuntimeException) cause;
+      if (cause instanceof RuntimeException runtimeException) {
+        throw runtimeException;
       }
       throw new IOException(cause);
     } catch (InterruptedException e) {
@@ -390,8 +390,8 @@
 
   public static String grpcAwareErrorMessage(Throwable error, boolean verboseFailures) {
     String errorMessage;
-    if (error instanceof IOException) {
-      errorMessage = grpcAwareErrorMessage((IOException) error);
+    if (error instanceof IOException ioException) {
+      errorMessage = grpcAwareErrorMessage(ioException);
     } else {
       errorMessage = error.getMessage();
     }
@@ -641,8 +641,8 @@
                   var cause = e.getCause();
                   if (cause instanceof InterruptedException) {
                     return immediateFailedFuture(cause);
-                  } else if (cause instanceof IOException) {
-                    error = (IOException) cause;
+                  } else if (cause instanceof IOException ioException) {
+                    error = ioException;
                   } else {
                     error = new IOException(cause);
                   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java
index 69d2f40..509e317 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDex2OatInfo.java
@@ -49,8 +49,8 @@
       return new AndroidDex2OatInfo(
           enabled,
           executeDex2OatOnHost,
-          sandboxForPregeneratingOatFilesForTests instanceof FilesToRunProvider
-              ? (FilesToRunProvider) sandboxForPregeneratingOatFilesForTests
+          sandboxForPregeneratingOatFilesForTests instanceof FilesToRunProvider filesToRunProvider
+              ? filesToRunProvider
               : null,
           framework instanceof Artifact ? (Artifact) framework : null,
           dalvikCache instanceof Artifact ? (Artifact) dalvikCache : null,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
index 63a0fde..0fdcacf 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidIdeInfoProvider.java
@@ -368,10 +368,10 @@
       JavaOutput resourceJarJavaOutput;
       if (isNone(resourceJar)) {
         resourceJarJavaOutput = null;
-      } else if (resourceJar instanceof JavaOutput) {
-        resourceJarJavaOutput = (JavaOutput) resourceJar;
-      } else if (resourceJar instanceof StructImpl) {
-        resourceJarJavaOutput = JavaOutput.fromStarlarkJavaOutput((StructImpl) resourceJar);
+      } else if (resourceJar instanceof JavaOutput javaOutput) {
+        resourceJarJavaOutput = javaOutput;
+      } else if (resourceJar instanceof StructImpl structImpl) {
+        resourceJarJavaOutput = JavaOutput.fromStarlarkJavaOutput(structImpl);
       } else {
         throw new EvalException(
             "resource_jar is not None, a native JavaOutput, nor a Starlark JavaOutput");
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
index e102274..1deecae 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesInfo.java
@@ -261,8 +261,8 @@
       Preconditions.checkArgument(
           from instanceof Depset || from == net.starlark.java.eval.Starlark.UNBOUND);
 
-      if (from instanceof Depset) {
-        return nestedSet((Depset) from, with, fieldName);
+      if (from instanceof Depset depset) {
+        return nestedSet(depset, with, fieldName);
       }
       return NestedSetBuilder.emptySet(Order.NAIVE_LINK_ORDER);
     }
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 b98771d..2943118 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
@@ -273,8 +273,8 @@
   // TODO(b/77574966): Remove this cast once we get rid of ResourceContainer and can guarantee
   // that only properly merged resources are passed into this object.
   Optional<AndroidManifestInfo> toManifestInfo() {
-    if (validatedResources instanceof ValidatedAndroidResources) {
-      ValidatedAndroidResources validated = (ValidatedAndroidResources) validatedResources;
+    if (validatedResources instanceof ValidatedAndroidResources validatedAndroidResources) {
+      ValidatedAndroidResources validated = validatedAndroidResources;
 
       return Optional.of(validated.getStampedManifest().toProvider());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java
index 46fe073..aa0859e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTaggedTrimmingTransitionFactory.java
@@ -83,8 +83,10 @@
 
     @Override
     public boolean equals(Object other) {
-      return other instanceof ConfigFeatureFlagTaggedTrimmingTransition
-          && this.flags.equals(((ConfigFeatureFlagTaggedTrimmingTransition) other).flags);
+      return other
+              instanceof
+              ConfigFeatureFlagTaggedTrimmingTransition configFeatureFlagTaggedTrimmingTransition
+          && this.flags.equals(configFeatureFlagTaggedTrimmingTransition.flags);
     }
 
     @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
index c8ba9b1..d9859f5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagTransitionFactory.java
@@ -104,8 +104,8 @@
 
     @Override
     public boolean equals(Object other) {
-      return other instanceof ConfigFeatureFlagValuesTransition
-          && this.flagValues.equals(((ConfigFeatureFlagValuesTransition) other).flagValues);
+      return other instanceof ConfigFeatureFlagValuesTransition configFeatureFlagValuesTransition
+          && this.flagValues.equals(configFeatureFlagValuesTransition.flagValues);
     }
 
     @Override
@@ -157,8 +157,8 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof ConfigFeatureFlagTransitionFactory
-        && this.attributeName.equals(((ConfigFeatureFlagTransitionFactory) other).attributeName);
+    return other instanceof ConfigFeatureFlagTransitionFactory configFeatureFlagTransitionFactory
+        && this.attributeName.equals(configFeatureFlagTransitionFactory.attributeName);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
index 59e28c9..8c9c061 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigStarlarkCommon.java
@@ -45,8 +45,8 @@
       Object name, boolean mandatory, StarlarkThread thread) throws EvalException {
 
     Label label;
-    if (name instanceof Label) {
-      label = (Label) name;
+    if (name instanceof Label nameLabel) {
+      label = nameLabel;
     } else if (name instanceof String) {
       LabelConverter converter = LabelConverter.forBzlEvaluatingThread(thread);
       try {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index 237e197..c7ceaff 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -1190,8 +1190,8 @@
     }
 
     ActionOwner actionOwner = null;
-    if (actionConstructionContext instanceof RuleContext
-        && ((RuleContext) actionConstructionContext).useAutoExecGroups()) {
+    if (actionConstructionContext instanceof RuleContext ruleContext
+        && ruleContext.useAutoExecGroups()) {
       actionOwner = actionConstructionContext.getActionOwner(semantics.getCppToolchainType());
     }
     try {
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
index cdb1c1a..8a187b5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcToolchainConfigInfo.java
@@ -385,10 +385,10 @@
     ImmutableList.Builder<CToolchain.FlagGroup> flagGroups = ImmutableList.builder();
     ImmutableList.Builder<String> flags = ImmutableList.builder();
     for (Expandable expandable : flagGroup.getExpandables()) {
-      if (expandable instanceof FlagGroup) {
-        flagGroups.add(flagGroupToProto((FlagGroup) expandable));
-      } else if (expandable instanceof SingleChunkFlag) {
-        flags.add(((SingleChunkFlag) expandable).getString());
+      if (expandable instanceof FlagGroup expandableFlagGroup) {
+        flagGroups.add(flagGroupToProto(expandableFlagGroup));
+      } else if (expandable instanceof SingleChunkFlag singleChunkFlag) {
+        flags.add(singleChunkFlag.getString());
       } else if (expandable instanceof CcToolchainFeatures.Flag) {
         flags.add(((CcToolchainFeatures.Flag) expandable).getString());
       } else {
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 c17919d..501452e 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
@@ -355,13 +355,13 @@
       structuredVariableCache.putIfAbsent(name, variableOrError);
     }
 
-    if (variableOrError instanceof VariableValue) {
-      return (VariableValue) variableOrError;
+    if (variableOrError instanceof VariableValue variableValue) {
+      return variableValue;
     }
     if (throwOnMissingVariable) {
       throw new ExpansionException(
-          variableOrError instanceof String
-              ? (String) variableOrError
+          variableOrError instanceof String string
+              ? string
               : String.format(
                   "Invalid toolchain configuration: Cannot find variable named '%s'.", name));
     }
@@ -1449,8 +1449,8 @@
     VariableValue getNonStructuredVariable(String name) {
       if (keyToIndex.containsKey(name)) {
         Object o = values.get(keyToIndex.get(name));
-        if (o instanceof String) {
-          return new StringValue((String) o);
+        if (o instanceof String string) {
+          return new StringValue(string);
         }
         return (VariableValue) o;
       }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
index 987c1fb..6234a14 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CppCompileActionBuilder.java
@@ -84,8 +84,8 @@
       CppSemantics cppSemantics) {
 
     ActionOwner actionOwner = null;
-    if (actionConstructionContext instanceof RuleContext
-        && ((RuleContext) actionConstructionContext).useAutoExecGroups()) {
+    if (actionConstructionContext instanceof RuleContext ruleContext
+        && ruleContext.useAutoExecGroups()) {
       actionOwner = actionConstructionContext.getActionOwner(cppSemantics.getCppToolchainType());
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoCompilationContext.java
index 976dd79..002e4fa 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/LtoCompilationContext.java
@@ -155,8 +155,8 @@
     if (this == o) {
       return true;
     }
-    return (o instanceof LtoCompilationContext)
-        && ltoBitcodeFiles.equals(((LtoCompilationContext) o).ltoBitcodeFiles);
+    return o instanceof LtoCompilationContext ltoCompilationContext
+        && ltoBitcodeFiles.equals(ltoCompilationContext.ltoBitcodeFiles);
   }
 
   @Override
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 2ef8f37..c768ed8 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
@@ -224,8 +224,8 @@
       }
       for (String key : library.objectMap.keySet()) {
         Object value = library.objectMap.get(key);
-        if (value instanceof Depset) {
-          depsetMapBuilder.computeIfAbsent(key, k -> ImmutableList.builder()).add((Depset) value);
+        if (value instanceof Depset depset) {
+          depsetMapBuilder.computeIfAbsent(key, k -> ImmutableList.builder()).add(depset);
         } else {
           constantsMap.put(key, value);
         }
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 3f44a6d..5f7854c 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
@@ -393,9 +393,7 @@
               fromRule.getLabel(),
               toLabel);
       AdvertisedProviderSet advertisedProviderSet =
-          toTarget instanceof Rule
-              ? ((Rule) toTarget).getRuleClassObject().getAdvertisedProviders()
-              : null;
+          toTarget instanceof Rule rule ? rule.getRuleClassObject().getAdvertisedProviders() : null;
       if (advertisedProviderSet != null
           && AspectDefinition.satisfies(aspect, advertisedProviderSet)) {
         return true;
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 c812352..b17a713 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
@@ -76,8 +76,8 @@
       throws EvalException, RuleErrorException {
     if (value == null || value == Starlark.NONE) {
       return null;
-    } else if (value instanceof JavaCompilationInfoProvider) {
-      return (JavaCompilationInfoProvider) value;
+    } else if (value instanceof JavaCompilationInfoProvider javaCompilationInfoProvider) {
+      return javaCompilationInfoProvider;
     } else if (value instanceof StructImpl info) {
       Builder builder =
           new Builder()
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 35525a5..d0a4fb4 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
@@ -89,8 +89,8 @@
   static JavaGenJarsProvider from(Object obj) throws EvalException {
     if (obj == null || obj == Starlark.NONE) {
       return EMPTY;
-    } else if (obj instanceof JavaGenJarsProvider) {
-      return (JavaGenJarsProvider) obj;
+    } else if (obj instanceof JavaGenJarsProvider javaGenJarsProvider) {
+      return javaGenJarsProvider;
     } else if (obj instanceof StructImpl struct) {
       return new AutoValue_JavaGenJarsProvider_NativeJavaGenJarsProvider(
           struct.getValue("enabled", Boolean.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 8d449cc..445ef1d 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
@@ -581,8 +581,8 @@
 
     @Override
     public JavaInfo wrap(Info info) throws RuleErrorException {
-      if (info instanceof JavaInfo) {
-        return (JavaInfo) info;
+      if (info instanceof JavaInfo javaInfo) {
+        return javaInfo;
       } else if (info instanceof StructImpl) {
         try {
           return new JavaInfo((StructImpl) info);
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 ea016e3..5adcb5a 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
@@ -127,8 +127,8 @@
     Object value = javaInfo.getValue("module_flags_info");
     if (value == null || value == Starlark.NONE) {
       return null;
-    } else if (value instanceof JavaModuleFlagsProvider) {
-      return (JavaModuleFlagsProvider) value;
+    } else if (value instanceof JavaModuleFlagsProvider javaModuleFlagsProvider) {
+      return javaModuleFlagsProvider;
     } else if (value instanceof StructImpl moduleFlagsInfo) {
       return JavaModuleFlagsProvider.create(
           moduleFlagsInfo.getValue("add_exports", Depset.class).toList(String.class),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java
index cec8672..cd6f81c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaPackageConfigurationProvider.java
@@ -102,8 +102,8 @@
 
     @Override
     public JavaPackageConfigurationProvider wrap(Info value) throws RuleErrorException {
-      if (value instanceof StructImpl) {
-        return new JavaPackageConfigurationProvider((StructImpl) value);
+      if (value instanceof StructImpl structImpl) {
+        return new JavaPackageConfigurationProvider(structImpl);
       } else {
         throw new RuleErrorException(
             "expected an instance of JavaPackageConfigurationProvider, got: "
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 5477280..4c95ac0 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
@@ -96,8 +96,8 @@
       if (value instanceof JavaInfo) {
         // needed because currently native JavaInfo extends JavaPluginInfo
         throw new RuleErrorException("got element of type JavaInfo, want JavaPluginInfo");
-      } else if (value instanceof JavaPluginInfo) {
-        return (JavaPluginInfo) value;
+      } else if (value instanceof JavaPluginInfo javaPluginInfo) {
+        return javaPluginInfo;
       } else if (value instanceof StructImpl) {
         try {
           StructImpl info = (StructImpl) value;
@@ -154,8 +154,8 @@
     }
 
     public static JavaPluginData wrap(Object obj) throws EvalException, RuleErrorException {
-      if (obj instanceof JavaPluginData) {
-        return (JavaPluginData) obj;
+      if (obj instanceof JavaPluginData javaPluginData) {
+        return javaPluginData;
       } else if (obj instanceof StructImpl struct) {
         return JavaPluginData.create(
             Depset.cast(struct.getValue("processor_classes"), String.class, "processor_classes"),
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
index 56cf020..98bc22e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java
@@ -74,10 +74,10 @@
         throws EvalException, RuleErrorException {
       ImmutableList.Builder<JavaOutput> result = ImmutableList.builder();
       for (Object info : outputs) {
-        if (info instanceof JavaOutput) {
-          result.add((JavaOutput) info);
-        } else if (info instanceof StructImpl) {
-          result.add(fromStarlarkJavaOutput((StructImpl) info));
+        if (info instanceof JavaOutput javaOutput) {
+          result.add(javaOutput);
+        } else if (info instanceof StructImpl structImpl) {
+          result.add(fromStarlarkJavaOutput(structImpl));
         } else {
           throw new RuleErrorException("expected JavaOutput, got: " + Starlark.type(info));
         }
@@ -353,8 +353,8 @@
       throws EvalException, RuleErrorException {
     if (obj == Starlark.NONE) {
       return JavaRuleOutputJarsProvider.EMPTY;
-    } else if (obj instanceof JavaRuleOutputJarsProvider) {
-      return (JavaRuleOutputJarsProvider) obj;
+    } else if (obj instanceof JavaRuleOutputJarsProvider javaRuleOutputJarsProvider) {
+      return javaRuleOutputJarsProvider;
     } else if (obj instanceof StructImpl) {
       return JavaRuleOutputJarsProvider.builder()
           .addJavaOutput(
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
index 1de0a74..2b0f5f0 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaStarlarkCommon.java
@@ -269,14 +269,14 @@
   @Override
   public String getTargetKind(Object target, StarlarkThread thread) throws EvalException {
     checkPrivateAccess(thread);
-    if (target instanceof MergedConfiguredTarget) {
-      target = ((MergedConfiguredTarget) target).getBaseConfiguredTarget();
+    if (target instanceof MergedConfiguredTarget mergedConfiguredTarget) {
+      target = mergedConfiguredTarget.getBaseConfiguredTarget();
     }
-    if (target instanceof ConfiguredTarget) {
-      target = ((ConfiguredTarget) target).getActual();
+    if (target instanceof ConfiguredTarget configuredTarget) {
+      target = configuredTarget.getActual();
     }
-    if (target instanceof AbstractConfiguredTarget) {
-      return ((AbstractConfiguredTarget) target).getRuleClassString();
+    if (target instanceof AbstractConfiguredTarget abstractConfiguredTarget) {
+      return abstractConfiguredTarget.getRuleClassString();
     }
     return "";
   }
@@ -351,10 +351,10 @@
 
   @VisibleForTesting
   static String printableType(Object elem) {
-    if (elem instanceof StarlarkInfoWithSchema) {
-      return ((StarlarkInfoWithSchema) elem).getProvider().getPrintableName();
-    } else if (elem instanceof NativeInfo) {
-      return ((NativeInfo) elem).getProvider().getPrintableName();
+    if (elem instanceof StarlarkInfoWithSchema starlarkInfoWithSchema) {
+      return starlarkInfoWithSchema.getProvider().getPrintableName();
+    } else if (elem instanceof NativeInfo nativeInfo) {
+      return nativeInfo.getProvider().getPrintableName();
     }
     return Starlark.type(elem);
   }
@@ -412,12 +412,12 @@
   }
 
   static boolean isInstanceOfProvider(Object obj, Provider provider) {
-    if (obj instanceof NativeInfo) {
-      return ((NativeInfo) obj).getProvider().getKey().equals(provider.getKey());
-    } else if (obj instanceof StarlarkInfoWithSchema) {
-      return ((StarlarkInfoWithSchema) obj).getProvider().getKey().equals(provider.getKey());
-    } else if (obj instanceof StarlarkInfoNoSchema) {
-      return ((StarlarkInfoNoSchema) obj).getProvider().getKey().equals(provider.getKey());
+    if (obj instanceof NativeInfo nativeInfo) {
+      return nativeInfo.getProvider().getKey().equals(provider.getKey());
+    } else if (obj instanceof StarlarkInfoWithSchema starlarkInfoWithSchema) {
+      return starlarkInfoWithSchema.getProvider().getKey().equals(provider.getKey());
+    } else if (obj instanceof StarlarkInfoNoSchema starlarkInfoNoSchema) {
+      return starlarkInfoNoSchema.getProvider().getKey().equals(provider.getKey());
     }
     return false;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
index 047c42a..6dd6a1d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/LocalRepositoryFunction.java
@@ -70,8 +70,8 @@
     String name = rule.getName();
     Object pathObj = rule.getAttr("path");
     String path;
-    if (pathObj instanceof String) {
-      path = (String) pathObj;
+    if (pathObj instanceof String string) {
+      path = string;
     } else {
       path = "";
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/starlarkdocextract/ModuleInfoExtractor.java b/src/main/java/com/google/devtools/build/lib/rules/starlarkdocextract/ModuleInfoExtractor.java
index b6a67cc..4c3e251 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/starlarkdocextract/ModuleInfoExtractor.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/starlarkdocextract/ModuleInfoExtractor.java
@@ -210,20 +210,20 @@
           // generated.
           return;
         }
-        if (value instanceof StarlarkRuleFunction) {
-          visitRule(qualifiedName, (StarlarkRuleFunction) value);
-        } else if (value instanceof MacroFunction) {
-          visitMacroFunction(qualifiedName, (MacroFunction) value);
-        } else if (value instanceof StarlarkProvider) {
-          visitProvider(qualifiedName, (StarlarkProvider) value);
-        } else if (value instanceof StarlarkFunction) {
-          visitFunction(qualifiedName, (StarlarkFunction) value);
-        } else if (value instanceof StarlarkDefinedAspect) {
-          visitAspect(qualifiedName, (StarlarkDefinedAspect) value);
-        } else if (value instanceof RepositoryRuleFunction) {
-          visitRepositoryRule(qualifiedName, (RepositoryRuleFunction) value);
-        } else if (value instanceof ModuleExtension) {
-          visitModuleExtension(qualifiedName, (ModuleExtension) value);
+        if (value instanceof StarlarkRuleFunction starlarkRuleFunction) {
+          visitRule(qualifiedName, starlarkRuleFunction);
+        } else if (value instanceof MacroFunction macroFunction) {
+          visitMacroFunction(qualifiedName, macroFunction);
+        } else if (value instanceof StarlarkProvider starlarkProvider) {
+          visitProvider(qualifiedName, starlarkProvider);
+        } else if (value instanceof StarlarkFunction starlarkFunction) {
+          visitFunction(qualifiedName, starlarkFunction);
+        } else if (value instanceof StarlarkDefinedAspect starlarkDefinedAspect) {
+          visitAspect(qualifiedName, starlarkDefinedAspect);
+        } else if (value instanceof RepositoryRuleFunction repositoryRuleFunction) {
+          visitRepositoryRule(qualifiedName, repositoryRuleFunction);
+        } else if (value instanceof ModuleExtension moduleExtension) {
+          visitModuleExtension(qualifiedName, moduleExtension);
         } else if (value instanceof Structure) {
           recurseIntoStructure(
               qualifiedName, (Structure) value, /* shouldVisitVerifiedForAncestor= */ true);
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 253974e..fdc38cb 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
@@ -463,22 +463,22 @@
         break; // proceed
     }
 
-    if (event instanceof BuildStartingEvent) {
-      BuildRequest buildRequest = ((BuildStartingEvent) event).request();
+    if (event instanceof BuildStartingEvent buildStartingEvent) {
+      BuildRequest buildRequest = buildStartingEvent.request();
       isCommandToSkipBuildCompleteEvent =
           buildRequest.getCommandName().equals("test")
               || buildRequest.getCommandName().equals("coverage")
               || buildRequest.getCommandName().equals("run");
     }
 
-    if (event instanceof BuildEventWithConfiguration) {
-      for (BuildEvent configuration : ((BuildEventWithConfiguration) event).getConfigurations()) {
+    if (event instanceof BuildEventWithConfiguration buildEventWithConfiguration) {
+      for (BuildEvent configuration : buildEventWithConfiguration.getConfigurations()) {
         maybeReportConfiguration(configuration);
       }
     }
 
-    if (event instanceof EventReportingArtifacts) {
-      ReportedArtifacts reportedArtifacts = ((EventReportingArtifacts) event).reportedArtifacts();
+    if (event instanceof EventReportingArtifacts eventReportingArtifacts) {
+      ReportedArtifacts reportedArtifacts = eventReportingArtifacts.reportedArtifacts();
       for (NestedSet<Artifact> artifactSet : reportedArtifacts.artifacts) {
         maybeReportArtifactSet(reportedArtifacts.completionContext, artifactSet);
       }
@@ -516,8 +516,8 @@
       buildComplete(event);
     }
 
-    if (event instanceof NoBuildEvent) {
-      if (!((NoBuildEvent) event).separateFinishedEvent()) {
+    if (event instanceof NoBuildEvent noBuildEvent) {
+      if (!noBuildEvent.separateFinishedEvent()) {
         buildComplete(event);
       }
     }
@@ -712,8 +712,8 @@
 
   /** Returns whether a {@link BuildEvent} should be ignored or was buffered. */
   private RetentionDecision routeBuildEvent(BuildEvent event) {
-    if (event instanceof ActionExecutedEvent
-        && !shouldPublishActionExecutedEvent((ActionExecutedEvent) event)) {
+    if (event instanceof ActionExecutedEvent actionExecutedEvent
+        && !shouldPublishActionExecutedEvent(actionExecutedEvent)) {
       return RetentionDecision.DISCARD;
     }
 
@@ -761,7 +761,7 @@
       // Publish all new logs with inputs and input sizes
       return true;
     }
-    return (event.getAction() instanceof ExtraAction);
+    return event.getAction() instanceof ExtraAction;
   }
 
   private synchronized boolean bufferUntilPrerequisitesReceived(BuildEvent event) {
@@ -780,7 +780,7 @@
 
   /** Return true if the test summary contains no actual test runs. */
   private static boolean isVacuousTestSummary(BuildEvent event) {
-    return event instanceof TestSummary && (((TestSummary) event).totalRuns() == 0);
+    return event instanceof TestSummary && ((TestSummary) event).totalRuns() == 0;
   }
 
   /**
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/mobileinstall/MobileInstallCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/mobileinstall/MobileInstallCommand.java
index 82003fb..f966cbd 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/mobileinstall/MobileInstallCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/mobileinstall/MobileInstallCommand.java
@@ -408,8 +408,8 @@
     // Dereference any aliases that might be present.
     target = target.getActual();
 
-    if (target instanceof AbstractConfiguredTarget) {
-      String ruleType = ((AbstractConfiguredTarget) target).getRuleClassString();
+    if (target instanceof AbstractConfiguredTarget abstractConfiguredTarget) {
+      String ruleType = abstractConfiguredTarget.getRuleClassString();
       if (!mobileInstallSupportedRules.contains(ruleType)) {
         return String.format(
             "mobile-install can only be run on %s targets. Got: %s",
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 35e4e0e..92275a4 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
@@ -199,8 +199,8 @@
           // unpack and re-throw the IOException. Otherwise, re-throw
           // this unexpected RuntimeException
           final Throwable cause = re.getCause();
-          if (cause instanceof IOException) {
-            throw (IOException) cause;
+          if (cause instanceof IOException ioException) {
+            throw ioException;
           } else {
             throw re;
           }
diff --git a/src/main/java/com/google/devtools/build/lib/shell/TerminationStatus.java b/src/main/java/com/google/devtools/build/lib/shell/TerminationStatus.java
index 5fcb1ff..072c100 100644
--- a/src/main/java/com/google/devtools/build/lib/shell/TerminationStatus.java
+++ b/src/main/java/com/google/devtools/build/lib/shell/TerminationStatus.java
@@ -243,8 +243,8 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof TerminationStatus
-        && ((TerminationStatus) other).waitResult == this.waitResult;
+    return other instanceof TerminationStatus terminationStatus
+        && terminationStatus.waitResult == this.waitResult;
   }
 
   /** Returns a new {@link TerminationStatus.Builder}. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AbstractLabelCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/AbstractLabelCycleReporter.java
index b89bd01..746093d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AbstractLabelCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AbstractLabelCycleReporter.java
@@ -50,8 +50,8 @@
 
   /** Returns the String representation of the {@code SkyKey}. */
   protected String prettyPrint(Object rawKey) {
-    if (rawKey instanceof ActionLookupKey) {
-      return ((ActionLookupKey) rawKey).getLabel().toString();
+    if (rawKey instanceof ActionLookupKey actionLookupKey) {
+      return actionLookupKey.getLabel().toString();
     }
     return getLabel((SkyKey) rawKey).toString();
   }
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 f96186b..642f740 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
@@ -54,8 +54,8 @@
    * #shouldSkipOnPathToCycle}
    */
   private static String prettyPrint(SkyFunctionName skyFunctionName, Object arg) {
-    if (arg instanceof Artifact) {
-      return prettyPrintArtifact(((Artifact) arg));
+    if (arg instanceof Artifact artifact) {
+      return prettyPrintArtifact(artifact);
     } else if (arg instanceof ActionLookupData) {
       return "action from: " + arg;
     } else if (arg instanceof TopLevelActionLookupKeyWrapper key) {
@@ -87,13 +87,13 @@
   @Override
   protected Label getLabel(SkyKey key) {
     Object arg = key.argument();
-    if (arg instanceof Artifact) {
-      return ((Artifact) arg).getOwner();
-    } else if (arg instanceof ActionLookupData) {
-      return ((ActionLookupData) arg).getLabel();
-    } else if (arg instanceof TopLevelActionLookupKeyWrapper) {
-      return ((TopLevelActionLookupKeyWrapper) arg).actionLookupKey().getLabel();
-    } else if (arg instanceof TestCompletionKey
+    if (arg instanceof Artifact artifact) {
+      return artifact.getOwner();
+    } else if (arg instanceof ActionLookupData actionLookupData) {
+      return actionLookupData.getLabel();
+    } else if (arg instanceof TopLevelActionLookupKeyWrapper topLevelActionLookupKeyWrapper) {
+      return topLevelActionLookupKeyWrapper.actionLookupKey().getLabel();
+    } else if (arg instanceof TestCompletionKey testCompletionKey
         && key.functionName().equals(SkyFunctions.TEST_COMPLETION)) {
       return ((TestCompletionKey) arg).configuredTargetKey().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 f599087..023a3e2 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
@@ -1061,8 +1061,8 @@
             input, ((ActionExecutionValue) retrievedMetadata).getExistingFileArtifactValue(input));
       } else if (retrievedMetadata instanceof MissingArtifactValue) {
         inputData.putWithNoDepOwner(input, FileArtifactValue.MISSING_FILE_MARKER);
-      } else if (retrievedMetadata instanceof FileArtifactValue) {
-        inputData.putWithNoDepOwner(input, (FileArtifactValue) retrievedMetadata);
+      } else if (retrievedMetadata instanceof FileArtifactValue fileArtifactValue) {
+        inputData.putWithNoDepOwner(input, fileArtifactValue);
       } else {
         throw new IllegalStateException(
             "unknown metadata for " + input.getExecPathString() + ": " + retrievedMetadata);
@@ -1642,8 +1642,8 @@
     }
 
     private void handleActionExecutionExceptionFromSkykey(SkyKey key, ActionExecutionException e) {
-      if (key instanceof Artifact) {
-        handleActionExecutionExceptionPerArtifact((Artifact) key, e);
+      if (key instanceof Artifact artifact) {
+        handleActionExecutionExceptionPerArtifact(artifact, e);
         return;
       }
       Set<Artifact> associatedInputs = skyKeyToDerivedArtifactSetForExceptions.get().get(key);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionState.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionState.java
index fa7141c..bff051b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionState.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionState.java
@@ -390,8 +390,8 @@
 
     @Override
     public ActionExecutionValue get() throws ActionExecutionException, InterruptedException {
-      if (e instanceof InterruptedException) {
-        throw (InterruptedException) e;
+      if (e instanceof InterruptedException interruptedException) {
+        throw interruptedException;
       }
       throw (ActionExecutionException) e;
     }
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 ecdea6f..87c9901 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
@@ -141,8 +141,8 @@
         actionOutputMetadataStore.getAllArtifactData(),
         actionOutputMetadataStore.getAllTreeArtifactData(),
         outputSymlinks,
-        action instanceof IncludeScannable
-            ? ((IncludeScannable) action).getDiscoveredModules()
+        action instanceof IncludeScannable includeScannable
+            ? includeScannable.getDiscoveredModules()
             : NestedSetBuilder.emptySet(Order.STABLE_ORDER));
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionOutputMetadataStore.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionOutputMetadataStore.java
index a6ebff5..9af32fd 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionOutputMetadataStore.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionOutputMetadataStore.java
@@ -686,8 +686,8 @@
       return FileArtifactValue.createForDirectoryWithMtime(stat.getLastModifiedTime());
     }
 
-    if (stat instanceof FileStatusWithMetadata) {
-      return ((FileStatusWithMetadata) stat).getMetadata();
+    if (stat instanceof FileStatusWithMetadata fileStatusWithMetadata) {
+      return fileStatusWithMetadata.getMetadata();
     }
 
     FileStateValue fileStateValue =
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 40f725c..59ada98 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
@@ -123,8 +123,8 @@
     AspectsList.Builder builder = new AspectsList.Builder();
 
     for (AspectClass aspectClass : topLevelAspectsClasses) {
-      if (aspectClass instanceof StarlarkAspectClass) {
-        StarlarkAspect starlarkAspect = loadStarlarkAspect(env, (StarlarkAspectClass) aspectClass);
+      if (aspectClass instanceof StarlarkAspectClass starlarkAspectClass) {
+        StarlarkAspect starlarkAspect = loadStarlarkAspect(env, starlarkAspectClass);
         if (starlarkAspect == null) {
           return null;
         }
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 7c17bf8..ba6d18f 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
@@ -1136,8 +1136,8 @@
     ImmutableList.Builder<Pair<String, Location>> loads = ImmutableList.builder();
     for (StarlarkFile file : files) {
       for (Statement stmt : file.getStatements()) {
-        if (stmt instanceof LoadStatement) {
-          StringLiteral module = ((LoadStatement) stmt).getImport();
+        if (stmt instanceof LoadStatement loadStatement) {
+          StringLiteral module = loadStatement.getImport();
           loads.add(Pair.of(module.getValue(), module.getStartLocation()));
         }
       }
@@ -1536,8 +1536,8 @@
           String.format(
               "Encountered error while reading extension file '%s': %s", file, cause.getMessage());
     DetailedExitCode detailedExitCode =
-        cause instanceof DetailedException
-            ? ((DetailedException) cause).getDetailedExitCode()
+        cause instanceof DetailedException detailedException
+            ? detailedException.getDetailedExitCode()
             : BzlLoadFailedException.createDetailedExitCode(
                 errorMessage, Code.CONTAINING_PACKAGE_NOT_FOUND);
       return new BzlLoadFailedException(
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java
index 850bf37..9298ac9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BzlmodRepoRuleFunction.java
@@ -307,8 +307,8 @@
       RepoSpec repoSpec, ImmutableMap<String, Module> loadedModules)
       throws BzlmodRepoRuleFunctionException {
     Object object = loadedModules.get(repoSpec.bzlFile()).getGlobal(repoSpec.ruleClassName());
-    if (object instanceof RuleFunction) {
-      return ((RuleFunction) object).getRuleClass();
+    if (object instanceof RuleFunction ruleFunction) {
+      return ruleFunction.getRuleClass();
     } else {
       InvalidRuleException e =
           new InvalidRuleException("Invalid repository rule: " + repoSpec.getRuleClass());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentValue.java
index 4357e23..99b9870 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentValue.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ClientEnvironmentValue.java
@@ -37,8 +37,8 @@
 
   @Override
   public boolean equals(Object o) {
-    return (o instanceof ClientEnvironmentValue)
-        && Objects.equals(((ClientEnvironmentValue) o).value, value);
+    return o instanceof ClientEnvironmentValue clientEnvironmentValue
+        && Objects.equals(clientEnvironmentValue.value, value);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DefaultSyscallCache.java b/src/main/java/com/google/devtools/build/lib/skyframe/DefaultSyscallCache.java
index 1674344..cc1c024 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DefaultSyscallCache.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DefaultSyscallCache.java
@@ -161,8 +161,8 @@
   @SuppressWarnings("unchecked")
   public Collection<Dirent> readdir(Path path) throws IOException {
     Object result = readdirCache.get(path);
-    if (result instanceof IOException) {
-      throw (IOException) result;
+    if (result instanceof IOException ioException) {
+      throw ioException;
     }
     return (Collection<Dirent>) result; // unchecked cast
   }
@@ -173,14 +173,14 @@
     // Try to load a Symlinks.NOFOLLOW result first. Symlinks are rare and this enables sharing the
     // cache for all non-symlink paths.
     Object result = statCache.get(Pair.of(path, Symlinks.NOFOLLOW));
-    if (result instanceof IOException) {
-      throw (IOException) result;
+    if (result instanceof IOException ioException) {
+      throw ioException;
     }
     FileStatus status = (FileStatus) result;
     if (status != NO_STATUS && symlinks == Symlinks.FOLLOW && status.isSymbolicLink()) {
       result = statCache.get(Pair.of(path, Symlinks.FOLLOW));
-      if (result instanceof IOException) {
-        throw (IOException) result;
+      if (result instanceof IOException ioException) {
+        throw ioException;
       }
       status = (FileStatus) result;
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DetailedException.java b/src/main/java/com/google/devtools/build/lib/skyframe/DetailedException.java
index a7ac7ed..0f2c269 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DetailedException.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DetailedException.java
@@ -22,8 +22,8 @@
 
   @Nullable
   static DetailedExitCode getDetailedExitCode(Exception exception) {
-    return exception instanceof DetailedException
-        ? ((DetailedException) exception).getDetailedExitCode()
+    return exception instanceof DetailedException detailedException
+        ? detailedException.getDetailedExitCode()
         : null;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunctionWithMultipleRecursiveFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunctionWithMultipleRecursiveFunctions.java
index fae5c2d..72c07d9 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunctionWithMultipleRecursiveFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GlobFunctionWithMultipleRecursiveFunctions.java
@@ -375,8 +375,8 @@
 
   @SuppressWarnings("unchecked") // cast to NestedSet<PathFragment>
   private static void addToMatches(Object toAdd, NestedSetBuilder<PathFragment> matches) {
-    if (toAdd instanceof PathFragment) {
-      matches.add((PathFragment) toAdd);
+    if (toAdd instanceof PathFragment pathFragment) {
+      matches.add(pathFragment);
     } else if (toAdd instanceof NestedSet) {
       matches.addTransitive((NestedSet<PathFragment>) toAdd);
     }
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 7ad14e1..6afc6c72d 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
@@ -492,8 +492,8 @@
   private static Artifact getOwningArtifactFromTrie(Object trieNode) {
     Preconditions.checkArgument(
         trieNode instanceof Artifact || trieNode instanceof ConcurrentHashMap);
-    if (trieNode instanceof Artifact) {
-      return (Artifact) trieNode;
+    if (trieNode instanceof Artifact artifact) {
+      return artifact;
     }
     Object nodeIter = trieNode;
     while (!(nodeIter instanceof Artifact)) {
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 b6a201d..3d88b35 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
@@ -1436,8 +1436,8 @@
         @Override
         BuildFileContainsErrorsException create(
             PackageIdentifier packId, String msg, DetailedExitCode detailedExitCode, Exception e) {
-          return e instanceof IOException
-              ? new BuildFileContainsErrorsException(packId, msg, (IOException) e, detailedExitCode)
+          return e instanceof IOException ioException
+              ? new BuildFileContainsErrorsException(packId, msg, ioException, detailedExitCode)
               : new BuildFileContainsErrorsException(packId, msg, detailedExitCode);
         }
       },
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 d684d9b..c67e21f 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
@@ -133,8 +133,8 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof PrepareDepsOfPatternsValue
-        && targetPatternKeys.equals(((PrepareDepsOfPatternsValue) other).getTargetPatternKeys());
+    return other instanceof PrepareDepsOfPatternsValue prepareDepsOfPatternsValue
+        && targetPatternKeys.equals(prepareDepsOfPatternsValue.getTargetPatternKeys());
   }
 
   @Override
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 42e0cd9..0151bc0 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
@@ -335,8 +335,8 @@
 
         if (value instanceof FileArtifactValue || value instanceof TreeArtifactValue) {
           fsVal = (HasDigest) value;
-        } else if (value instanceof ActionExecutionValue) {
-          fsVal = ((ActionExecutionValue) value).getExistingFileArtifactValue(artifact);
+        } else if (value instanceof ActionExecutionValue actionExecutionValue) {
+          fsVal = actionExecutionValue.getExistingFileArtifactValue(artifact);
         } else {
           return NON_EXISTENT_FILE_INFO;
         }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgSkyKey.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgSkyKey.java
index aefdb9d..8cbd4e8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgSkyKey.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursivePkgSkyKey.java
@@ -37,8 +37,8 @@
   @Override
   public boolean equals(Object o) {
     return super.equals(o)
-        && ((o instanceof RecursivePkgSkyKey))
-        && ((RecursivePkgSkyKey) o).functionName().equals(functionName());
+        && o instanceof RecursivePkgSkyKey recursivePkgSkyKey
+        && recursivePkgSkyKey.functionName().equals(functionName());
   }
 
   /** Don't bother to memoize hashCode because {@link RecursivePkgKey#hashCode} is cheap enough. */
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 2c0020e..5efe5ae 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
@@ -920,8 +920,8 @@
 
   private InputMetadataProvider createFileCache(
       InputMetadataProvider graphFileCache, @Nullable FileSystem actionFileSystem) {
-    if (actionFileSystem instanceof InputMetadataProvider) {
-      return (InputMetadataProvider) actionFileSystem;
+    if (actionFileSystem instanceof InputMetadataProvider inputMetadataProvider) {
+      return inputMetadataProvider;
     }
     return new DelegatingPairInputMetadataProvider(graphFileCache, perBuildFileCache);
   }
@@ -1122,8 +1122,8 @@
       // Action failures may be caused by lost inputs. Lost input failures have higher priority
       // because rewinding may be able to restore what was lost and allow the action to complete
       // without error.
-      if (e instanceof LostInputsActionExecutionException) {
-        lostInputsException = (LostInputsActionExecutionException) e;
+      if (e instanceof LostInputsActionExecutionException lostInputsActionExecutionException) {
+        lostInputsException = lostInputsActionExecutionException;
       } else {
         try {
           checkActionFileSystemForLostInputs(
@@ -1869,8 +1869,8 @@
     if (actionResult != null) {
       return actionResult.spawnResults();
     }
-    if (exception instanceof SpawnActionExecutionException) {
-      return ImmutableList.of(((SpawnActionExecutionException) exception).getSpawnResult());
+    if (exception instanceof SpawnActionExecutionException spawnActionExecutionException) {
+      return ImmutableList.of(spawnActionExecutionException.getSpawnResult());
     }
     return ImmutableList.of();
   }
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 e90e586..8497791 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
@@ -551,8 +551,8 @@
       executionDetailedExitCode =
           getExecutionDetailedExitCodeFromCause(result, exception, bugReporter);
       analysisRootCauses =
-          exception instanceof ActionExecutionException
-              ? ((ActionExecutionException) exception).getRootCauses()
+          exception instanceof ActionExecutionException actionExecutionException
+              ? actionExecutionException.getRootCauses()
               : NestedSetBuilder.emptySet(Order.STABLE_ORDER);
     } else {
       BugReport.logUnexpected(
@@ -896,8 +896,8 @@
       throws BuildFailedException, TestExecException {
     Throwables.throwIfUnchecked(cause);
     Throwable innerCause = cause.getCause();
-    if (innerCause instanceof TestExecException) {
-      throw (TestExecException) innerCause;
+    if (innerCause instanceof TestExecException testExecException) {
+      throw testExecException;
     }
     if (cause instanceof ActionExecutionException actionExecutionCause) {
       String message = cause.getMessage();
@@ -914,11 +914,11 @@
           /* errorAlreadyShown= */ !actionExecutionCause.showError(),
           actionExecutionCause.getDetailedExitCode());
     }
-    if (cause instanceof InputFileErrorException) {
-      throw (InputFileErrorException) cause;
+    if (cause instanceof InputFileErrorException inputFileErrorException) {
+      throw inputFileErrorException;
     }
-    if (cause instanceof TopLevelOutputException) {
-      throw (TopLevelOutputException) cause;
+    if (cause instanceof TopLevelOutputException topLevelOutputException) {
+      throw topLevelOutputException;
     }
 
     // We encountered an exception we don't think we should have encountered. This can indicate
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 8009e05..79ddaf2 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
@@ -1906,8 +1906,8 @@
       ErrorInfo error = firstError.getValue();
       Throwable e = error.getException();
       // Wrap loading failed exceptions
-      if (e instanceof NoSuchThingException) {
-        e = new InvalidConfigurationException(((NoSuchThingException) e).getDetailedExitCode(), e);
+      if (e instanceof NoSuchThingException noSuchThingException) {
+        e = new InvalidConfigurationException(noSuchThingException.getDetailedExitCode(), e);
       } else if (e == null && !error.getCycleInfo().isEmpty()) {
         cyclesReporter.reportCycles(error.getCycleInfo(), firstError.getKey(), eventHandler);
         e =
@@ -4239,8 +4239,8 @@
     graph.parallelForEach(
         node -> {
           SkyKey k = node.getKey();
-          if (k instanceof FileStateKey) {
-            RootedPath rootedPath = ((FileStateKey) k).argument();
+          if (k instanceof FileStateKey fileStateKey) {
+            RootedPath rootedPath = fileStateKey.argument();
             if (workingSetRootedPaths.contains(rootedPath)) {
               leafs.add(k);
             }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeFocuser.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeFocuser.java
index af1e3bf..b00c067 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeFocuser.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeFocuser.java
@@ -246,8 +246,8 @@
         // This is necessary to keep the action inputs encapsulated by a NestedSet. Otherwise,
         // those inputs will be missing. ActionExecutionFunction#lookupInput allows getting a
         // transitive dep without adding a SkyframeDependency on it.
-        if (dep instanceof ArtifactNestedSetKey) {
-          for (Artifact a : ((ArtifactNestedSetKey) dep).expandToArtifacts()) {
+        if (dep instanceof ArtifactNestedSetKey artifactNestedSetKey) {
+          for (Artifact a : artifactNestedSetKey.expandToArtifacts()) {
             SkyKey aKey = Artifact.key(a);
             if (keptDeps.add(aKey)) {
               maybeCollectVerificationSet(aKey);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
index f5980e6..09917ef 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeTargetPatternEvaluator.java
@@ -128,8 +128,8 @@
           // exception if there is a bug in error handling.
           Exception exception = error.getException();
           errorMessage = exception.getMessage();
-          if (exception instanceof TargetParsingException) {
-            targetParsingException = (TargetParsingException) exception;
+          if (exception instanceof TargetParsingException tpe) {
+            targetParsingException = tpe;
           } else {
             targetParsingException = wrapException(exception, key, key);
           }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
index 955d53f..f98bf8c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkAspectFactory.java
@@ -130,8 +130,8 @@
     if (requiredConfigFragments != null) {
       builder.addProvider(requiredConfigFragments);
     }
-    if (aspectStarlarkObject instanceof Iterable) {
-      addDeclaredProviders(builder, (Iterable) aspectStarlarkObject);
+    if (aspectStarlarkObject instanceof Iterable<?> iterable) {
+      addDeclaredProviders(builder, iterable);
     } else {
       // Either an old-style struct or a single declared provider (not in a list)
       Info info = (Info) aspectStarlarkObject;
@@ -156,8 +156,8 @@
           }
         }
       } else {
-        if (info instanceof StarlarkInfo) {
-          info = ((StarlarkInfo) info).unsafeOptimizeMemoryLayout();
+        if (info instanceof StarlarkInfo starlarkInfo) {
+          info = starlarkInfo.unsafeOptimizeMemoryLayout();
         }
         builder.addStarlarkDeclaredProvider(info);
       }
@@ -178,8 +178,8 @@
                 + "a sequence of declared providers, instead got a %s at index %d",
             Starlark.type(o), i);
       }
-      if (o instanceof StarlarkInfo) {
-        o = ((StarlarkInfo) o).unsafeOptimizeMemoryLayout();
+      if (o instanceof StarlarkInfo starlarkInfo) {
+        o = starlarkInfo.unsafeOptimizeMemoryLayout();
       }
       builder.addStarlarkDeclaredProvider((Info) o);
       i++;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
index d285236..ea902c5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkBuildSettingsDetailsFunction.java
@@ -224,8 +224,8 @@
       if (buildSettingTarget.getAssociatedRule().getRuleClass().equals(ALIAS_RULE_NAME)) {
         Object actualValue =
             buildSettingTarget.getAssociatedRule().getAttr(ALIAS_ACTUAL_ATTRIBUTE_NAME);
-        if (actualValue instanceof Label) {
-          actualSettingBuilder.add((Label) actualValue);
+        if (actualValue instanceof Label label) {
+          actualSettingBuilder.add(label);
           continue;
         } else if (actualValue instanceof SelectorList) {
           // configured "actual" value
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCycleReporter.java
index 69fdac1..6166b1a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCycleReporter.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCycleReporter.java
@@ -65,10 +65,10 @@
 
   @Override
   public String prettyPrint(Object key) {
-    if (key instanceof ConfiguredTargetKey) {
-      return ((ConfiguredTargetKey) key).prettyPrint();
-    } else if (key instanceof AspectKey) {
-      return ((AspectKey) key).prettyPrint();
+    if (key instanceof ConfiguredTargetKey configuredTargetKey) {
+      return configuredTargetKey.prettyPrint();
+    } else if (key instanceof AspectKey aspectKey) {
+      return aspectKey.prettyPrint();
     } else {
       return getLabel((SkyKey) key).toString();
     }
@@ -78,8 +78,8 @@
   public Label getLabel(SkyKey key) {
     if (key instanceof ActionLookupKey) {
       return Preconditions.checkNotNull(((ActionLookupKey) key.argument()).getLabel(), key);
-    } else if (key instanceof TransitiveTargetKey) {
-      return ((TransitiveTargetKey) key).getLabel();
+    } else if (key instanceof TransitiveTargetKey transitiveTargetKey) {
+      return transitiveTargetKey.getLabel();
     } else {
       throw new UnsupportedOperationException(key.toString());
     }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
index 08eb818..51af232 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
@@ -81,11 +81,8 @@
               //  won't be listed when doing somepackage:* for the handful of cases still on the
               //  allowlist. This is only a Google-internal problem and the scale of it is
               //  acceptable in the short term while cleaning up the allowlist.
-              if (target instanceof OutputFile
-                  && ((OutputFile) target)
-                      .getGeneratingRule()
-                      .getRuleClass()
-                      .equals("cc_library")) {
+              if (target instanceof OutputFile outputFile
+                  && outputFile.getGeneratingRule().getRuleClass().equals("cc_library")) {
                 continue;
               }
               resolvedTargetsBuilder.add(target);
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 73b533d..6d7ac1f 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
@@ -77,8 +77,8 @@
         }
 
         AdvertisedProviderSet providers =
-            target instanceof Rule
-                ? ((Rule) target).getRuleClassObject().getAdvertisedProviders()
+            target instanceof Rule rule
+                ? rule.getRuleClassObject().getAdvertisedProviders()
                 : AdvertisedProviderSet.EMPTY;
 
         value = new TransitiveTraversalValueWithoutError(providers, target.getTargetKind());
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
index 07c6949..2eaf03d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java
@@ -448,8 +448,8 @@
         return new StarlarkModuleLoadingException("Cycle encountered while loading " + label);
       }
       Throwable e = Preconditions.checkNotNull(error.getException());
-      if (e instanceof BzlLoadFailedException) {
-        return new StarlarkModuleLoadingException((BzlLoadFailedException) e);
+      if (e instanceof BzlLoadFailedException bzlLoadFailedException) {
+        return new StarlarkModuleLoadingException(bzlLoadFailedException);
       }
       throw new IllegalStateException(
           "Unexpected Exception type from BzlLoadValue for " + label + " with error: " + error, e);
@@ -482,8 +482,8 @@
           pkgId, "Cycle encountered while loading package " + pkgId);
     }
     Throwable e = Preconditions.checkNotNull(error.getException());
-    if (e instanceof NoSuchPackageException) {
-      return (NoSuchPackageException) e;
+    if (e instanceof NoSuchPackageException noSuchPackageException) {
+      return noSuchPackageException;
     }
     throw new IllegalStateException(
         "Unexpected Exception type from PackageValue for '" + pkgId + "'' with error: " + error, e);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/rewinding/ActionRewindStrategy.java b/src/main/java/com/google/devtools/build/lib/skyframe/rewinding/ActionRewindStrategy.java
index d4932b2..db7094d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/rewinding/ActionRewindStrategy.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/rewinding/ActionRewindStrategy.java
@@ -440,8 +440,8 @@
         }
       }
 
-      if (lostInput instanceof Artifact
-          && failedActionDeps.contains(Artifact.key((Artifact) lostInput))) {
+      if (lostInput instanceof Artifact artifact
+          && failedActionDeps.contains(Artifact.key(artifact))) {
         checkDerived((Artifact) lostInput);
 
         lostInputOwningDirectDeps.add((DerivedArtifact) lostInput);
@@ -548,10 +548,10 @@
     for (EndpointPair<SkyKey> edge : edges) {
       SkyKey target = edge.target();
       if (target instanceof Artifact && rewindGraph.addNode(target)) {
-        newlyVisitedArtifacts.add(((DerivedArtifact) target));
+        newlyVisitedArtifacts.add((DerivedArtifact) target);
       }
       if (target instanceof ActionLookupData && rewindGraph.addNode(target)) {
-        newlyVisitedActions.add(((ActionLookupData) target));
+        newlyVisitedActions.add((ActionLookupData) target);
       }
       rewindGraph.putEdge(edge.source(), edge.target());
     }
@@ -584,8 +584,8 @@
       if (newlyVisited) {
         if (artifactKey instanceof Artifact) {
           newlyVisitedArtifacts.add((DerivedArtifact) artifactKey);
-        } else if (artifactKey instanceof ActionLookupData) {
-          newlyVisitedActions.add((ActionLookupData) artifactKey);
+        } else if (artifactKey instanceof ActionLookupData actionLookupData) {
+          newlyVisitedActions.add(actionLookupData);
         }
       }
       rewindGraph.putEdge(actionKey, artifactKey);
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 05fca20..4d249e0 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
@@ -79,8 +79,8 @@
 
     Function<Object, String> printer =
         input -> {
-          if (input instanceof ConfiguredTargetKey) {
-            Label label = ((ConfiguredTargetKey) input).getLabel();
+          if (input instanceof ConfiguredTargetKey ctk) {
+            Label label = ctk.getLabel();
             return label.toString();
           }
           if (input instanceof RegisteredToolchainsValue.Key) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/ToolchainException.java b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/ToolchainException.java
index f74a40f..cafc4d8 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/ToolchainException.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/toolchains/ToolchainException.java
@@ -71,8 +71,8 @@
     for (Throwable cause = getCause();
         cause != null && cause != cause.getCause();
         cause = cause.getCause()) {
-      if (cause instanceof ConfiguredValueCreationException) {
-        return (ConfiguredValueCreationException) cause;
+      if (cause instanceof ConfiguredValueCreationException configuredValueCreationException) {
+        return configuredValueCreationException;
       }
     }
     Cause cause =
diff --git a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
index 4e669e6..eb1ab85 100644
--- a/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
+++ b/src/main/java/com/google/devtools/build/lib/starlarkdebug/server/DebuggerSerialization.java
@@ -46,21 +46,21 @@
   }
 
   private static String getDescription(Object value) {
-    if (value instanceof String) {
-      return (String) value;
+    if (value instanceof String string) {
+      return string;
     }
     return Starlark.repr(value);
   }
 
   private static boolean hasChildren(Object value) {
-    if (value instanceof Map) {
-      return !((Map) value).isEmpty();
+    if (value instanceof Map<?, ?> map) {
+      return !map.isEmpty();
     }
     if (value instanceof Map.Entry) {
       return true;
     }
-    if (value instanceof Iterable) {
-      return ((Iterable) value).iterator().hasNext();
+    if (value instanceof Iterable<?> iterable) {
+      return iterable.iterator().hasNext();
     }
     if (value.getClass().isArray()) {
       return Array.getLength(value) > 0;
@@ -81,14 +81,14 @@
   }
 
   static ImmutableList<Value> getChildren(ThreadObjectMap objectMap, Object value) {
-    if (value instanceof Map) {
-      return getChildren(objectMap, ((Map) value).entrySet());
+    if (value instanceof Map<?, ?> map) {
+      return getChildren(objectMap, map.entrySet());
     }
-    if (value instanceof Map.Entry) {
-      return getChildren(objectMap, (Map.Entry) value);
+    if (value instanceof Map.Entry<?, ?> mapEntry) {
+      return getChildren(objectMap, mapEntry);
     }
-    if (value instanceof Iterable) {
-      return getChildren(objectMap, (Iterable) value);
+    if (value instanceof Iterable<?> iterable) {
+      return getChildren(objectMap, iterable);
     }
     if (value.getClass().isArray()) {
       return getArrayChildren(objectMap, value);
@@ -97,11 +97,11 @@
       return getDebugAttributes(objectMap, (Debug.ValueWithDebugAttributes) value);
     }
     // TODO(bazel-team): move child-listing logic to StarlarkValue where practical
-    if (value instanceof Structure) {
-      return getChildren(objectMap, (Structure) value);
+    if (value instanceof Structure structure) {
+      return getChildren(objectMap, structure);
     }
-    if (value instanceof StarlarkValue) {
-      return getChildren(objectMap, (StarlarkValue) value);
+    if (value instanceof StarlarkValue starlarkValue) {
+      return getChildren(objectMap, starlarkValue);
     }
     // fallback to assuming there are no children
     return ImmutableList.of();
diff --git a/src/main/java/com/google/devtools/build/lib/util/CommandUtils.java b/src/main/java/com/google/devtools/build/lib/util/CommandUtils.java
index c792d21..973919d 100644
--- a/src/main/java/com/google/devtools/build/lib/util/CommandUtils.java
+++ b/src/main/java/com/google/devtools/build/lib/util/CommandUtils.java
@@ -44,8 +44,8 @@
         CommandFailureUtils.describeCommandFailure(verbose, cwd(command), command)
             + ": "
             + exception.getMessage();
-    if (exception instanceof AbnormalTerminationException) {
-      CommandResult result = ((AbnormalTerminationException) exception).getResult();
+    if (exception instanceof AbnormalTerminationException abnormalTerminationException) {
+      CommandResult result = abnormalTerminationException.getResult();
       try {
         return message + "\n"
             + new String(result.getStdout())
diff --git a/src/main/java/com/google/devtools/build/lib/util/DependencySet.java b/src/main/java/com/google/devtools/build/lib/util/DependencySet.java
index 031eb1a..88dfa36 100644
--- a/src/main/java/com/google/devtools/build/lib/util/DependencySet.java
+++ b/src/main/java/com/google/devtools/build/lib/util/DependencySet.java
@@ -239,8 +239,8 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof DependencySet
-        && ((DependencySet) other).dependencies.equals(dependencies);
+    return other instanceof DependencySet dependencySet
+        && dependencySet.dependencies.equals(dependencies);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/util/FileType.java b/src/main/java/com/google/devtools/build/lib/util/FileType.java
index af9f86f..39873a7 100644
--- a/src/main/java/com/google/devtools/build/lib/util/FileType.java
+++ b/src/main/java/com/google/devtools/build/lib/util/FileType.java
@@ -102,8 +102,8 @@
 
     @Override
     public boolean equals(Object obj) {
-      return (obj instanceof ListFileType
-          && this.extensions.equals(((ListFileType) obj).extensions));
+      return obj instanceof ListFileType listFileType
+          && this.extensions.equals(listFileType.extensions);
     }
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/FileStatusWithDigestAdapter.java b/src/main/java/com/google/devtools/build/lib/vfs/FileStatusWithDigestAdapter.java
index dcba28b..f297824 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/FileStatusWithDigestAdapter.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/FileStatusWithDigestAdapter.java
@@ -25,8 +25,8 @@
   public static FileStatusWithDigest maybeAdapt(@Nullable FileStatus stat) {
     return stat == null
         ? null
-        : (stat instanceof FileStatusWithDigest)
-            ? (FileStatusWithDigest) stat
+        : stat instanceof FileStatusWithDigest fileStatusWithDigest
+            ? fileStatusWithDigest
             : new FileStatusWithDigestAdapter(stat);
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/vfs/IORuntimeException.java b/src/main/java/com/google/devtools/build/lib/vfs/IORuntimeException.java
index ef78e34..c142faa 100644
--- a/src/main/java/com/google/devtools/build/lib/vfs/IORuntimeException.java
+++ b/src/main/java/com/google/devtools/build/lib/vfs/IORuntimeException.java
@@ -69,8 +69,8 @@
   @Nullable
   public IOException getCauseIOException() {
     Throwable cause = getCause();
-    if (cause instanceof IOException) {
-      return (IOException) cause;
+    if (cause instanceof IOException ioException) {
+      return ioException;
     } else {
       return null;
     }
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 02fabc1..6e567c1 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -458,8 +458,8 @@
       // bound to global variables take on the name of the global variable.
       thread.setPostAssignHook(
           (name, value) -> {
-            if (value instanceof FakeProviderApi) {
-              ((FakeProviderApi) value).setName(name);
+            if (value instanceof FakeProviderApi fakeProviderApi) {
+              fakeProviderApi.setName(name);
             }
           });
 
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 fa4224f..b158459 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
@@ -271,8 +271,8 @@
 
     // Generic fake provider? (e.g. Starlark-defined, or trivial fake)
     // Return name set at construction, or by "export" operation, if any.
-    if (provider instanceof FakeProviderApi) {
-      return ((FakeProviderApi) provider).getName(); // may be "Unexported Provider"
+    if (provider instanceof FakeProviderApi fakeProviderApi) {
+      return fakeProviderApi.getName(); // may be "Unexported Provider"
     }
 
     // Specialized fake provider? (e.g. DefaultInfo)
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
index 4294852..04bb871 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeStarlarkRuleFunctionsApi.java
@@ -192,8 +192,8 @@
 
   @Override
   public Label label(Object input, StarlarkThread thread) throws EvalException {
-    if (input instanceof Label) {
-      return (Label) input;
+    if (input instanceof Label label) {
+      return label;
     }
     try {
       return Label.parseCanonical((String) input);
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/LabelRenderer.java b/src/main/java/com/google/devtools/build/skydoc/rendering/LabelRenderer.java
index 19a57e9..0765cc3 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/LabelRenderer.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/LabelRenderer.java
@@ -79,8 +79,8 @@
     return new Printer() {
       @Override
       public Printer repr(Object o) {
-        if (o instanceof Label) {
-          return repr(render((Label) o));
+        if (o instanceof Label label) {
+          return repr(render(label));
         } else {
           return super.repr(o);
         }
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 e62875e..0b853b0 100644
--- a/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
+++ b/src/main/java/com/google/devtools/build/skyframe/GroupedDeps.java
@@ -228,8 +228,8 @@
   public List<SkyKey> getDepGroup(int i) {
     int index = i == 0 ? 0 : groupIndices.get(i - 1);
     Object obj = elements.get(index);
-    if (obj instanceof SkyKey) {
-      return ImmutableList.of((SkyKey) obj);
+    if (obj instanceof SkyKey skyKey) {
+      return ImmutableList.of(skyKey);
     }
     int groupSize = (int) obj;
     List<?> slice = elements.subList(index + 1, index + 1 + groupSize);
@@ -359,8 +359,8 @@
   public ImmutableSet<SkyKey> toSet() {
     ImmutableSet.Builder<SkyKey> builder = ImmutableSet.builderWithExpectedSize(size);
     for (Object obj : elements) {
-      if (obj instanceof SkyKey) {
-        builder.add((SkyKey) obj);
+      if (obj instanceof SkyKey skyKey) {
+        builder.add(skyKey);
       }
     }
     return builder.build();
diff --git a/src/main/java/com/google/devtools/build/skyframe/KeyToConsolidate.java b/src/main/java/com/google/devtools/build/skyframe/KeyToConsolidate.java
index 063b50a..0d61ec9 100644
--- a/src/main/java/com/google/devtools/build/skyframe/KeyToConsolidate.java
+++ b/src/main/java/com/google/devtools/build/skyframe/KeyToConsolidate.java
@@ -91,8 +91,8 @@
 
   /** Gets the key whose operation was delayed for the given object. */
   static SkyKey key(Object obj) {
-    if (obj instanceof SkyKey) {
-      return (SkyKey) obj;
+    if (obj instanceof SkyKey skyKey) {
+      return skyKey;
     }
     Preconditions.checkState(obj instanceof KeyToConsolidate, obj);
     return ((KeyToConsolidate) obj).key;
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 414811a..dd2b86b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java
@@ -699,12 +699,12 @@
 
     // Otherwise, there's an error.
     @Nullable Object result = handleError(depKey, wrappedValue);
-    if (result instanceof SkyValue) {
-      resultCallback.acceptValue(depKey, (SkyValue) result);
+    if (result instanceof SkyValue skyValue) {
+      resultCallback.acceptValue(depKey, skyValue);
       return true;
     }
-    if (result instanceof Exception
-        && resultCallback.tryHandleException(depKey, (Exception) result)) {
+    if (result instanceof Exception exception
+        && resultCallback.tryHandleException(depKey, exception)) {
       return true;
     }
     valuesMissing = true;
@@ -740,8 +740,8 @@
 
     // Otherwise, there's an error.
     @Nullable Object result = handleError(depKey, wrappedValue);
-    if (result instanceof SkyValue) {
-      return (SkyValue) result;
+    if (result instanceof SkyValue skyValue) {
+      return skyValue;
     }
     if (result instanceof Exception) {
       SkyFunctionException.throwIfInstanceOf(
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 d65aa84..754f8bb 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java
@@ -223,15 +223,15 @@
 
   @Nullable
   public static SkyValue justValue(SkyValue value) {
-    if (value instanceof ValueWithMetadata) {
-      return ((ValueWithMetadata) value).value;
+    if (value instanceof ValueWithMetadata valueWithMetadata) {
+      return valueWithMetadata.value;
     }
     return value;
   }
 
   public static ValueWithMetadata wrapWithMetadata(SkyValue value) {
-    if (value instanceof ValueWithMetadata) {
-      return (ValueWithMetadata) value;
+    if (value instanceof ValueWithMetadata valueWithMetadata) {
+      return valueWithMetadata;
     }
     return ValueWithEvents.createValueWithEvents(value, NO_EVENTS);
   }
@@ -245,8 +245,8 @@
   }
 
   public static NestedSet<Reportable> getEvents(SkyValue value) {
-    if (value instanceof ValueWithMetadata) {
-      return ((ValueWithMetadata) value).getTransitiveEvents();
+    if (value instanceof ValueWithMetadata valueWithMetadata) {
+      return valueWithMetadata.getTransitiveEvents();
     }
     return NO_EVENTS;
   }
diff --git a/src/main/java/com/google/devtools/build/skyframe/state/EnvironmentForUtilities.java b/src/main/java/com/google/devtools/build/skyframe/state/EnvironmentForUtilities.java
index 6955796..b7b268c 100644
--- a/src/main/java/com/google/devtools/build/skyframe/state/EnvironmentForUtilities.java
+++ b/src/main/java/com/google/devtools/build/skyframe/state/EnvironmentForUtilities.java
@@ -90,8 +90,8 @@
     if (result == null) {
       return null;
     }
-    if (result instanceof SkyValue) {
-      return (SkyValue) result;
+    if (result instanceof SkyValue skyValue) {
+      return skyValue;
     }
     if (exceptionClass1 != null && exceptionClass1.isInstance(result)) {
       throw exceptionClass1.cast(result);
@@ -136,8 +136,8 @@
     if (result == null) {
       return false;
     }
-    if (result instanceof SkyValue) {
-      resultCallback.acceptValue(key, (SkyValue) result);
+    if (result instanceof SkyValue skyValue) {
+      resultCallback.acceptValue(key, skyValue);
       return true;
     }
     if (resultCallback.tryHandleException(key, (Exception) result)) {
diff --git a/src/main/java/com/google/devtools/build/skyframe/state/Lookup.java b/src/main/java/com/google/devtools/build/skyframe/state/Lookup.java
index 77682f3..2925e52 100644
--- a/src/main/java/com/google/devtools/build/skyframe/state/Lookup.java
+++ b/src/main/java/com/google/devtools/build/skyframe/state/Lookup.java
@@ -120,8 +120,8 @@
         }
         acceptValue(key, value);
       } catch (Exception e) {
-        if (e instanceof InterruptedException) {
-          throw (InterruptedException) e;
+        if (e instanceof InterruptedException interruptedException) {
+          throw interruptedException;
         }
         if (!tryHandleException(key, e)) {
           throw new IllegalArgumentException("Unexpected exception for " + key(), e);
@@ -172,8 +172,8 @@
         }
         acceptValue(key, value);
       } catch (Exception e) {
-        if (e instanceof InterruptedException) {
-          throw (InterruptedException) e;
+        if (e instanceof InterruptedException interruptedException) {
+          throw interruptedException;
         }
         if (!tryHandleException(key, e)) {
           throw new IllegalArgumentException("Unexpected exception for " + key(), e);
@@ -235,8 +235,8 @@
         }
         acceptValue(key, value);
       } catch (Exception e) {
-        if (e instanceof InterruptedException) {
-          throw (InterruptedException) e;
+        if (e instanceof InterruptedException interruptedException) {
+          throw interruptedException;
         }
         if (!tryHandleException(key, e)) {
           throw new IllegalArgumentException("Unexpected exception for " + key(), e);
diff --git a/src/main/java/com/google/devtools/common/options/testing/ConverterTester.java b/src/main/java/com/google/devtools/common/options/testing/ConverterTester.java
index 88b0730..c9667f4 100644
--- a/src/main/java/com/google/devtools/common/options/testing/ConverterTester.java
+++ b/src/main/java/com/google/devtools/common/options/testing/ConverterTester.java
@@ -194,8 +194,8 @@
 
     @Override
     public boolean equals(Object other) {
-      if (other instanceof WrappedItem) {
-        return this.wrapped.equals(((WrappedItem) other).wrapped);
+      if (other instanceof WrappedItem wrappedItem) {
+        return this.wrapped.equals(wrappedItem.wrapped);
       }
       return this.wrapped.equals(other);
     }
diff --git a/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java b/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java
index 49f88ae..1980b44 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/util/InjectedActionLookupKey.java
@@ -58,8 +58,8 @@
 
   @Override
   public boolean equals(Object obj) {
-    return obj instanceof InjectedActionLookupKey
-        && ((InjectedActionLookupKey) obj).name.equals(name);
+    return obj instanceof InjectedActionLookupKey injectedActionLookupKey
+        && injectedActionLookupKey.name.equals(name);
   }
 
   @Override
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 8b26fd0..0be257e 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
@@ -847,8 +847,8 @@
   /** Locates the first parameter file used by the action and returns its command line. */
   @Nullable
   protected final CommandLine paramFileCommandLineForAction(Action action) {
-    if (action instanceof SpawnAction) {
-      CommandLines commandLines = ((SpawnAction) action).getCommandLines();
+    if (action instanceof SpawnAction spawnAction) {
+      CommandLines commandLines = spawnAction.getCommandLines();
       for (CommandLineAndParamFileInfo pair : commandLines.unpack()) {
         if (pair.paramFileInfo != null) {
           return pair.commandLine;
@@ -883,8 +883,8 @@
   @Nullable
   protected final String paramFileStringContentsForAction(Action action)
       throws CommandLineExpansionException, InterruptedException, IOException {
-    if (action instanceof SpawnAction) {
-      CommandLines commandLines = ((SpawnAction) action).getCommandLines();
+    if (action instanceof SpawnAction spawnAction) {
+      CommandLines commandLines = spawnAction.getCommandLines();
       for (CommandLineAndParamFileInfo pair : commandLines.unpack()) {
         if (pair.paramFileInfo != null) {
           ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -906,8 +906,8 @@
     for (Artifact input : action.getInputs().toList()) {
       if (!(input instanceof SpecialArtifact)) {
         Action generatingAction = getGeneratingAction(input);
-        if (generatingAction instanceof ParameterFileWriteAction) {
-          return (ParameterFileWriteAction) generatingAction;
+        if (generatingAction instanceof ParameterFileWriteAction parameterFileWriteAction) {
+          return parameterFileWriteAction;
         }
       }
     }
@@ -1094,8 +1094,8 @@
    */
   protected Artifact getArtifact(String label) throws LabelSyntaxException {
     ConfiguredTarget target = getConfiguredTarget(label, targetConfig);
-    if (target instanceof FileConfiguredTarget) {
-      return ((FileConfiguredTarget) target).getArtifact();
+    if (target instanceof FileConfiguredTarget fileConfiguredTarget) {
+      return fileConfiguredTarget.getArtifact();
     } else {
       return getFilesToBuild(target).getSingleton();
     }
@@ -1410,8 +1410,8 @@
       } catch (InterruptedException e) {
         throw new IllegalStateException(e);
       }
-      if (skyValue instanceof ActionLookupValue) {
-        for (ActionAnalysisMetadata action : ((ActionLookupValue) skyValue).getActions()) {
+      if (skyValue instanceof ActionLookupValue actionLookupValue) {
+        for (ActionAnalysisMetadata action : actionLookupValue.getActions()) {
           for (Artifact output : action.getOutputs()) {
             if (output.getRootRelativePath().equals(rootRelativePath)
                 && output.getRoot().equals(root)) {
@@ -2257,8 +2257,8 @@
     ExtraAction extraAction = null;
 
     for (Action action : actions) {
-      if (action instanceof ExtraAction) {
-        extraAction = (ExtraAction) action;
+      if (action instanceof ExtraAction loopAction) {
+        extraAction = loopAction;
         break;
       }
     }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java
index b48529a..10500fb 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java
@@ -93,9 +93,9 @@
 
   @Override
   public boolean equals(Object other) {
-    return other instanceof FakeRegistry
-        && this.url.equals(((FakeRegistry) other).url)
-        && this.modules.equals(((FakeRegistry) other).modules);
+    return other instanceof FakeRegistry fakeRegistry
+        && this.url.equals(fakeRegistry.url)
+        && this.modules.equals(fakeRegistry.modules);
   }
 
   @Override
diff --git a/src/test/java/com/google/devtools/build/lib/bugreport/BugReportTest.java b/src/test/java/com/google/devtools/build/lib/bugreport/BugReportTest.java
index 40d3dc7..8afa082 100644
--- a/src/test/java/com/google/devtools/build/lib/bugreport/BugReportTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bugreport/BugReportTest.java
@@ -231,8 +231,8 @@
         createExpectedFailureDetail(t, crashType, oomDetectorOverride);
     // TODO(b/222158599): This should always be ExitException.
     SecurityException e = assertThrows(SecurityException.class, () -> BugReport.handleCrash(t));
-    if (e instanceof ExitException) {
-      int code = ((ExitException) e).code;
+    if (e instanceof ExitException exitException) {
+      int code = exitException.code;
       assertThat(code).isEqualTo(crashType.expectedExitCode.getNumericExitCode());
     }
     assertThat(BugReport.getAndResetLastCrashingThrowableIfInTest()).isSameInstanceAs(t);
@@ -260,8 +260,8 @@
         assertThrows(
             SecurityException.class,
             () -> BugReport.handleCrash(Crash.from(t), CrashContext.halt()));
-    if (e instanceof ExitException) {
-      int code = ((ExitException) e).code;
+    if (e instanceof ExitException exitException) {
+      int code = exitException.code;
       assertThat(code).isEqualTo(crashType.expectedExitCode.getNumericExitCode());
     }
     assertThat(BugReport.getAndResetLastCrashingThrowableIfInTest()).isSameInstanceAs(t);
@@ -340,14 +340,14 @@
 
     // TODO(b/222158599): These should always be ExitException.
     SecurityException firstException = firstCrashThrownRef.get();
-    if (firstException instanceof ExitException) {
-      int code = ((ExitException) firstException).code;
+    if (firstException instanceof ExitException exitException) {
+      int code = exitException.code;
       assertThat(code).isEqualTo(ExitCode.BLAZE_INTERNAL_ERROR.getNumericExitCode());
     }
 
     SecurityException secondException = assertThrows(SecurityException.class, doSecondCrash);
-    if (secondException instanceof ExitException) {
-      int code = ((ExitException) secondException).code;
+    if (secondException instanceof ExitException exitException) {
+      int code = exitException.code;
       assertThat(code).isEqualTo(crashType.expectedExitCode.getNumericExitCode());
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelInternerIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelInternerIntegrationTest.java
index eaee62d..0f1c819 100644
--- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelInternerIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelInternerIntegrationTest.java
@@ -94,8 +94,8 @@
         .forEach(
             t -> {
               allPackageTargetsLabelInstances.add(t.getLabel());
-              if (t instanceof Rule) {
-                allRuleDepLabelInstances.addAll(((Rule) t).getLabels());
+              if (t instanceof Rule rule) {
+                allRuleDepLabelInstances.addAll(rule.getLabels());
               }
             });
 
diff --git a/src/test/java/com/google/devtools/build/lib/concurrent/PooledInternerTest.java b/src/test/java/com/google/devtools/build/lib/concurrent/PooledInternerTest.java
index fa8db16..33d3918 100644
--- a/src/test/java/com/google/devtools/build/lib/concurrent/PooledInternerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/concurrent/PooledInternerTest.java
@@ -138,8 +138,8 @@
 
     @Override
     public boolean equals(Object obj) {
-      return obj instanceof ObjectForInternerTests
-          && arg.equals(((ObjectForInternerTests) obj).arg);
+      return obj instanceof ObjectForInternerTests objectForInternerTests
+          && arg.equals(objectForInternerTests.arg);
     }
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerTest.java b/src/test/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerTest.java
index c284a5c..6d10dee 100644
--- a/src/test/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/profiler/memory/AllocationTrackerTest.java
@@ -65,8 +65,8 @@
   private class SamplerValue implements HasBinary {
     @Override
     public Object binaryOp(TokenKind op, Object that, boolean thisLeft) throws EvalException {
-      if (op == TokenKind.PLUS && thisLeft && that instanceof StarlarkInt) {
-        int size = ((StarlarkInt) that).toIntUnchecked(); // test values are small
+      if (op == TokenKind.PLUS && thisLeft && that instanceof StarlarkInt starlarkInt) {
+        int size = starlarkInt.toIntUnchecked(); // test values are small
         Object obj = new Object();
         live.add(obj); // ensure that obj outlives the test assertions
         tracker.sampleAllocation(1, "", obj, size);
diff --git a/src/test/java/com/google/devtools/build/lib/remote/BuildWithoutTheBytesIntegrationTestBase.java b/src/test/java/com/google/devtools/build/lib/remote/BuildWithoutTheBytesIntegrationTestBase.java
index 1e9bcf0..f3e7350 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/BuildWithoutTheBytesIntegrationTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/BuildWithoutTheBytesIntegrationTestBase.java
@@ -1324,10 +1324,10 @@
     var evaluator = getRuntimeWrapper().getSkyframeExecutor().getEvaluator();
     for (var artifact : getArtifacts(target)) {
       var value = evaluator.getExistingValue(Artifact.key(artifact));
-      if (value instanceof ActionExecutionValue) {
-        result.putAll(((ActionExecutionValue) value).getAllFileValues());
-      } else if (value instanceof TreeArtifactValue) {
-        result.putAll(((TreeArtifactValue) value).getChildValues());
+      if (value instanceof ActionExecutionValue actionExecutionValue) {
+        result.putAll(actionExecutionValue.getAllFileValues());
+      } else if (value instanceof TreeArtifactValue treeArtifactValue) {
+        result.putAll(treeArtifactValue.getChildValues());
       }
     }
     return result.buildOrThrow();
@@ -1336,10 +1336,10 @@
   protected FileArtifactValue getMetadata(Artifact output) throws Exception {
     var evaluator = getRuntimeWrapper().getSkyframeExecutor().getEvaluator();
     var value = evaluator.getExistingValue(Artifact.key(output));
-    if (value instanceof ActionExecutionValue) {
-      return ((ActionExecutionValue) value).getAllFileValues().get(output);
-    } else if (value instanceof TreeArtifactValue) {
-      return ((TreeArtifactValue) value).getChildValues().get(output);
+    if (value instanceof ActionExecutionValue actionExecutionValue) {
+      return actionExecutionValue.getAllFileValues().get(output);
+    } else if (value instanceof TreeArtifactValue treeArtifactValue) {
+      return treeArtifactValue.getChildValues().get(output);
     }
     return null;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/remote/FakeImmutableCacheByteStreamImpl.java b/src/test/java/com/google/devtools/build/lib/remote/FakeImmutableCacheByteStreamImpl.java
index 30e7033..e398abb 100644
--- a/src/test/java/com/google/devtools/build/lib/remote/FakeImmutableCacheByteStreamImpl.java
+++ b/src/test/java/com/google/devtools/build/lib/remote/FakeImmutableCacheByteStreamImpl.java
@@ -37,10 +37,10 @@
     for (Map.Entry<Digest, Object> e : contents.entrySet()) {
       Object obj = e.getValue();
       ByteString data;
-      if (obj instanceof String) {
-        data = ByteString.copyFromUtf8((String) obj);
-      } else if (obj instanceof ByteString) {
-        data = (ByteString) obj;
+      if (obj instanceof String string) {
+        data = ByteString.copyFromUtf8(string);
+      } else if (obj instanceof ByteString byteString) {
+        data = byteString;
       } else {
         throw new AssertionError(
             "expected object to be either a String or a ByteString, got a "
diff --git a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java
index d3d8d63..d1592ca 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/android/AndroidResourcesTest.java
@@ -168,7 +168,7 @@
     if (maybeFiltered.isPresent()) {
       AndroidResources filtered = maybeFiltered.get();
       assertThat(filtered instanceof ValidatedAndroidResources).isTrue();
-      ValidatedAndroidResources validated = (ValidatedAndroidResources) filtered;
+      ValidatedAndroidResources validated = ((ValidatedAndroidResources) filtered);
 
       // Validate fields related to validation are unchanged
       assertThat(validated.getRTxt()).isEqualTo(unfiltered.getRTxt());
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoRoundtripTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoRoundtripTest.java
index d949c5f..0edc7aa 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoRoundtripTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaInfoRoundtripTest.java
@@ -155,8 +155,8 @@
         builder.add(deepStripAttributes(item, shouldRemove));
       }
       return (T) StarlarkList.immutableCopyOf(builder.build());
-    } else if (obj instanceof Structure) {
-      for (String fieldName : ((Structure) obj).getFieldNames()) {
+    } else if (obj instanceof Structure structure) {
+      for (String fieldName : structure.getFieldNames()) {
         Dict.Builder<String, Object> builder = Dict.builder();
         if (!shouldRemove.test(fieldName)) {
           builder.put(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
index 1d65458..706f058 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/BazelJ2ObjcLibraryTest.java
@@ -816,8 +816,8 @@
       if (!(input instanceof SpecialArtifact)) {
         if (input.getFilename().endsWith("linker.objlist")) {
           Action generatingAction = getGeneratingAction(input);
-          if (generatingAction instanceof ParameterFileWriteAction) {
-            return (ParameterFileWriteAction) generatingAction;
+          if (generatingAction instanceof ParameterFileWriteAction parameterFileWriteAction) {
+            return parameterFileWriteAction;
           }
         }
       }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
index 59a93e3..db6bdd6 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTest.java
@@ -417,8 +417,8 @@
       throw result.getError().getException();
     }
     SkyValue value = result.get(key);
-    if (value instanceof ActionExecutionValue) {
-      return ((ActionExecutionValue) value).getExistingFileArtifactValue(artifact);
+    if (value instanceof ActionExecutionValue actionExecutionValue) {
+      return actionExecutionValue.getExistingFileArtifactValue(artifact);
     }
     return value;
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index d846395..4066694 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -1660,8 +1660,8 @@
             NotifyingHelper.makeNotifyingTransformer(
                 (key, type, order, context) -> {
                   if (EventType.IS_READY.equals(type)
-                      && key instanceof ActionLookupData
-                      && lc1.equals(((ActionLookupData) key).getActionLookupKey())) {
+                      && key instanceof ActionLookupData actionLookupData
+                      && lc1.equals(actionLookupData.getActionLookupKey())) {
                     TrackingAwaiter.INSTANCE.awaitLatchAndTrackExceptions(startedSleep, "No sleep");
                   }
                 }));
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
index 0966d91..38ab719 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SkyframeAwareActionTest.java
@@ -94,9 +94,9 @@
 
       @Override
       public boolean equals(Object obj) {
-        return obj instanceof InvalidatedKey
-            && this.skyKey.equals(((InvalidatedKey) obj).skyKey)
-            && this.state.equals(((InvalidatedKey) obj).state);
+        return obj instanceof InvalidatedKey invalidatedKey
+            && this.skyKey.equals(invalidatedKey.skyKey)
+            && this.state.equals(invalidatedKey.state);
       }
 
       @Override
@@ -116,9 +116,9 @@
 
       @Override
       public boolean equals(Object obj) {
-        return obj instanceof EvaluatedEntry
-            && this.skyKey.equals(((EvaluatedEntry) obj).skyKey)
-            && this.state.equals(((EvaluatedEntry) obj).state);
+        return obj instanceof EvaluatedEntry evaluatedEntry
+            && this.skyKey.equals(evaluatedEntry.skyKey)
+            && this.state.equals(evaluatedEntry.state);
       }
 
       @Override
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/rewinding/RewindingTestsHelper.java b/src/test/java/com/google/devtools/build/lib/skyframe/rewinding/RewindingTestsHelper.java
index 6c89d1c..1705788 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/rewinding/RewindingTestsHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/rewinding/RewindingTestsHelper.java
@@ -1373,8 +1373,8 @@
           }
 
           if (type.equals(EventType.IS_READY)
-              && key instanceof ActionLookupData
-              && actionHasLabelAndIndex((ActionLookupData) key, "shared_2", 0)) {
+              && key instanceof ActionLookupData actionLookupData
+              && actionHasLabelAndIndex(actionLookupData, "shared_2", 0)) {
             int shared2AReadiedCount = shared2AReady.incrementAndGet();
             if (shared2AReadiedCount == 1) {
               awaitUninterruptibly(shared1BEmittedRewoundEvent);
@@ -1382,8 +1382,8 @@
           }
 
           if (type.equals(EventType.IS_READY)
-              && key instanceof ActionLookupData
-              && actionHasLabelAndIndex((ActionLookupData) key, "shared_2", 1)) {
+              && key instanceof ActionLookupData actionLookupData
+              && actionHasLabelAndIndex(actionLookupData, "shared_2", 1)) {
             int shared2BReadiedCount = shared2BReady.incrementAndGet();
             if (shared2BReadiedCount == 5) {
               // Wait to attempt final evaluation of shared_2B until after shared_1B is done.
@@ -1395,24 +1395,24 @@
           // When shared_2B declares a future dep, allow shared_1B's Skyframe execution attempt to
           // clear its ActionExecutionState and reset its node.
           if (type.equals(EventType.ADD_EXTERNAL_DEP)
-              && key instanceof ActionLookupData
-              && actionHasLabelAndIndex((ActionLookupData) key, "shared_2", 1)) {
+              && key instanceof ActionLookupData actionLookupData
+              && actionHasLabelAndIndex(actionLookupData, "shared_2", 1)) {
             shared2BDeclaresFutureDep.countDown();
           }
 
           // Wait to attempt the rewound evaluation of shared_1A until after shared_2A finishes its
           // rewound evaluation and shared_2B is ready again.
           if (type.equals(EventType.IS_READY)
-              && key instanceof ActionLookupData
-              && actionHasLabelAndIndex((ActionLookupData) key, "shared_1", 0)) {
+              && key instanceof ActionLookupData actionLookupData
+              && actionHasLabelAndIndex(actionLookupData, "shared_1", 0)) {
             if (shared1ARewound.get() == 1) {
               awaitUninterruptibly(shared2BReadyForFifthTime);
             }
           }
 
           if (type.equals(EventType.SET_VALUE)
-              && key instanceof ActionLookupData
-              && actionHasLabelAndIndex((ActionLookupData) key, "shared_1", 1)) {
+              && key instanceof ActionLookupData actionLookupData
+              && actionHasLabelAndIndex(actionLookupData, "shared_1", 1)) {
             shared1BDone.countDown();
           }
         });
diff --git a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
index 7c26211..d818784 100644
--- a/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/starlark/StarlarkDefinedAspectsTest.java
@@ -9546,8 +9546,8 @@
       Map<AspectKey, ConfiguredAspect> aspectsMap, String aspectName) {
     for (Map.Entry<AspectKey, ConfiguredAspect> entry : aspectsMap.entrySet()) {
       AspectClass aspectClass = entry.getKey().getAspectClass();
-      if (aspectClass instanceof StarlarkAspectClass) {
-        String aspectExportedName = ((StarlarkAspectClass) aspectClass).getExportedName();
+      if (aspectClass instanceof StarlarkAspectClass starlarkAspectClass) {
+        String aspectExportedName = starlarkAspectClass.getExportedName();
         if (aspectExportedName.equals(aspectName)) {
           return entry.getValue();
         }
@@ -9560,8 +9560,8 @@
       Map<AspectKey, ConfiguredAspect> aspectsMap, String aspectName, String targetName) {
     for (Map.Entry<AspectKey, ConfiguredAspect> entry : aspectsMap.entrySet()) {
       AspectClass aspectClass = entry.getKey().getAspectClass();
-      if (aspectClass instanceof StarlarkAspectClass) {
-        String aspectExportedName = ((StarlarkAspectClass) aspectClass).getExportedName();
+      if (aspectClass instanceof StarlarkAspectClass starlarkAspectClass) {
+        String aspectExportedName = starlarkAspectClass.getExportedName();
         String target = entry.getKey().getLabel().getName();
         if (aspectExportedName.equals(aspectName) && target.equals(targetName)) {
           return entry.getValue();
diff --git a/src/test/java/com/google/devtools/build/lib/util/ValueOrExceptionTest.java b/src/test/java/com/google/devtools/build/lib/util/ValueOrExceptionTest.java
index 1786291..b5f1e1c 100644
--- a/src/test/java/com/google/devtools/build/lib/util/ValueOrExceptionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/util/ValueOrExceptionTest.java
@@ -114,8 +114,8 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof TestValue) {
-        return ((TestValue) o).content == content;
+      if (o instanceof TestValue testValue) {
+        return testValue.content == content;
       } else {
         return false;
       }
@@ -140,8 +140,8 @@
 
     @Override
     public boolean equals(Object o) {
-      if (o instanceof TestException) {
-        return ((TestException) o).getMessage().equals(getMessage());
+      if (o instanceof TestException testException) {
+        return testException.getMessage().equals(getMessage());
       } else {
         return false;
       }
diff --git a/src/test/java/com/google/devtools/build/lib/worker/WorkerFilesHashTest.java b/src/test/java/com/google/devtools/build/lib/worker/WorkerFilesHashTest.java
index f8c8037..352be40 100644
--- a/src/test/java/com/google/devtools/build/lib/worker/WorkerFilesHashTest.java
+++ b/src/test/java/com/google/devtools/build/lib/worker/WorkerFilesHashTest.java
@@ -162,11 +162,11 @@
         if (metadataOrException == null) {
           return null;
         }
-        if (metadataOrException instanceof IOException) {
-          throw (IOException) metadataOrException;
+        if (metadataOrException instanceof IOException ioException) {
+          throw ioException;
         }
-        if (metadataOrException instanceof FileArtifactValue) {
-          return (FileArtifactValue) metadataOrException;
+        if (metadataOrException instanceof FileArtifactValue fileArtifactValue) {
+          return fileArtifactValue;
         }
         throw new AssertionError("Unexpected value: " + metadataOrException);
       }
diff --git a/src/test/java/com/google/devtools/build/skyframe/GraphTester.java b/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
index 3990c53..e5c6ff8 100644
--- a/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
+++ b/src/test/java/com/google/devtools/build/skyframe/GraphTester.java
@@ -223,8 +223,8 @@
                 @Override
                 public boolean tryHandleException(SkyKey key, Exception e) {
                   assertThat(key).isEqualTo(dep.first);
-                  if (e instanceof SomeErrorException) {
-                    exceptionRef.set((SomeErrorException) e);
+                  if (e instanceof SomeErrorException someErrorException) {
+                    exceptionRef.set(someErrorException);
                     return true;
                   }
                   return false;
diff --git a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
index aa4f28c..cac99e3 100644
--- a/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
+++ b/src/tools/remote/src/main/java/com/google/devtools/build/remote/worker/ExecutionServer.java
@@ -181,8 +181,8 @@
             }
           } catch (Exception e) {
             ExecuteResponse resp;
-            if (e instanceof ExecutionStatusException) {
-              resp = ((ExecutionStatusException) e).getResponse();
+            if (e instanceof ExecutionStatusException executionStatusException) {
+              resp = executionStatusException.getResponse();
             } else {
               logger.atSevere().withCause(e).log("Work failed: %s", opName);
               resp =