You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2026/01/11 12:49:33 UTC

(groovy) branch master updated: Trivial refactor: replace with pattern variable to simplify code

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 1fc5a31dfd Trivial refactor: replace with pattern variable to simplify code
1fc5a31dfd is described below

commit 1fc5a31dfda50c3851be654d5f65d412adfd1eaa
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Jan 11 21:35:13 2026 +0900

    Trivial refactor: replace with pattern variable to simplify code
---
 .../groovy/beans/BindableASTTransformation.java    |  4 +-
 .../groovy/beans/VetoableASTTransformation.java    |  3 +-
 .../groovy/grape/GrabAnnotationTransformation.java |  9 +--
 src/main/java/groovy/lang/ExpandoMetaClass.java    |  9 +--
 src/main/java/groovy/lang/IntRange.java            |  6 +-
 src/main/java/groovy/lang/MetaClassImpl.java       | 51 ++++++----------
 src/main/java/groovy/lang/ObjectRange.java         |  3 +-
 src/main/java/groovy/lang/ProxyMetaClass.java      |  6 +-
 src/main/java/groovy/lang/Tuple.java               |  3 +-
 src/main/java/groovy/namespace/QName.java          | 12 ++--
 .../groovy/transform/builder/ExternalStrategy.java |  3 +-
 .../groovy/transform/builder/SimpleStrategy.java   |  3 +-
 src/main/java/groovy/ui/GroovyMain.java            |  3 +-
 src/main/java/groovy/util/ConfigObject.java        |  3 +-
 src/main/java/groovy/util/Expando.java             | 12 ++--
 src/main/java/groovy/util/Node.java                | 30 +++------
 src/main/java/groovy/util/NodeList.java            |  9 +--
 src/main/java/groovy/util/ObjectGraphBuilder.java  | 21 +++----
 .../groovy/ast/tools/ConstructorNodeUtils.java     |  6 +-
 .../apache/groovy/ast/tools/ExpressionUtils.java   | 30 +++------
 .../groovy/ast/tools/ImmutablePropertyUtils.java   |  6 +-
 .../apache/groovy/ast/tools/VisibilityUtils.java   |  3 +-
 .../apache/groovy/parser/antlr4/AstBuilder.java    | 36 ++++-------
 .../groovy/parser/antlr4/GroovydocManager.java     |  3 +-
 .../antlr4/TryWithResourcesASTTransformation.java  |  3 +-
 .../antlr4/internal/atnmanager/AtnManager.java     |  3 +-
 .../ConcurrentLinkedHashMap.java                   | 10 ++-
 .../java/org/codehaus/groovy/ast/ClassNode.java    |  9 +--
 .../org/codehaus/groovy/ast/ConstructorNode.java   |  3 +-
 .../java/org/codehaus/groovy/ast/ImportNode.java   |  3 +-
 .../groovy/ast/MixinASTTransformation.java         |  6 +-
 .../java/org/codehaus/groovy/ast/ModuleNode.java   |  6 +-
 .../codehaus/groovy/ast/RecordComponentNode.java   |  3 +-
 .../groovy/ast/decompiled/Annotations.java         |  3 +-
 .../groovy/ast/expr/DeclarationExpression.java     |  6 +-
 .../codehaus/groovy/ast/tools/GeneralUtils.java    | 18 ++----
 .../groovy/ast/tools/WideningCategories.java       |  3 +-
 .../groovy/classgen/AnnotationVisitor.java         | 12 ++--
 .../groovy/classgen/AsmClassGenerator.java         |  9 +--
 .../groovy/classgen/ClassCompletionVerifier.java   | 24 +++-----
 .../org/codehaus/groovy/classgen/EnumVisitor.java  |  3 +-
 .../codehaus/groovy/classgen/ExtendedVerifier.java | 12 ++--
 .../groovy/classgen/FinalVariableAnalyzer.java     | 15 ++---
 .../classgen/InnerClassCompletionVisitor.java      |  3 +-
 .../groovy/classgen/InnerClassVisitor.java         |  3 +-
 .../org/codehaus/groovy/classgen/ReturnAdder.java  | 18 ++----
 .../groovy/classgen/VariableScopeVisitor.java      |  6 +-
 .../org/codehaus/groovy/classgen/Verifier.java     | 24 +++-----
 .../groovy/classgen/asm/AssertionWriter.java       |  9 +--
 .../classgen/asm/BinaryExpressionHelper.java       |  9 +--
 .../asm/BinaryExpressionMultiTypeDispatcher.java   |  6 +-
 .../groovy/classgen/asm/CallSiteWriter.java        |  3 +-
 .../groovy/classgen/asm/ClosureWriter.java         |  3 +-
 .../groovy/classgen/asm/InvocationWriter.java      | 21 +++----
 .../codehaus/groovy/classgen/asm/MopWriter.java    |  3 +-
 .../codehaus/groovy/classgen/asm/OperandStack.java |  3 +-
 .../classgen/asm/OptimizingStatementWriter.java    | 21 +++----
 .../classgen/asm/StatementMetaTypeChooser.java     |  3 +-
 .../classgen/asm/indy/InvokeDynamicWriter.java     |  3 +-
 .../classgen/asm/sc/StaticInvocationWriter.java    |  9 +--
 ...icTypesBinaryExpressionMultiTypeDispatcher.java |  6 +-
 .../groovy/control/AnnotationConstantsVisitor.java |  6 +-
 .../codehaus/groovy/control/CompilationUnit.java   |  3 +-
 .../codehaus/groovy/control/ResolveVisitor.java    | 24 +++-----
 .../groovy/control/StaticImportVisitor.java        | 15 ++---
 .../control/customizers/SecureASTCustomizer.java   |  9 +--
 .../control/customizers/SourceAwareCustomizer.java |  3 +-
 .../builder/InlinedASTCustomizerFactory.java       |  3 +-
 .../groovy/control/messages/LocatedMessage.java    |  3 +-
 .../codehaus/groovy/reflection/CachedClass.java    |  6 +-
 .../reflection/stdclasses/ArrayCachedClass.java    |  3 +-
 .../groovy/runtime/DefaultGroovyMethods.java       | 45 +++++---------
 .../runtime/DefaultGroovyMethodsSupport.java       |  3 +-
 .../org/codehaus/groovy/runtime/FormatHelper.java  |  9 +--
 .../org/codehaus/groovy/runtime/GStringUtil.java   |  3 +-
 .../codehaus/groovy/runtime/HandleMetaClass.java   |  3 +-
 .../codehaus/groovy/runtime/IOGroovyMethods.java   |  3 +-
 .../org/codehaus/groovy/runtime/InvokerHelper.java | 45 +++++---------
 .../codehaus/groovy/runtime/MetaClassHelper.java   |  3 +-
 .../groovy/runtime/ScriptBytecodeAdapter.java      |  6 +-
 .../groovy/runtime/callsite/CallSiteArray.java     |  3 +-
 .../arrays/BooleanArrayGetAtMetaMethod.java        |  3 +-
 .../arrays/BooleanArrayPutAtMetaMethod.java        |  3 +-
 .../dgmimpl/arrays/ByteArrayGetAtMetaMethod.java   |  3 +-
 .../dgmimpl/arrays/ByteArrayPutAtMetaMethod.java   |  3 +-
 .../arrays/CharacterArrayGetAtMetaMethod.java      |  3 +-
 .../arrays/CharacterArrayPutAtMetaMethod.java      |  3 +-
 .../dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java |  3 +-
 .../dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java |  3 +-
 .../dgmimpl/arrays/FloatArrayGetAtMetaMethod.java  |  3 +-
 .../dgmimpl/arrays/FloatArrayPutAtMetaMethod.java  |  3 +-
 .../arrays/IntegerArrayGetAtMetaMethod.java        |  3 +-
 .../arrays/IntegerArrayPutAtMetaMethod.java        |  3 +-
 .../dgmimpl/arrays/LongArrayGetAtMetaMethod.java   |  3 +-
 .../dgmimpl/arrays/LongArrayPutAtMetaMethod.java   |  3 +-
 .../dgmimpl/arrays/ShortArrayGetAtMetaMethod.java  |  3 +-
 .../dgmimpl/arrays/ShortArrayPutAtMetaMethod.java  |  3 +-
 .../groovy/runtime/metaclass/ClosureMetaClass.java |  4 +-
 .../runtime/metaclass/ConcurrentReaderHashMap.java | 14 ++---
 .../groovy/runtime/metaclass/MetaMethodIndex.java  | 12 ++--
 .../metaclass/MethodSelectionException.java        |  9 ++-
 .../typehandling/DefaultTypeTransformation.java    | 15 ++---
 .../runtime/typehandling/ShortTypeHandling.java    |  5 +-
 .../groovy/tools/javac/JavaStubGenerator.java      | 15 ++---
 .../groovy/tools/javac/MemJavaFileObject.java      |  3 +-
 .../groovy/tools/javac/RawJavaFileObject.java      |  3 +-
 .../transform/AbstractASTTransformation.java       |  6 +-
 .../transform/AnnotationCollectorTransform.java    | 15 ++---
 .../transform/AutoCloneASTTransformation.java      |  9 +--
 .../transform/AutoImplementASTTransformation.java  |  3 +-
 .../groovy/transform/BuilderASTTransformation.java |  3 +-
 .../transform/CategoryASTTransformation.java       |  9 +--
 .../transform/DelegateASTTransformation.java       |  6 +-
 .../EqualsAndHashCodeASTTransformation.java        |  3 +-
 .../ExternalizeMethodsASTTransformation.java       |  3 +-
 .../ExternalizeVerifierASTTransformation.java      |  3 +-
 .../groovy/transform/FieldASTTransformation.java   | 12 ++--
 .../groovy/transform/FinalASTTransformation.java   |  9 +--
 .../transform/ImmutableASTTransformation.java      |  2 +-
 .../IndexedPropertyASTTransformation.java          |  3 +-
 .../groovy/transform/LazyASTTransformation.java    |  3 +-
 .../transform/MapConstructorASTTransformation.java |  9 +--
 .../transform/MemoizedASTTransformation.java       |  3 +-
 .../groovy/transform/NewifyASTTransformation.java  | 24 +++-----
 .../transform/NonSealedASTTransformation.java      |  3 +-
 .../transform/NullCheckASTTransformation.java      |  3 +-
 .../transform/OperatorRenameASTTransformation.java | 10 +--
 .../transform/PackageScopeASTTransformation.java   |  6 +-
 .../transform/ReadWriteLockASTTransformation.java  |  3 +-
 .../RecordCompletionASTTransformation.java         |  6 +-
 .../transform/RecordTypeASTTransformation.java     |  6 +-
 .../groovy/transform/SealedASTTransformation.java  |  9 +--
 .../transform/SingletonASTTransformation.java      |  5 +-
 .../transform/StaticTypesTransformation.java       |  9 +--
 .../transform/SynchronizedASTTransformation.java   |  3 +-
 .../transform/ToStringASTTransformation.java       |  3 +-
 .../TupleConstructorASTTransformation.java         | 12 ++--
 .../transform/sc/StaticCompileTransformation.java  |  6 +-
 .../transformers/BinaryExpressionTransformer.java  |  6 +-
 .../sc/transformers/CastExpressionOptimizer.java   |  3 +-
 .../transformers/ConstructorCallTransformer.java   |  6 +-
 .../stc/GroovyTypeCheckingExtensionSupport.java    |  3 +-
 .../transform/stc/SignatureCodecVersion1.java      |  6 +-
 .../transform/stc/StaticTypeCheckingSupport.java   |  3 +-
 .../transform/stc/StaticTypeCheckingVisitor.java   | 71 ++++++++--------------
 .../transform/stc/TraitTypeCheckingExtension.java  |  3 +-
 .../tailrec/TernaryToIfStatementConverter.java     |  3 +-
 .../transform/trait/SuperCallTraitTransformer.java |  9 +--
 .../transform/trait/TraitASTTransformation.java    |  3 +-
 .../transform/trait/TraitReceiverTransformer.java  | 12 ++--
 .../org/codehaus/groovy/util/ReferenceManager.java | 16 +++--
 .../codehaus/groovy/vmplugin/v8/IndyInterface.java |  3 +-
 .../org/codehaus/groovy/vmplugin/v8/Java8.java     | 12 ++--
 .../org/codehaus/groovy/vmplugin/v8/Selector.java  | 15 ++---
 .../org/codehaus/groovy/vmplugin/v9/Java9.java     |  6 +-
 .../src/main/java/groovy/ant/AntBuilder.java       |  6 +-
 .../main/java/org/codehaus/groovy/ant/Groovy.java  |  3 +-
 .../main/java/org/codehaus/groovy/ant/Groovyc.java |  3 +-
 .../groovy/console/ui/ConsoleTextEditor.java       |  3 +-
 .../groovy/groovy/console/ui/text/TextEditor.java  |  3 +-
 .../ast/visitor/AnnotationClosureVisitor.java      | 21 +++----
 .../generation/ClassInvariantGenerator.java        |  6 +-
 .../generation/PreconditionGenerator.java          |  3 +-
 .../org/apache/groovy/ginq/dsl/GinqAstBuilder.java |  6 +-
 .../provider/collection/runtime/Queryable.java     |  3 +-
 .../collection/runtime/QueryableCollection.java    |  9 +--
 .../collection/runtime/WindowDefinitionImpl.java   |  3 +-
 .../ginq/transform/GinqASTTransformation.java      |  3 +-
 .../tools/groovydoc/SimpleGroovyClassDoc.java      | 15 ++---
 .../apache/groovy/groovysh/jline/GroovyEngine.java | 12 ++--
 .../groovy/groovysh/jline/SystemRegistryImpl.java  |  3 +-
 .../groovy/jmx/builder/JmxBuilderModelMBean.java   |  3 +-
 .../java/groovy/jmx/builder/JmxEventListener.java  |  3 +-
 .../java/groovy/json/DefaultJsonGenerator.java     |  3 +-
 .../src/main/java/groovy/json/JsonBuilder.java     |  3 +-
 .../java/groovy/json/StreamingJsonBuilder.java     |  6 +-
 .../apache/groovy/json/internal/LazyValueMap.java  | 21 +++----
 .../org/apache/groovy/json/internal/ValueList.java | 15 ++---
 .../groovy/macro/methods/MacroGroovyMethods.java   |  4 +-
 .../groovy/macro/runtime/MacroBuilder.java         |  4 +-
 .../groovy-sql/src/main/java/groovy/sql/Sql.java   |  9 +--
 .../groovy/swing/model/DefaultTableColumn.java     | 14 ++---
 .../main/groovy/groovy/text/XmlTemplateEngine.java |  3 +-
 .../text/markup/MarkupBuilderCodeTransformer.java  | 18 ++----
 .../src/main/java/groovy/xml/DOMBuilder.java       |  8 +--
 .../src/main/java/groovy/xml/SAXBuilder.java       |  3 +-
 .../src/main/java/groovy/xml/XmlNodePrinter.java   |  6 +-
 .../src/main/java/groovy/xml/dom/DOMCategory.java  |  3 +-
 .../streamingmarkupsupport/BaseMarkupBuilder.java  |  3 +-
 .../org/apache/groovy/xml/tools/DomToGroovy.java   |  3 +-
 190 files changed, 516 insertions(+), 1011 deletions(-)

diff --git a/src/main/java/groovy/beans/BindableASTTransformation.java b/src/main/java/groovy/beans/BindableASTTransformation.java
index d362e37c71..bba3a28d20 100644
--- a/src/main/java/groovy/beans/BindableASTTransformation.java
+++ b/src/main/java/groovy/beans/BindableASTTransformation.java
@@ -99,11 +99,9 @@ public class BindableASTTransformation implements ASTTransformation, Opcodes {
      */
     @Override
     public void visit(ASTNode[] nodes, SourceUnit source) {
-        if (!(nodes[0] instanceof AnnotationNode) || !(nodes[1] instanceof AnnotatedNode)) {
+        if (!(nodes[0] instanceof AnnotationNode node) || !(nodes[1] instanceof AnnotatedNode parent)) {
             throw new RuntimeException("Internal error: wrong types: $node.class / $parent.class");
         }
-        AnnotationNode node = (AnnotationNode) nodes[0];
-        AnnotatedNode parent = (AnnotatedNode) nodes[1];
 
         if (VetoableASTTransformation.hasVetoableAnnotation(parent)) {
             // VetoableASTTransformation will handle both @Bindable and @Vetoable
diff --git a/src/main/java/groovy/beans/VetoableASTTransformation.java b/src/main/java/groovy/beans/VetoableASTTransformation.java
index 24774f283a..afd94a2681 100644
--- a/src/main/java/groovy/beans/VetoableASTTransformation.java
+++ b/src/main/java/groovy/beans/VetoableASTTransformation.java
@@ -99,10 +99,9 @@ public class VetoableASTTransformation extends BindableASTTransformation {
      */
     @Override
     public void visit(ASTNode[] nodes, SourceUnit source) {
-        if (!(nodes[0] instanceof AnnotationNode) || !(nodes[1] instanceof AnnotatedNode)) {
+        if (!(nodes[0] instanceof AnnotationNode node) || !(nodes[1] instanceof AnnotatedNode)) {
             throw new RuntimeException("Internal error: wrong types: $node.class / $parent.class");
         }
-        AnnotationNode node = (AnnotationNode) nodes[0];
 
         if (nodes[1] instanceof ClassNode) {
             addListenerToClass(source, (ClassNode) nodes[1]);
diff --git a/src/main/java/groovy/grape/GrabAnnotationTransformation.java b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
index 887b0a3591..05e8a717ba 100644
--- a/src/main/java/groovy/grape/GrabAnnotationTransformation.java
+++ b/src/main/java/groovy/grape/GrabAnnotationTransformation.java
@@ -474,8 +474,7 @@ public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implem
         Object val = node.getMember("systemClassLoader");
         if (!(val instanceof ConstantExpression)) return;
         Object systemClassLoaderObject = ((ConstantExpression)val).getValue();
-        if (!(systemClassLoaderObject instanceof Boolean)) return;
-        Boolean systemClassLoader = (Boolean) systemClassLoaderObject;
+        if (!(systemClassLoaderObject instanceof Boolean systemClassLoader)) return;
         if (systemClassLoader) loader = ClassLoader.getSystemClassLoader();
     }
 
@@ -520,8 +519,7 @@ public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implem
         Object val = node.getMember("value");
         if (!(val instanceof ConstantExpression)) return;
         Object allParts = ((ConstantExpression)val).getValue();
-        if (!(allParts instanceof String)) return;
-        String allstr = (String) allParts;
+        if (!(allParts instanceof String allstr)) return;
 
         // strip off trailing attributes
         boolean done = false;
@@ -575,8 +573,7 @@ public class GrabAnnotationTransformation extends ClassCodeVisitorSupport implem
     }
 
     private void extractGrab(final Expression init, final ConstantExpression ce) {
-        if (ce.getValue() instanceof AnnotationNode) {
-            AnnotationNode annotation = (AnnotationNode) ce.getValue();
+        if (ce.getValue() instanceof AnnotationNode annotation) {
             if ((init != null) && (annotation.getMember("initClass") != null)) {
                 annotation.setMember("initClass", init);
             }
diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java b/src/main/java/groovy/lang/ExpandoMetaClass.java
index 51e4c322a0..d60b5d12d7 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -1345,8 +1345,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
 
         @Override
         public Object invokeMethod(String name, Object obj) {
-            if (obj instanceof Object[]) {
-                Object[] args = (Object[]) obj;
+            if (obj instanceof Object[] args) {
                 if (args.length == 1 && args[0] instanceof Closure closure) {
                     registerSubclassInstanceMethod(name, klazz, closure);
                     return null;
@@ -1385,7 +1384,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
                 return getMetaClass().invokeMethod(this, name, obj);
             }
             catch (MissingMethodException mme) {
-                if (obj instanceof Object[]) {
+                if (obj instanceof Object[] args) {
                     if (STATIC_QUALIFIER.equals(name)) {
                         final StaticDefiningClosure staticDef = new StaticDefiningClosure();
                         var c = (Closure<?>) ((Object[]) obj)[0];
@@ -1394,7 +1393,6 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
                         c.call((Object)null);
                         return null;
                     }
-                    Object[] args = (Object[]) obj;
                     if (args.length == 1 && args[0] instanceof Closure) {
                         registerInstanceMethod(name, (Closure<?>) args[0]);
                     } else if (args.length == 2 && args[0] instanceof Class clazz && args[1] instanceof Closure closure)
@@ -1433,8 +1431,7 @@ public class ExpandoMetaClass extends MetaClassImpl implements GroovyObject {
 
         @Override
         public Object invokeMethod(String name, Object obj) {
-            if (obj instanceof Object[]) {
-                final Object[] args = (Object[]) obj;
+            if (obj instanceof Object[] args) {
                 if (args.length == 1 && args[0] instanceof Closure closure) {
                     registerStaticMethod(name, closure);
                     return null;
diff --git a/src/main/java/groovy/lang/IntRange.java b/src/main/java/groovy/lang/IntRange.java
index 189786419b..ada98bac0d 100644
--- a/src/main/java/groovy/lang/IntRange.java
+++ b/src/main/java/groovy/lang/IntRange.java
@@ -429,8 +429,7 @@ public class IntRange extends AbstractList<Integer> implements Range<Integer>, S
         if (value instanceof Integer) {
             return (Integer) value >= getFrom() && (Integer) value <= getTo();
         }
-        if (value instanceof BigInteger) {
-            final BigInteger bigint = (BigInteger) value;
+        if (value instanceof BigInteger bigint) {
             return bigint.compareTo(BigInteger.valueOf(getFrom())) >= 0 &&
                     bigint.compareTo(BigInteger.valueOf(getTo())) <= 0;
         }
@@ -439,8 +438,7 @@ public class IntRange extends AbstractList<Integer> implements Range<Integer>, S
 
     @Override
     public boolean containsAll(Collection other) {
-        if (other instanceof IntRange) {
-            final IntRange range = (IntRange) other;
+        if (other instanceof IntRange range) {
             return getFrom() <= range.getFrom() && range.getTo() <= getTo();
         }
         return super.containsAll(other);
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java b/src/main/java/groovy/lang/MetaClassImpl.java
index c2e1d5138e..3995facfe9 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -479,8 +479,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             }
 
             private boolean hasPrivateInMethods(final Class<?> clazz, final MetaMethodIndex.Cache entry) {
-                if (entry.methods instanceof FastArray) {
-                    FastArray methods = (FastArray) entry.methods;
+                if (entry.methods instanceof FastArray methods) {
                     int size = methods.size();
                     var data = methods.getArray();
                     for (int i = 0; i != size; ++i) {
@@ -489,8 +488,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                             return true;
                         }
                     }
-                } else if (entry.methods instanceof MetaMethod) {
-                    MetaMethod method = (MetaMethod) entry.methods;
+                } else if (entry.methods instanceof MetaMethod method) {
                     if (method.isPrivate() && method.getDeclaringClass().getTheClass() == clazz) {
                         return true;
                     }
@@ -508,8 +506,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             @Override
             public void methodNameAction(final Class<?> c, final MetaMethodIndex.Cache e) {
                 Object arrayOrMethod = (useThis ? e.methods : e.methodsForSuper);
-                if (arrayOrMethod instanceof FastArray) {
-                    FastArray methods = (FastArray) arrayOrMethod;
+                if (arrayOrMethod instanceof FastArray methods) {
                     Object[] data = methods.getArray();
                     for (int i = 0; i < methods.size(); i += 1) {
                         MetaMethod method = (MetaMethod) data[i];
@@ -934,8 +931,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             try {
                 return methodMissing.invoke(instance, new Object[]{methodName, arguments});
             } catch (InvokerInvocationException iie) {
-                if (methodMissing instanceof ClosureMetaMethod && iie.getCause() instanceof MissingMethodException) {
-                    MissingMethodException mme = (MissingMethodException) iie.getCause();
+                if (methodMissing instanceof ClosureMetaMethod && iie.getCause() instanceof MissingMethodException mme) {
                     throw new MissingMethodExecutionFailed(mme.getMethod(), mme.getClass(), mme.getArguments(), mme.isStatic(), mme);
                 }
                 throw iie;
@@ -1105,8 +1101,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
 
         MetaMethod method = getMetaMethod(sender, object, methodName, isCallToSuper, arguments);
 
-        if (object instanceof Closure) {
-            final Closure closure = (Closure)object;
+        if (object instanceof Closure closure) {
             final Object owner = closure.getOwner();
 
             if (CALL_METHOD.equals(methodName) || DO_CALL_METHOD.equals(methodName)) {
@@ -1201,8 +1196,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                                     throw mme;
                                 }
                             } catch (InvokerInvocationException iie) {
-                                if (iie.getCause() instanceof MissingMethodException) {
-                                    MissingMethodException mme = (MissingMethodException) iie.getCause();
+                                if (iie.getCause() instanceof MissingMethodException mme) {
                                     if (methodName.equals(mme.getMethod())) {
                                         if (last == null) last = mme;
                                     } else {
@@ -1320,8 +1314,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
     }
 
     private MetaClass lookupObjectMetaClass(Object object) {
-        if (object instanceof GroovyObject) {
-            GroovyObject go = (GroovyObject) object;
+        if (object instanceof GroovyObject go) {
             return go.getMetaClass();
         }
         Class ownerClass = object.getClass();
@@ -2206,8 +2199,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                         || (!permissivePropertyAccess && !checkAccessible(getClass(), ((CachedField) mp).getDeclaringClass(), mp.getModifiers(), false))) {
                     continue;
                 }
-            } else if (mp instanceof MetaBeanProperty) {
-                MetaBeanProperty mbp = (MetaBeanProperty) mp;
+            } else if (mp instanceof MetaBeanProperty mbp) {
                 // filter out extrinsic properties (DGM, ...)
                 boolean getter = true, setter = true;
                 MetaMethod getterMetaMethod = mbp.getGetter();
@@ -2247,8 +2239,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         // Method has been optimized to reach a target of 325 bytecode size, making it JIT'able
         Object ret = null;
 
-        if (methodOrList instanceof MetaMethod) {
-            MetaMethod method = (MetaMethod) methodOrList;
+        if (methodOrList instanceof MetaMethod method) {
             int parameterCount = method.getParameterTypes().length;
             Class<?> returnType = method.getReturnType();
             if (!isGetter && parameterCount == 1
@@ -2260,8 +2251,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                     : returnType != Void.TYPE && returnType != Void.class)) {
                 ret = method;
             }
-        } else if (methodOrList instanceof FastArray) {
-            FastArray methods = (FastArray) methodOrList;
+        } else if (methodOrList instanceof FastArray methods) {
             final int n = methods.size();
             final Object[] data = methods.getArray();
             for (int i = 0; i < n; i += 1) {
@@ -2366,8 +2356,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
 
     private void fillStaticPropertyIndex() {
         BiConsumer<String, MetaProperty> indexStaticProperty = (name, prop) -> {
-            if (prop instanceof CachedField) {
-                CachedField field = (CachedField) prop;
+            if (prop instanceof CachedField field) {
                 if (!field.isStatic()) { prop = null; }
             } else if (prop instanceof MetaBeanProperty) {
                 prop = establishStaticMetaProperty(prop);
@@ -2557,15 +2546,13 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
             }
         }
 
-        if (mp instanceof CachedField) {
-            CachedField mfp = (CachedField) mp;
+        if (mp instanceof CachedField mfp) {
             MetaBeanProperty mbp = new MetaBeanProperty(propName, mfp.getType(),
                     isGetter ? propertyMethod : null,
                     isGetter ? null : propertyMethod);
             mbp.setField(mfp);
             return mbp;
-        } else if (mp instanceof MultipleSetterProperty) {
-            MultipleSetterProperty msp = (MultipleSetterProperty) mp;
+        } else if (mp instanceof MultipleSetterProperty msp) {
             if (isGetter) {
                 // GROOVY-10133: do not replace "isPropName()" with "getPropName()" or ...
                 if (msp.getGetter() == null || !msp.getGetter().getName().startsWith("is")) {
@@ -2573,8 +2560,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
                 }
             }
             return msp;
-        } else if (mp instanceof MetaBeanProperty) {
-            MetaBeanProperty mbp = (MetaBeanProperty) mp;
+        } else if (mp instanceof MetaBeanProperty mbp) {
             if (isGetter) {
                 // GROOVY-10133: do not replace "isPropName()" with "getPropName()" or ...
                 if (mbp.getGetter() == null || !mbp.getGetter().getName().startsWith("is")) {
@@ -2879,8 +2865,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
 
         MetaProperty mp = getMetaProperty(sender, attribute, useSuper, isStatic);
         if (mp != null) {
-            if (mp instanceof MetaBeanProperty) {
-                MetaBeanProperty mbp = (MetaBeanProperty) mp;
+            if (mp instanceof MetaBeanProperty mbp) {
                 mp = mbp.getField();
             }
             try {
@@ -2921,8 +2906,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
 
         MetaProperty mp = getMetaProperty(sender, attribute, useSuper, isStatic);
         if (mp != null) {
-            if (mp instanceof MetaBeanProperty) {
-                MetaBeanProperty mbp = (MetaBeanProperty) mp;
+            if (mp instanceof MetaBeanProperty mbp) {
                 mp = mbp.getField();
             }
             if (mp != null) {
@@ -3158,8 +3142,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
      */
     private MetaMethod findMethod(CachedMethod aMethod) {
         Object methods = getMethods(theClass, aMethod.getName(), false);
-        if (methods instanceof FastArray) {
-            FastArray m = (FastArray) methods;
+        if (methods instanceof FastArray m) {
             final int len = m.size();
             final Object[] data = m.getArray();
             for (int i = 0; i != len; ++i) {
diff --git a/src/main/java/groovy/lang/ObjectRange.java b/src/main/java/groovy/lang/ObjectRange.java
index f6ec04d694..bedffb56c5 100644
--- a/src/main/java/groovy/lang/ObjectRange.java
+++ b/src/main/java/groovy/lang/ObjectRange.java
@@ -530,8 +530,7 @@ public class ObjectRange extends AbstractList<Comparable> implements Range<Compa
         if (operand instanceof Character) {
             return (int) (Character) operand;
         }
-        if (operand instanceof String) {
-            final String string = (String) operand;
+        if (operand instanceof String string) {
 
             if (string.length() == 1) {
                 return (int) string.charAt(0);
diff --git a/src/main/java/groovy/lang/ProxyMetaClass.java b/src/main/java/groovy/lang/ProxyMetaClass.java
index fbf1b8e68a..ecd44a1f57 100644
--- a/src/main/java/groovy/lang/ProxyMetaClass.java
+++ b/src/main/java/groovy/lang/ProxyMetaClass.java
@@ -177,8 +177,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
         if (null == interceptor) {
             return super.getProperty(aClass, object, property, useSuper, fromInsideClass);
         }
-        if (interceptor instanceof PropertyAccessInterceptor) {
-            PropertyAccessInterceptor pae = (PropertyAccessInterceptor) interceptor;
+        if (interceptor instanceof PropertyAccessInterceptor pae) {
 
             Object result = pae.beforeGet(object, property);
             if (interceptor.doInvoke()) {
@@ -202,8 +201,7 @@ public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
         if (null == interceptor) {
             super.setProperty(aClass, object, property, newValue, useSuper, fromInsideClass);
         }
-        if (interceptor instanceof PropertyAccessInterceptor) {
-            PropertyAccessInterceptor pae = (PropertyAccessInterceptor) interceptor;
+        if (interceptor instanceof PropertyAccessInterceptor pae) {
 
             pae.beforeSet(object, property, newValue);
             if (interceptor.doInvoke()) {
diff --git a/src/main/java/groovy/lang/Tuple.java b/src/main/java/groovy/lang/Tuple.java
index ffa490cfb3..c2e05e1ff3 100644
--- a/src/main/java/groovy/lang/Tuple.java
+++ b/src/main/java/groovy/lang/Tuple.java
@@ -91,9 +91,8 @@ public class Tuple<E> extends AbstractList<E> implements Serializable, Cloneable
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof Tuple)) return false;
+        if (!(o instanceof Tuple that)) return false;
 
-        Tuple that = (Tuple) o;
         int size = size();
         if (size != that.size()) return false;
         for (int i = 0; i < size; i++) {
diff --git a/src/main/java/groovy/namespace/QName.java b/src/main/java/groovy/namespace/QName.java
index d6c6613122..177662dc06 100644
--- a/src/main/java/groovy/namespace/QName.java
+++ b/src/main/java/groovy/namespace/QName.java
@@ -172,13 +172,11 @@ public class QName implements Serializable {
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null) return false;
-        if (o instanceof QName) {
-            final QName qName = (QName) o;
+        if (o instanceof QName qName) {
             if (!namespaceURI.equals(qName.namespaceURI)) return false;
             return localPart.equals(qName.localPart);
 
-        } else if (o instanceof String) {
-            final String string = (String)o;
+        } else if (o instanceof String string) {
             if (string.isEmpty()) return false;
             int lastColonIndex = string.lastIndexOf(':');
             if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
@@ -213,12 +211,10 @@ public class QName implements Serializable {
     public boolean matches(Object o) {
         if (this == o) return true;
         if (o == null) return false;
-        if (o instanceof QName) {
-            final QName qName = (QName) o;
+        if (o instanceof QName qName) {
             if (!namespaceURI.equals(qName.namespaceURI) && !"*".equals(namespaceURI) && !"*".equals(qName.namespaceURI)) return false;
             return localPart.equals(qName.localPart) || "*".equals(localPart) || "*".equals(qName.localPart);
-        } else if (o instanceof String) {
-            final String string = (String)o;
+        } else if (o instanceof String string) {
             if (string.isEmpty()) return false;
             // try matching against 'prefix:localname'
             int lastColonIndex = string.lastIndexOf(':');
diff --git a/src/main/java/groovy/transform/builder/ExternalStrategy.java b/src/main/java/groovy/transform/builder/ExternalStrategy.java
index f5076e93f9..ba68893463 100644
--- a/src/main/java/groovy/transform/builder/ExternalStrategy.java
+++ b/src/main/java/groovy/transform/builder/ExternalStrategy.java
@@ -93,12 +93,11 @@ public class ExternalStrategy extends BuilderASTTransformation.AbstractBuilderSt
 
     @Override
     public void build(BuilderASTTransformation transform, AnnotatedNode annotatedNode, AnnotationNode anno) {
-        if (!(annotatedNode instanceof ClassNode)) {
+        if (!(annotatedNode instanceof ClassNode builder)) {
             transform.addError("Error during " + BuilderASTTransformation.MY_TYPE_NAME + " processing: building for " +
                     annotatedNode.getClass().getSimpleName() + " not supported by " + getClass().getSimpleName(), annotatedNode);
             return;
         }
-        ClassNode builder = (ClassNode) annotatedNode;
         String prefix = transform.getMemberStringValue(anno, "prefix", "");
         ClassNode buildee = transform.getMemberClassValue(anno, "forClass");
         if (buildee == null) {
diff --git a/src/main/java/groovy/transform/builder/SimpleStrategy.java b/src/main/java/groovy/transform/builder/SimpleStrategy.java
index 56f344b246..c109d4b850 100644
--- a/src/main/java/groovy/transform/builder/SimpleStrategy.java
+++ b/src/main/java/groovy/transform/builder/SimpleStrategy.java
@@ -82,13 +82,12 @@ import static org.codehaus.groovy.transform.BuilderASTTransformation.NO_EXCEPTIO
 public class SimpleStrategy extends BuilderASTTransformation.AbstractBuilderStrategy {
     @Override
     public void build(BuilderASTTransformation transform, AnnotatedNode annotatedNode, AnnotationNode anno) {
-        if (!(annotatedNode instanceof ClassNode)) {
+        if (!(annotatedNode instanceof ClassNode buildee)) {
             String target = annotatedNode.getDeclaringClass().isRecord() ? "records" : annotatedNode.getClass().getSimpleName();
             transform.addError("Error during " + BuilderASTTransformation.MY_TYPE_NAME + " processing: building for " +
                     target + " not supported by " + getClass().getSimpleName(), annotatedNode);
             return;
         }
-        ClassNode buildee = (ClassNode) annotatedNode;
         if (unsupportedAttribute(transform, anno, "builderClassName")) return;
         if (unsupportedAttribute(transform, anno, "buildMethodName")) return;
         if (unsupportedAttribute(transform, anno, "builderMethodName")) return;
diff --git a/src/main/java/groovy/ui/GroovyMain.java b/src/main/java/groovy/ui/GroovyMain.java
index fa291a7287..d042a12ada 100644
--- a/src/main/java/groovy/ui/GroovyMain.java
+++ b/src/main/java/groovy/ui/GroovyMain.java
@@ -393,8 +393,7 @@ public class GroovyMain {
             System.err.println(e);
             return false;
         } catch (Throwable e) {
-            if (e instanceof InvokerInvocationException) {
-                InvokerInvocationException iie = (InvokerInvocationException) e;
+            if (e instanceof InvokerInvocationException iie) {
                 e = iie.getCause();
             }
             System.err.println("Caught: " + e);
diff --git a/src/main/java/groovy/util/ConfigObject.java b/src/main/java/groovy/util/ConfigObject.java
index 4946b548a3..e13a30efac 100644
--- a/src/main/java/groovy/util/ConfigObject.java
+++ b/src/main/java/groovy/util/ConfigObject.java
@@ -204,8 +204,7 @@ public class ConfigObject extends GroovyObjectSupport implements Writable, Map,
             String key = (String) o1;
             Object v = map.get(key);
 
-            if (v instanceof ConfigObject) {
-                ConfigObject value = (ConfigObject) v;
+            if (v instanceof ConfigObject value) {
 
                 if (!value.isEmpty()) {
 
diff --git a/src/main/java/groovy/util/Expando.java b/src/main/java/groovy/util/Expando.java
index d95b5904d7..484c6eaf99 100644
--- a/src/main/java/groovy/util/Expando.java
+++ b/src/main/java/groovy/util/Expando.java
@@ -94,8 +94,7 @@ public class Expando extends GroovyObjectSupport {
         catch (GroovyRuntimeException e) {
             // br should get a "native" property match first. getProperty includes such fall-back logic
             Object value = this.getProperty(name);
-            if (value instanceof Closure) {
-                Closure closure = (Closure) value;
+            if (value instanceof Closure closure) {
                 closure = (Closure) closure.clone();
                 closure.setDelegate(this);
                 return closure.call((Object[]) args);
@@ -115,9 +114,8 @@ public class Expando extends GroovyObjectSupport {
     @Override
     public String toString() {
         Object method = getProperties().get("toString");
-        if (method instanceof Closure) {
+        if (method instanceof Closure closure) {
             // invoke overridden toString closure method
-            Closure closure = (Closure) method;
             closure.setDelegate(this);
             return closure.call().toString();
         } else {
@@ -134,9 +132,8 @@ public class Expando extends GroovyObjectSupport {
     @Override
     public boolean equals(Object obj) {
         Object method = getProperties().get("equals");
-        if (method instanceof Closure) {
+        if (method instanceof Closure closure) {
             // invoke overridden equals closure method
-            Closure closure = (Closure) method;
             closure.setDelegate(this);
             Boolean ret = (Boolean) closure.call(obj);
             return ret;
@@ -154,9 +151,8 @@ public class Expando extends GroovyObjectSupport {
     @Override
     public int hashCode() {
         Object method = getProperties().get("hashCode");
-        if (method instanceof Closure) {
+        if (method instanceof Closure closure) {
             // invoke overridden hashCode closure method
-            Closure closure = (Closure) method;
             closure.setDelegate(this);
             Integer ret = (Integer) closure.call();
             return ret;
diff --git a/src/main/java/groovy/util/Node.java b/src/main/java/groovy/util/Node.java
index c164b9502d..e22103f456 100644
--- a/src/main/java/groovy/util/Node.java
+++ b/src/main/java/groovy/util/Node.java
@@ -77,8 +77,7 @@ public class Node implements Serializable, Cloneable {
     @Override
     public Object clone() {
         Object newValue = value;
-        if (value instanceof NodeList) {
-            NodeList nodes = (NodeList) value;
+        if (value instanceof NodeList nodes) {
             newValue = nodes.clone();
         }
         return new Node(null, name, new HashMap(attributes), newValue);
@@ -368,8 +367,7 @@ public class Node implements Serializable, Cloneable {
         if (value instanceof NodeList) {
             return ((NodeList) value).text();
         }
-        if (value instanceof Collection) {
-            Collection coll = (Collection) value;
+        if (value instanceof Collection coll) {
             String previousText = null;
             StringBuilder sb = null;
             for (Object child : coll) {
@@ -524,8 +522,7 @@ public class Node implements Serializable, Cloneable {
     public NodeList getAt(QName name) {
         NodeList answer = new NodeList();
         for (Object child : children()) {
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 Object childNodeName = childNode.name();
                 if (name.matches(childNodeName)) {
                     answer.add(childNode);
@@ -544,11 +541,9 @@ public class Node implements Serializable, Cloneable {
     private NodeList getByName(String name) {
         NodeList answer = new NodeList();
         for (Object child : children()) {
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 Object childNodeName = childNode.name();
-                if (childNodeName instanceof QName) {
-                    QName qn = (QName) childNodeName;
+                if (childNodeName instanceof QName qn) {
                     if (qn.matches(name)) {
                         answer.add(childNode);
                     }
@@ -590,8 +585,7 @@ public class Node implements Serializable, Cloneable {
         List answer = new NodeList();
         for (Iterator iter = InvokerHelper.asIterator(value); iter.hasNext(); ) {
             Object child = iter.next();
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 List children = childNode.depthFirstRest(preorder);
                 if (preorder) answer.add(childNode);
                 if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) answer.addAll(children);
@@ -644,8 +638,7 @@ public class Node implements Serializable, Cloneable {
     private void depthFirstRest(boolean preorder, int level, Closure c) {
         for (Iterator iter = InvokerHelper.asIterator(value); iter.hasNext(); ) {
             Object child = iter.next();
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 if (preorder) callClosureForNode(c, childNode, level);
                 childNode.depthFirstRest(preorder, level + 1, c);
                 if (!preorder) callClosureForNode(c, childNode, level);
@@ -692,8 +685,7 @@ public class Node implements Serializable, Cloneable {
                 } else {
                     stack.push(child);
                 }
-                if (child instanceof Node) {
-                    Node childNode = (Node) child;
+                if (child instanceof Node childNode) {
                     List children = childNode.getDirectChildren();
                     if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) nextLevelChildren.addAll(preorder ? children : DefaultGroovyMethods.reverse(children));
                 }
@@ -748,8 +740,7 @@ public class Node implements Serializable, Cloneable {
                 } else {
                     stack.push(new Tuple2<Object, Integer>(child, level));
                 }
-                if (child instanceof Node) {
-                    Node childNode = (Node) child;
+                if (child instanceof Node childNode) {
                     List children = childNode.getDirectChildren();
                     if (children.size() > 1 || (children.size() == 1 && !(children.get(0) instanceof String))) nextLevelChildren.addAll(preorder ? children : DefaultGroovyMethods.reverse(children));
                 }
@@ -783,8 +774,7 @@ public class Node implements Serializable, Cloneable {
         List answer = new NodeList();
         for (Iterator iter = InvokerHelper.asIterator(value); iter.hasNext(); ) {
             Object child = iter.next();
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 answer.add(childNode);
             } else if (child instanceof String) {
                 answer.add(child);
diff --git a/src/main/java/groovy/util/NodeList.java b/src/main/java/groovy/util/NodeList.java
index 24e0b91457..bfbf0912d8 100644
--- a/src/main/java/groovy/util/NodeList.java
+++ b/src/main/java/groovy/util/NodeList.java
@@ -62,8 +62,7 @@ public class NodeList extends ArrayList {
         NodeList result = new NodeList(size());
         for (int i = 0; i < size(); i++) {
             Object next = get(i);
-            if (next instanceof Node) {
-                Node n = (Node) next;
+            if (next instanceof Node n) {
                 result.add(n.clone());
             } else {
                 result.add(next);
@@ -130,8 +129,7 @@ public class NodeList extends ArrayList {
     public NodeList getAt(String name) {
         NodeList answer = new NodeList();
         for (Object child : this) {
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 Object temp = childNode.get(name);
                 if (temp instanceof Collection) {
                     answer.addAll((Collection) temp);
@@ -152,8 +150,7 @@ public class NodeList extends ArrayList {
     public NodeList getAt(QName name) {
         NodeList answer = new NodeList();
         for (Object child : this) {
-            if (child instanceof Node) {
-                Node childNode = (Node) child;
+            if (child instanceof Node childNode) {
                 NodeList temp = childNode.getAt(name);
                 answer.addAll(temp);
             }
diff --git a/src/main/java/groovy/util/ObjectGraphBuilder.java b/src/main/java/groovy/util/ObjectGraphBuilder.java
index 2e82132265..dd6de47858 100644
--- a/src/main/java/groovy/util/ObjectGraphBuilder.java
+++ b/src/main/java/groovy/util/ObjectGraphBuilder.java
@@ -152,10 +152,9 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
     public void setChildPropertySetter(final Object childPropertySetter) {
         if (childPropertySetter instanceof ChildPropertySetter) {
             this.childPropertySetter = (ChildPropertySetter) childPropertySetter;
-        } else if (childPropertySetter instanceof Closure) {
+        } else if (childPropertySetter instanceof Closure cls) {
             final ObjectGraphBuilder self = this;
             this.childPropertySetter = (parent, child, parentName, propertyName) -> {
-                Closure cls = (Closure) childPropertySetter;
                 cls.setDelegate(self);
                 cls.call(parent, child, parentName, propertyName);
             };
@@ -181,15 +180,13 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
             this.classNameResolver = (ClassNameResolver) classNameResolver;
         } else if (classNameResolver instanceof String) {
             this.classNameResolver = classname -> makeClassName((String) classNameResolver, classname);
-        } else if (classNameResolver instanceof Closure) {
+        } else if (classNameResolver instanceof Closure cls) {
             final ObjectGraphBuilder self = this;
             this.classNameResolver = classname -> {
-                Closure cls = (Closure) classNameResolver;
                 cls.setDelegate(self);
                 return (String) cls.call(new Object[]{classname});
             };
-        } else if (classNameResolver instanceof Map) {
-            Map classNameResolverOptions = (Map) classNameResolver;
+        } else if (classNameResolver instanceof Map classNameResolverOptions) {
 
             String resolverName = (String) classNameResolverOptions.get(CLASSNAME_RESOLVER_KEY);
 
@@ -223,10 +220,9 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
             this.identifierResolver = (IdentifierResolver) identifierResolver;
         } else if (identifierResolver instanceof String) {
             this.identifierResolver = nodeName -> (String) identifierResolver;
-        } else if (identifierResolver instanceof Closure) {
+        } else if (identifierResolver instanceof Closure cls) {
             final ObjectGraphBuilder self = this;
             this.identifierResolver = nodeName -> {
-                Closure cls = (Closure) identifierResolver;
                 cls.setDelegate(self);
                 return (String) cls.call(new Object[]{nodeName});
             };
@@ -250,10 +246,9 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
     public void setNewInstanceResolver(final Object newInstanceResolver) {
         if (newInstanceResolver instanceof NewInstanceResolver) {
             this.newInstanceResolver = (NewInstanceResolver) newInstanceResolver;
-        } else if (newInstanceResolver instanceof Closure) {
+        } else if (newInstanceResolver instanceof Closure cls) {
             final ObjectGraphBuilder self = this;
             this.newInstanceResolver = (klass, attributes) -> {
-                Closure cls = (Closure) newInstanceResolver;
                 cls.setDelegate(self);
                 return cls.call(klass, attributes);
             };
@@ -272,10 +267,9 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
             this.referenceResolver = (ReferenceResolver) referenceResolver;
         } else if (referenceResolver instanceof String) {
             this.referenceResolver = nodeName -> (String) referenceResolver;
-        } else if (referenceResolver instanceof Closure) {
+        } else if (referenceResolver instanceof Closure cls) {
             final ObjectGraphBuilder self = this;
             this.referenceResolver = nodeName -> {
-                Closure cls = (Closure) referenceResolver;
                 cls.setDelegate(self);
                 return (String) cls.call(new Object[]{nodeName});
             };
@@ -411,8 +405,7 @@ public class ObjectGraphBuilder extends FactoryBuilderSupport {
 
                     if (Collection.class.isAssignableFrom(klass)) {
                         Type type = currentNode.getClass().getDeclaredField(classname).getGenericType();
-                        if (type instanceof ParameterizedType) {
-                            ParameterizedType ptype = (ParameterizedType) type;
+                        if (type instanceof ParameterizedType ptype) {
                             Type[] actualTypeArguments = ptype.getActualTypeArguments();
                             if (actualTypeArguments.length != 1) {
                                 throw new RuntimeException("can't determine class name for collection field " + classname + " with multiple generics");
diff --git a/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
index 4c5aed3165..dd263c974c 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ConstructorNodeUtils.java
@@ -74,8 +74,7 @@ public class ConstructorNodeUtils {
     public static ConstructorCallExpression getFirstIfSpecialConstructorCall(final Statement code) {
         if (code == null) return null;
 
-        if (code instanceof BlockStatement) {
-            final BlockStatement block = (BlockStatement) code;
+        if (code instanceof BlockStatement block) {
             final List<Statement> statementList = block.getStatements();
             if (statementList.isEmpty()) return null;
             // handle blocks of blocks
@@ -85,8 +84,7 @@ public class ConstructorNodeUtils {
         if (!(code instanceof ExpressionStatement)) return null;
 
         Expression expression = ((ExpressionStatement) code).getExpression();
-        if (!(expression instanceof ConstructorCallExpression)) return null;
-        ConstructorCallExpression cce = (ConstructorCallExpression) expression;
+        if (!(expression instanceof ConstructorCallExpression cce)) return null;
         if (cce.isSpecialCall()) return cce;
         return null;
     }
diff --git a/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java b/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
index 803dc7b842..b6f29a893b 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
@@ -200,8 +200,7 @@ public final class ExpressionUtils {
      * @return original or transformed expression
      */
     public static Expression transformInlineConstants(final Expression exp) {
-        if (exp instanceof PropertyExpression) {
-            PropertyExpression pe = (PropertyExpression) exp;
+        if (exp instanceof PropertyExpression pe) {
             if (pe.getObjectExpression() instanceof ClassExpression) {
                 ClassNode clazz = pe.getObjectExpression().getType();
                 FieldNode field = ClassNodeUtils.getField(clazz, pe.getPropertyAsString());
@@ -212,10 +211,8 @@ public final class ExpressionUtils {
                     }
                 }
             }
-        } else if (exp instanceof VariableExpression) {
-            VariableExpression ve = (VariableExpression) exp;
-            if (ve.getAccessedVariable() instanceof FieldNode) {
-                FieldNode field = (FieldNode) ve.getAccessedVariable();
+        } else if (exp instanceof VariableExpression ve) {
+            if (ve.getAccessedVariable() instanceof FieldNode field) {
                 if (!field.isEnum() && field.isFinal() && field.isStatic()) {
                     Expression value = transformInlineConstants(field.getInitialValueExpression(), field.getType()); // GROOVY-11207, GROOVY-10068
                     if (value instanceof ConstantExpression) {
@@ -223,8 +220,7 @@ public final class ExpressionUtils {
                     }
                 }
             }
-        } else if (exp instanceof BinaryExpression) {
-            BinaryExpression be = (BinaryExpression) exp;
+        } else if (exp instanceof BinaryExpression be) {
             Expression lhs = transformInlineConstants(be.getLeftExpression());
             Expression rhs = transformInlineConstants(be.getRightExpression());
             if (be.getOperation().getType() == PLUS // GROOVY-9855: inline string concat
@@ -262,8 +258,7 @@ public final class ExpressionUtils {
      * @return the transformed type or the original if no transformation was possible
      */
     public static Expression transformInlineConstants(final Expression exp, final ClassNode attrType) {
-        if (exp instanceof PropertyExpression) {
-            PropertyExpression pe = (PropertyExpression) exp;
+        if (exp instanceof PropertyExpression pe) {
             Expression e = pe.getObjectExpression();
             ClassNode cn;
             FieldNode fn;
@@ -289,10 +284,8 @@ public final class ExpressionUtils {
                     }
                 }*/
             }
-        } else if (exp instanceof VariableExpression) {
-            VariableExpression ve = (VariableExpression) exp;
-            if (ve.getAccessedVariable() instanceof FieldNode) {
-                FieldNode fn = (FieldNode) ve.getAccessedVariable();
+        } else if (exp instanceof VariableExpression ve) {
+            if (ve.getAccessedVariable() instanceof FieldNode fn) {
                 if (fn.isStatic() && fn.isFinal()) {
                     Expression e = transformInlineConstants(fn.getInitialValueExpression(), attrType);
                     if (e != null) {
@@ -303,20 +296,17 @@ public final class ExpressionUtils {
         } else if (exp instanceof ConstantExpression) {
             Object value = ((ConstantExpression) exp).getValue();
             ClassNode targetType = ClassHelper.getWrapper(attrType);
-            if (value instanceof Integer) {
-                Integer integer = (Integer) value;
+            if (value instanceof Integer integer) {
                 ConstantExpression constantExpression = transformNumberConstantExpression(exp, targetType, integer);
                 if (constantExpression != null) return constantExpression;
-            } else if (value instanceof BigDecimal) {
-                BigDecimal decimal = (BigDecimal) value;
+            } else if (value instanceof BigDecimal decimal) {
                 if (ClassHelper.isWrapperFloat(targetType)) {
                     return configure(exp, new ConstantExpression(decimal.floatValue(), true));
                 }
                 if (ClassHelper.isWrapperDouble(targetType)) {
                     return configure(exp, new ConstantExpression(decimal.doubleValue(), true));
                 }
-            } else if (value instanceof String) {
-                String string = (String) value;
+            } else if (value instanceof String string) {
                 if (ClassHelper.isWrapperCharacter(targetType) && string.length() == 1) {
                     return configure(exp, new ConstantExpression(string.charAt(0), true));
                 }
diff --git a/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java b/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
index ddb16c06d8..4ace6fe377 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ImmutablePropertyUtils.java
@@ -269,12 +269,11 @@ public class ImmutablePropertyUtils {
         final Expression expression = anno.getMember(MEMBER_KNOWN_IMMUTABLES);
         if (expression == null) return immutables;
 
-        if (!(expression instanceof ListExpression)) {
+        if (!(expression instanceof ListExpression listExpression)) {
             xform.addError("Use the Groovy list notation [el1, el2] to specify known immutable property names via \"" + MEMBER_KNOWN_IMMUTABLES + "\"", anno);
             return immutables;
         }
 
-        final ListExpression listExpression = (ListExpression) expression;
         for (Expression listItemExpression : listExpression.getExpressions()) {
             if (listItemExpression instanceof ConstantExpression) {
                 immutables.add((String) ((ConstantExpression) listItemExpression).getValue());
@@ -294,12 +293,11 @@ public class ImmutablePropertyUtils {
         final Expression expression = anno.getMember(MEMBER_KNOWN_IMMUTABLE_CLASSES);
         if (expression == null) return immutableClasses;
 
-        if (!(expression instanceof ListExpression)) {
+        if (!(expression instanceof ListExpression listExpression)) {
             xform.addError("Use the Groovy list notation [el1, el2] to specify known immutable classes via \"" + MEMBER_KNOWN_IMMUTABLE_CLASSES + "\"", anno);
             return immutableClasses;
         }
 
-        final ListExpression listExpression = (ListExpression) expression;
         for (Expression listItemExpression : listExpression.getExpressions()) {
             if (listItemExpression instanceof ClassExpression) {
                 immutableClasses.add(listItemExpression.getType().getName());
diff --git a/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java b/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
index 24006689ae..fd4aa56362 100644
--- a/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/VisibilityUtils.java
@@ -94,8 +94,7 @@ public class VisibilityUtils {
     }
 
     private static Visibility getVisibility(final Expression e) {
-        if (e instanceof PropertyExpression) {
-            PropertyExpression pe = (PropertyExpression) e;
+        if (e instanceof PropertyExpression pe) {
             if (pe.getObjectExpression() instanceof ClassExpression && "groovy.transform.options.Visibility".equals(pe.getObjectExpression().getText())) {
                 return Visibility.valueOf(pe.getPropertyAsString());
             }
diff --git a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
index adc2647881..72f04a3810 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/AstBuilder.java
@@ -408,8 +408,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
 
         Expression conditionExpression = (Expression) this.visit(ctx.ce);
 
-        if (conditionExpression instanceof BinaryExpression) {
-            BinaryExpression binaryExpression = (BinaryExpression) conditionExpression;
+        if (conditionExpression instanceof BinaryExpression binaryExpression) {
 
             if (binaryExpression.getOperation().getType() == Types.ASSIGN) {
                 throw createParsingFailedException("Assignment expression is not allowed in the assert statement", conditionExpression);
@@ -1032,8 +1031,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                     }
 
                     Statement exprOrBlockStatement = statements.get(0);
-                    if (exprOrBlockStatement instanceof BlockStatement) {
-                        BlockStatement blockStatement = (BlockStatement) exprOrBlockStatement;
+                    if (exprOrBlockStatement instanceof BlockStatement blockStatement) {
                         List<Statement> branchStatementList = blockStatement.getStatements();
                         if (1 == branchStatementList.size()) {
                             exprOrBlockStatement = branchStatementList.get(0);
@@ -1605,11 +1603,10 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
     }
 
     private ConstructorCallExpression checkThisAndSuperConstructorCall(final Statement statement) {
-        if (!(statement instanceof BlockStatement)) { // method code must be a BlockStatement
+        if (!(statement instanceof BlockStatement blockStatement)) { // method code must be a BlockStatement
             return null;
         }
 
-        BlockStatement blockStatement = (BlockStatement) statement;
         List<Statement> statementList = blockStatement.getStatements();
 
         for (int i = 0, n = statementList.size(); i < n; i += 1) {
@@ -2268,8 +2265,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                     List<Expression> expressionList = ((ArgumentListExpression) arguments).getExpressions();
                     if (1 == expressionList.size()) {
                         final Expression expression = expressionList.get(0);
-                        if (expression instanceof MethodCallExpression) {
-                            MethodCallExpression mce = (MethodCallExpression) expression;
+                        if (expression instanceof MethodCallExpression mce) {
                             final Expression methodCallArguments = mce.getArguments();
 
                             // check the method call tails with a closure
@@ -2498,8 +2494,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                 return configureAST(createCallMethodCallExpression(baseExpr, argumentsExpr), ctx);
             }
 
-            if (baseExpr instanceof AttributeExpression) { // e.g. obj.@a(1, 2)
-                AttributeExpression attributeExpression = (AttributeExpression) baseExpr;
+            if (baseExpr instanceof AttributeExpression attributeExpression) { // e.g. obj.@a(1, 2)
                 attributeExpression.setSpreadSafe(false); // whether attributeExpression is spread safe or not, we must reset it as false
                 return configureAST(createCallMethodCallExpression(attributeExpression, argumentsExpr, true), ctx);
             }
@@ -2557,18 +2552,15 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
         } else if (asBoolean(ctx.closureOrLambdaExpression())) {
             ClosureExpression closureExpression = this.visitClosureOrLambdaExpression(ctx.closureOrLambdaExpression());
 
-            if (baseExpr instanceof MethodCallExpression) {
-                MethodCallExpression methodCallExpression = (MethodCallExpression) baseExpr;
+            if (baseExpr instanceof MethodCallExpression methodCallExpression) {
                 Expression argumentsExpression = methodCallExpression.getArguments();
 
-                if (argumentsExpression instanceof ArgumentListExpression) { // normal arguments, e.g. 1, 2
-                    ArgumentListExpression argumentListExpression = (ArgumentListExpression) argumentsExpression;
+                if (argumentsExpression instanceof ArgumentListExpression argumentListExpression) { // normal arguments, e.g. 1, 2
                     argumentListExpression.getExpressions().add(closureExpression);
                     return configureAST(methodCallExpression, ctx);
                 }
 
-                if (argumentsExpression instanceof TupleExpression) { // named arguments, e.g. x: 1, y: 2
-                    TupleExpression tupleExpression = (TupleExpression) argumentsExpression;
+                if (argumentsExpression instanceof TupleExpression tupleExpression) { // named arguments, e.g. x: 1, y: 2
                     NamedArgumentListExpression namedArgumentListExpression = (NamedArgumentListExpression) tupleExpression.getExpression(0);
 
                     if (asBoolean(tupleExpression.getExpressions())) {
@@ -2709,8 +2701,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
                 .map(this::visitEnhancedArgumentListElement)
                 .forEach(e -> {
 
-                    if (e instanceof MapEntryExpression) {
-                        MapEntryExpression mapEntryExpression = (MapEntryExpression) e;
+                    if (e instanceof MapEntryExpression mapEntryExpression) {
                         validateDuplicatedNamedParameter(mapEntryExpressionList, mapEntryExpression);
 
                         mapEntryExpressionList.add(mapEntryExpression);
@@ -3382,8 +3373,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
             var initExpressions = new ArrayList<Expression>();
             for (int i = 0; i < ctx.getChildCount(); i += 1) {
                 var c = ctx.getChild(i);
-                if (c instanceof ArrayInitializerContext) {
-                    var arrayInitializer = (ArrayInitializerContext) c;
+                if (c instanceof ArrayInitializerContext arrayInitializer) {
                     ClassNode subType = elementType.getComponentType();
                     //if (subType == null) produce closure or throw exception
                     arrayInitializer.putNodeMetaData("elementType", subType);
@@ -3536,9 +3526,8 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
     }
 
     private void validateExpressionListElement(final ExpressionListElementContext ctx, final Expression expression) {
-        if (expression instanceof MethodCallExpression && isTrue(expression, IS_COMMAND_EXPRESSION)) {
+        if (expression instanceof MethodCallExpression methodCallExpression && isTrue(expression, IS_COMMAND_EXPRESSION)) {
             // statements like `foo(String a)` is invalid
-            MethodCallExpression methodCallExpression = (MethodCallExpression) expression;
             String methodName = methodCallExpression.getMethodAsString();
             if (methodCallExpression.isImplicitThis() && Character.isUpperCase(methodName.codePointAt(0)) || isPrimitiveType(methodName)) {
                 throw createParsingFailedException("Invalid method declaration", ctx);
@@ -4667,8 +4656,7 @@ public class AstBuilder extends GroovyParserBaseVisitor<Object> {
     private CompilationFailedException createParsingFailedException(final Throwable t) {
         if (t instanceof SyntaxException) {
             this.collectSyntaxError((SyntaxException) t);
-        } else if (t instanceof GroovySyntaxError) {
-            GroovySyntaxError groovySyntaxError = (GroovySyntaxError) t;
+        } else if (t instanceof GroovySyntaxError groovySyntaxError) {
 
             this.collectSyntaxError(
                     new SyntaxException(
diff --git a/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java b/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
index ea94b2222c..57f0a49bdf 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
@@ -101,7 +101,7 @@ public class GroovydocManager {
             return;
         }
 
-        if (!(node instanceof AnnotatedNode)) {
+        if (!(node instanceof AnnotatedNode annotatedNode)) {
             return;
         }
 
@@ -109,7 +109,6 @@ public class GroovydocManager {
             return;
         }
 
-        AnnotatedNode annotatedNode = (AnnotatedNode) node;
         AnnotationNode annotationNode = new AnnotationNode(ClassHelper.make(Groovydoc.class));
         annotationNode.addMember(VALUE, new ConstantExpression(docCommentNodeText));
         annotatedNode.addAnnotation(annotationNode);
diff --git a/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java b/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
index 624666c8d8..958a5681eb 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/TryWithResourcesASTTransformation.java
@@ -113,11 +113,10 @@ public class TryWithResourcesASTTransformation {
         }
 
         Expression targetExpression = ((DeclarationExpression) variableDeclaration.getExpression()).getLeftExpression();
-        if (!(targetExpression instanceof VariableExpression)) {
+        if (!(targetExpression instanceof VariableExpression variableExpression)) {
             throw astBuilder.createParsingFailedException("The expression statement is not a variable delcaration statement", variableDeclaration);
         }
 
-        VariableExpression variableExpression = (VariableExpression) targetExpression;
         variableExpression.setModifiers(variableExpression.getModifiers() | Opcodes.ACC_FINAL);
 
         return variableDeclaration;
diff --git a/src/main/java/org/apache/groovy/parser/antlr4/internal/atnmanager/AtnManager.java b/src/main/java/org/apache/groovy/parser/antlr4/internal/atnmanager/AtnManager.java
index 642090ca14..ff24c15cb5 100644
--- a/src/main/java/org/apache/groovy/parser/antlr4/internal/atnmanager/AtnManager.java
+++ b/src/main/java/org/apache/groovy/parser/antlr4/internal/atnmanager/AtnManager.java
@@ -57,8 +57,7 @@ public abstract class AtnManager {
             while (true) {
                 try {
                     Reference<? extends AtnWrapper> reference = atnWrapperReferenceQueue.remove();
-                    if (reference instanceof AtnWrapperSoftReference && shouldClearDfaCache() && isSmartCleanupEnabled()) {
-                        AtnWrapperSoftReference atnWrapperSoftReference = (AtnWrapperSoftReference) reference;
+                    if (reference instanceof AtnWrapperSoftReference atnWrapperSoftReference && shouldClearDfaCache() && isSmartCleanupEnabled()) {
                         atnWrapperSoftReference.getAtnManager().getAtnWrapper(false).clearDFA();
                     }
                 } catch (Throwable t) {
diff --git a/src/main/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java b/src/main/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
index 4a50984590..313e841451 100644
--- a/src/main/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
+++ b/src/main/java/org/apache/groovy/util/concurrent/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
@@ -1411,11 +1411,10 @@ public final class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V>
 
     @Override
     public boolean contains(Object obj) {
-      if (!(obj instanceof Entry<?, ?>)) {
+      if (!(obj instanceof Entry<?, ?> entry)) {
         return false;
       }
-      Entry<?, ?> entry = (Entry<?, ?>) obj;
-      Node<K, V> node = map.data.get(entry.getKey());
+        Node<K, V> node = map.data.get(entry.getKey());
       return (node != null) && (node.getValue().equals(entry.getValue()));
     }
 
@@ -1426,11 +1425,10 @@ public final class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V>
 
     @Override
     public boolean remove(Object obj) {
-      if (!(obj instanceof Entry<?, ?>)) {
+      if (!(obj instanceof Entry<?, ?> entry)) {
         return false;
       }
-      Entry<?, ?> entry = (Entry<?, ?>) obj;
-      return map.remove(entry.getKey(), entry.getValue());
+        return map.remove(entry.getKey(), entry.getValue());
     }
   }
 
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassNode.java b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
index 96511c4b52..f5b7fe5255 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassNode.java
@@ -702,18 +702,15 @@ public class ClassNode extends AnnotatedNode {
     public void positionStmtsAfterEnumInitStmts(List<Statement> staticFieldInitializerStatements) {
         MethodNode constructor = getOrAddStaticInitializer();
         Statement statement = constructor.getCode();
-        if (statement instanceof BlockStatement) {
-            BlockStatement block = (BlockStatement) statement;
+        if (statement instanceof BlockStatement block) {
             // add given statements for explicitly declared static fields just after enum-special fields
             // are found - the $VALUES binary expression marks the end of such fields.
             List<Statement> blockStatements = block.getStatements();
             for (ListIterator<Statement> it = blockStatements.listIterator(); it.hasNext(); ) {
                 Statement stmt = it.next();
                 if (stmt instanceof ExpressionStatement &&
-                        ((ExpressionStatement) stmt).getExpression() instanceof BinaryExpression) {
-                    BinaryExpression bExp = (BinaryExpression) ((ExpressionStatement) stmt).getExpression();
-                    if (bExp.getLeftExpression() instanceof FieldExpression) {
-                        FieldExpression fExp = (FieldExpression) bExp.getLeftExpression();
+                        ((ExpressionStatement) stmt).getExpression() instanceof BinaryExpression bExp) {
+                    if (bExp.getLeftExpression() instanceof FieldExpression fExp) {
                         if ("$VALUES".equals(fExp.getFieldName())) {
                             for (Statement initStmt : staticFieldInitializerStatements) {
                                 it.add(initStmt);
diff --git a/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java b/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
index af1eef9daf..1e1a4002aa 100644
--- a/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
@@ -42,8 +42,7 @@ public class ConstructorNode extends MethodNode {
         if (!(code instanceof ExpressionStatement)) return false;
 
         Expression expression = ((ExpressionStatement) code).getExpression();
-        if (!(expression instanceof ConstructorCallExpression)) return false;
-        ConstructorCallExpression cce = (ConstructorCallExpression) expression;
+        if (!(expression instanceof ConstructorCallExpression cce)) return false;
         return cce.isSpecialCall();
     }
 
diff --git a/src/main/java/org/codehaus/groovy/ast/ImportNode.java b/src/main/java/org/codehaus/groovy/ast/ImportNode.java
index bb07ad096c..02b341e795 100644
--- a/src/main/java/org/codehaus/groovy/ast/ImportNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ImportNode.java
@@ -156,9 +156,8 @@ public class ImportNode extends AnnotatedNode {
     @Override
     public boolean equals(Object that) {
         if (that == this) return true;
-        if (!(that instanceof ImportNode)) return false;
+        if (!(that instanceof ImportNode node)) return false;
 
-        ImportNode node = (ImportNode) that;
         if (!Objects.equals(type, node.type))
             return false;
         if (!Objects.equals(alias, node.alias))
diff --git a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
index a98e53ba45..6740854173 100644
--- a/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/ast/MixinASTTransformation.java
@@ -54,8 +54,7 @@ public class MixinASTTransformation extends AbstractASTTransformation {
         Expression useClasses = null;
         if (value instanceof ClassExpression) {
             useClasses = value;
-        } else if (value instanceof ListExpression) {
-            ListExpression listExpression = (ListExpression) value;
+        } else if (value instanceof ListExpression listExpression) {
             for (Expression ex : listExpression.getExpressions()) {
                 if (!(ex instanceof ClassExpression))
                     return;
@@ -66,8 +65,7 @@ public class MixinASTTransformation extends AbstractASTTransformation {
             return;
         }
 
-        if (target instanceof ClassNode) {
-            ClassNode targetClass = (ClassNode) target;
+        if (target instanceof ClassNode targetClass) {
 
             MethodNode clinit = targetClass.getDeclaredMethod("<clinit>", Parameter.EMPTY_ARRAY);
             if (clinit == null) {
diff --git a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
index 8c7edf3bf2..9ba8598b6a 100644
--- a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
@@ -390,17 +390,15 @@ public class ModuleNode extends ASTNode {
         List<FieldNode> fields = new ArrayList<>();
         // check for uncontained statements (excluding decl statements)
         for (Statement statement : statementBlock.getStatements()) {
-            if (!(statement instanceof ExpressionStatement)) {
+            if (!(statement instanceof ExpressionStatement es)) {
                 hasUncontainedStatements = true;
                 break;
             }
-            ExpressionStatement es = (ExpressionStatement) statement;
             Expression expression = es.getExpression();
-            if (!(expression instanceof DeclarationExpression)) {
+            if (!(expression instanceof DeclarationExpression de)) {
                 hasUncontainedStatements = true;
                 break;
             }
-            DeclarationExpression de = (DeclarationExpression) expression;
             if (de.isMultipleAssignmentDeclaration()) {
                 List<Expression> variables = de.getTupleExpression().getExpressions();
                 if (!(de.getRightExpression() instanceof ListExpression)) break;
diff --git a/src/main/java/org/codehaus/groovy/ast/RecordComponentNode.java b/src/main/java/org/codehaus/groovy/ast/RecordComponentNode.java
index de5b6e6961..9379a329e6 100644
--- a/src/main/java/org/codehaus/groovy/ast/RecordComponentNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/RecordComponentNode.java
@@ -55,8 +55,7 @@ public class RecordComponentNode extends AnnotatedNode {
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof RecordComponentNode)) return false;
-        RecordComponentNode that = (RecordComponentNode) o;
+        if (!(o instanceof RecordComponentNode that)) return false;
         return name.equals(that.name) && getDeclaringClass().equals(that.getDeclaringClass());
     }
 
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
index 1101017cd4..dbd671d7e9 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
@@ -66,8 +66,7 @@ class Annotations {
             return type != null ? new ClassExpression(type) : null;
         }
 
-        if (value instanceof EnumConstantWrapper) {
-            EnumConstantWrapper wrapper = (EnumConstantWrapper) value;
+        if (value instanceof EnumConstantWrapper wrapper) {
             return new PropertyExpression(new ClassExpression(resolver.resolveType(Type.getType(wrapper.enumDesc))), wrapper.constant);
         }
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
index bd74ee8690..e4970bca8d 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
@@ -79,8 +79,7 @@ public class DeclarationExpression extends BinaryExpression {
     private static void check(final Expression left) {
         if (left instanceof VariableExpression) {
             // all good
-        } else if (left instanceof TupleExpression) {
-            TupleExpression tuple = (TupleExpression) left;
+        } else if (left instanceof TupleExpression tuple) {
             if (tuple.getExpressions().isEmpty())
                 throw new GroovyBugError("one element required for left side");
         } else {
@@ -152,8 +151,7 @@ public class DeclarationExpression extends BinaryExpression {
             TupleExpression t = getTupleExpression();
             text.append("def (");
             for (Expression e : t.getExpressions()) {
-                if (e instanceof VariableExpression) {
-                    VariableExpression v = (VariableExpression) e;
+                if (e instanceof VariableExpression v) {
                     if (!v.isDynamicTyped()) {
                         text.append(formatTypeName(v.getOriginType())).append(' ');
                     }
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
index 9d11192ba2..8f5b0c0b51 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GeneralUtils.java
@@ -981,9 +981,8 @@ public class GeneralUtils {
 
             AnnotationNode retentionPolicyAnnotation = annotations.get(0);
             Expression valueExpression = retentionPolicyAnnotation.getMember("value");
-            if (!(valueExpression instanceof PropertyExpression)) continue;
+            if (!(valueExpression instanceof PropertyExpression propertyExpression)) continue;
 
-            PropertyExpression propertyExpression = (PropertyExpression) valueExpression;
             boolean processAnnotation = propertyExpression.getProperty() instanceof ConstantExpression
                     && ("RUNTIME".equals(((ConstantExpression) (propertyExpression.getProperty())).getValue())
                         || "CLASS".equals(((ConstantExpression) (propertyExpression.getProperty())).getValue()));
@@ -1086,17 +1085,14 @@ public class GeneralUtils {
     public static boolean copyStatementsWithSuperAdjustment(final ClosureExpression pre, final BlockStatement body) {
         Statement preCode = pre.getCode();
         boolean changed = false;
-        if (preCode instanceof BlockStatement) {
-            BlockStatement block = (BlockStatement) preCode;
+        if (preCode instanceof BlockStatement block) {
             List<Statement> statements = block.getStatements();
             for (int i = 0, n = statements.size(); i < n; i += 1) {
                 Statement statement = statements.get(i);
                 // adjust the first statement if it's a super call
-                if (i == 0 && statement instanceof ExpressionStatement) {
-                    ExpressionStatement es = (ExpressionStatement) statement;
+                if (i == 0 && statement instanceof ExpressionStatement es) {
                     Expression preExp = es.getExpression();
-                    if (preExp instanceof MethodCallExpression) {
-                        MethodCallExpression mce = (MethodCallExpression) preExp;
+                    if (preExp instanceof MethodCallExpression mce) {
                         String name = mce.getMethodAsString();
                         if ("super".equals(name)) {
                             es.setExpression(new ConstructorCallExpression(ClassNode.SUPER, mce.getArguments()));
@@ -1115,8 +1111,7 @@ public class GeneralUtils {
         for (Map.Entry<String, Expression> member : members.entrySet())  {
             if (member.getValue() instanceof ClosureExpression) return true;
 
-            if (member.getValue() instanceof ClassExpression)  {
-                ClassExpression classExpression = (ClassExpression) member.getValue();
+            if (member.getValue() instanceof ClassExpression classExpression)  {
                 Class<?> typeClass = classExpression.getType().isResolved() ? classExpression.getType().redirect().getTypeClass() : null;
                 if (typeClass != null && GeneratedClosure.class.isAssignableFrom(typeClass)) return true;
             }
@@ -1196,8 +1191,7 @@ public class GeneralUtils {
                 || maybeFallsThrough(((IfStatement) statement).getIfBlock());
         } else if (statement instanceof SwitchStatement) {
             // TODO
-        } else if (statement instanceof TryCatchStatement) {
-            TryCatchStatement tryCatch = (TryCatchStatement) statement;
+        } else if (statement instanceof TryCatchStatement tryCatch) {
             if (!maybeFallsThrough(tryCatch.getFinallyStatement())) return false;
             for (CatchStatement cs : tryCatch.getCatchStatements())
                 if (maybeFallsThrough(cs.getCode())) return true;
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
index 8231765d00..3c5ae2c807 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
@@ -664,8 +664,7 @@ public class WideningCategories {
         if (source.isDerivedFrom(target) || source.implementsInterface(target)) {
             return true;
         }
-        if (target instanceof LowestUpperBoundClassNode) {
-            LowestUpperBoundClassNode lub = (LowestUpperBoundClassNode) target;
+        if (target instanceof LowestUpperBoundClassNode lub) {
             if (implementsInterfaceOrSubclassOf(source, lub.getSuperClass())) {
                 return true;
             }
diff --git a/src/main/java/org/codehaus/groovy/classgen/AnnotationVisitor.java b/src/main/java/org/codehaus/groovy/classgen/AnnotationVisitor.java
index fc99c529e4..352e941ff5 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AnnotationVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AnnotationVisitor.java
@@ -107,11 +107,9 @@ public class AnnotationVisitor {
     }
 
     private boolean validateEnumConstant(final Expression exp) {
-        if (exp instanceof PropertyExpression) {
-            PropertyExpression pe = (PropertyExpression) exp;
+        if (exp instanceof PropertyExpression pe) {
             String name = pe.getPropertyAsString();
-            if (pe.getObjectExpression() instanceof ClassExpression && name != null) {
-                ClassExpression ce = (ClassExpression) pe.getObjectExpression();
+            if (pe.getObjectExpression() instanceof ClassExpression ce && name != null) {
                 ClassNode type = ce.getType();
                 if (type.isEnum()) {
                     boolean ok = false;
@@ -163,8 +161,7 @@ public class AnnotationVisitor {
     protected void visitExpression(final String attrName, final Expression valueExpr, final ClassNode attrType) {
         if (attrType.isArray()) {
             // check needed as @Test(attr = {"elem"}) passes through the parser
-            if (valueExpr instanceof ListExpression) {
-                ListExpression le = (ListExpression) valueExpr;
+            if (valueExpr instanceof ListExpression le) {
                 visitListExpression(attrName, le, attrType.getComponentType());
             } else if (valueExpr instanceof ClosureExpression) {
                 addError("Annotation list attributes must use Groovy notation [el1, el2]", valueExpr);
@@ -275,11 +272,10 @@ public class AnnotationVisitor {
 
     public void checkCircularReference(final ClassNode searchClass, final ClassNode attrType, final Expression startExp) {
         if (!isValidAnnotationClass(attrType)) return;
-        if (!(startExp instanceof AnnotationConstantExpression)) {
+        if (!(startExp instanceof AnnotationConstantExpression ace)) {
             addError("Found '" + startExp.getText() + "' when expecting an Annotation Constant", startExp);
             return;
         }
-        AnnotationConstantExpression ace = (AnnotationConstantExpression) startExp;
         AnnotationNode annotationNode = (AnnotationNode) ace.getValue();
         if (annotationNode.getClassNode().equals(searchClass)) {
             addError("Circular reference discovered in " + searchClass.getName(), startExp);
diff --git a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
index 3869830267..6150764f25 100644
--- a/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/AsmClassGenerator.java
@@ -720,8 +720,7 @@ public class AsmClassGenerator extends ClassGenerator {
         } else if (type.isArray()) {
             AnnotationVisitor avl = av.visitArray(null);
             ClassNode componentType = type.getComponentType();
-            if (exp instanceof ListExpression) {
-                ListExpression list = (ListExpression) exp;
+            if (exp instanceof ListExpression list) {
                 for (Expression lExp : list.getExpressions()) {
                     visitAnnotationDefaultExpression(avl, componentType, lExp);
                 }
@@ -1813,8 +1812,7 @@ public class AsmClassGenerator extends ClassGenerator {
         // init declarations
         for (int i = 0; i < size; i += 1) {
             Expression expr = expressions.get(i);
-            if (expr instanceof DeclarationExpression) {
-                DeclarationExpression de = (DeclarationExpression) expr;
+            if (expr instanceof DeclarationExpression de) {
                 BinaryExpression be = new BinaryExpression(
                         de.getLeftExpression(),
                         de.getOperation(),
@@ -2317,8 +2315,7 @@ public class AsmClassGenerator extends ClassGenerator {
     }
 
     public static int argumentSize(final Expression arguments) {
-        if (arguments instanceof TupleExpression) {
-            TupleExpression tupleExpression = (TupleExpression) arguments;
+        if (arguments instanceof TupleExpression tupleExpression) {
             int size = tupleExpression.getExpressions().size();
             return size;
         }
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
index e089815fa0..e37faad013 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassCompletionVerifier.java
@@ -722,8 +722,7 @@ out:        for (ClassNode sc : superTypes) {
     }
 
     private void checkSuperOrThisOnLHS(final Expression expression) {
-        if (!(expression instanceof VariableExpression)) return;
-        VariableExpression ve = (VariableExpression) expression;
+        if (!(expression instanceof VariableExpression ve)) return;
         if (ve.isThisExpression()) {
             addError("cannot have 'this' as LHS of an assignment", expression);
         } else if (ve.isSuperExpression()) {
@@ -734,21 +733,18 @@ out:        for (ClassNode sc : superTypes) {
     private void checkFinalFieldAccess(final Expression expression) {
         if (!(expression instanceof VariableExpression) && !(expression instanceof PropertyExpression)) return;
         Variable v = null;
-        if (expression instanceof VariableExpression) {
-            VariableExpression ve = (VariableExpression) expression;
+        if (expression instanceof VariableExpression ve) {
             v = ve.getAccessedVariable();
         } else {
             PropertyExpression propExp = ((PropertyExpression) expression);
             Expression objectExpression = propExp.getObjectExpression();
-            if (objectExpression instanceof VariableExpression) {
-                VariableExpression varExp = (VariableExpression) objectExpression;
+            if (objectExpression instanceof VariableExpression varExp) {
                 if (varExp.isThisExpression()) {
                     v = currentClass.getDeclaredField(propExp.getPropertyAsString());
                 }
             }
         }
-        if (v instanceof FieldNode) {
-            FieldNode fn = (FieldNode) v;
+        if (v instanceof FieldNode fn) {
 
             /*
              *  if it is static final but not accessed inside a static constructor, or,
@@ -817,8 +813,7 @@ out:        for (ClassNode sc : superTypes) {
     public void visitMethodCallExpression(final MethodCallExpression mce) {
         super.visitMethodCallExpression(mce);
         Expression aexp = mce.getArguments();
-        if (aexp instanceof TupleExpression) {
-            TupleExpression arguments = (TupleExpression) aexp;
+        if (aexp instanceof TupleExpression arguments) {
             for (Expression e : arguments.getExpressions()) {
                 checkForInvalidDeclaration(e);
             }
@@ -877,8 +872,7 @@ out:        for (ClassNode sc : superTypes) {
 
     private void checkStringExceedingMaximumLength(final ConstantExpression expression) {
         Object value = expression.getValue();
-        if (value instanceof String) {
-            String s = (String) value;
+        if (value instanceof String s) {
             if (s.length() > 65535) {
                 addError("String too long. The given string is " + s.length() + " Unicode code units long, but only a maximum of 65535 is allowed.", expression);
             }
@@ -916,11 +910,9 @@ out:        for (ClassNode sc : superTypes) {
     }
 
     private static String getRefDescriptor(final ASTNode ref) {
-        if (ref instanceof FieldNode) {
-            FieldNode f = (FieldNode) ref;
+        if (ref instanceof FieldNode f) {
             return "the field "+f.getName()+" ";
-        } else if (ref instanceof PropertyNode) {
-            PropertyNode p = (PropertyNode) ref;
+        } else if (ref instanceof PropertyNode p) {
             return "the property "+p.getName()+" ";
         } else if (ref instanceof ConstructorNode) {
             return "the constructor "+ref.getText()+" ";
diff --git a/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java b/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
index 95d82d0c7d..4126342336 100644
--- a/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/EnumVisitor.java
@@ -277,8 +277,7 @@ public class EnumVisitor extends ClassCodeVisitorSupport {
                         continue;
                     }
 
-                    if (exp instanceof ClassExpression && exp.getType() instanceof EnumConstantClassNode) {
-                        InnerClassNode inner = (InnerClassNode) exp.getType();
+                    if (exp instanceof ClassExpression && exp.getType() instanceof EnumConstantClassNode inner) {
                         for (MethodNode methodNode : enumClass.getMethods()) {
                             if (!methodNode.isAbstract()) continue;
                             MethodNode enumConstMethod = inner.getMethod(methodNode.getName(), methodNode.getParameters());
diff --git a/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java b/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
index 880c4ac95d..9b38699ff7 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ExtendedVerifier.java
@@ -405,14 +405,11 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
 
     private static void visitDeprecation(final AnnotatedNode node, final AnnotationNode visited) {
         if (visited.getClassNode().isResolved() && visited.getClassNode().equals(DEPRECATED_TYPE)) {
-            if (node instanceof MethodNode) {
-                MethodNode mn = (MethodNode) node;
+            if (node instanceof MethodNode mn) {
                 mn.setModifiers(mn.getModifiers() | Opcodes.ACC_DEPRECATED);
-            } else if (node instanceof FieldNode) {
-                FieldNode fn = (FieldNode) node;
+            } else if (node instanceof FieldNode fn) {
                 fn.setModifiers(fn.getModifiers() | Opcodes.ACC_DEPRECATED);
-            } else if (node instanceof ClassNode) {
-                ClassNode cn = (ClassNode) node;
+            } else if (node instanceof ClassNode cn) {
                 cn.setModifiers(cn.getModifiers() | Opcodes.ACC_DEPRECATED);
             }
         }
@@ -422,9 +419,8 @@ public class ExtendedVerifier extends ClassCodeVisitorSupport {
     private void visitOverride(final AnnotatedNode node, final AnnotationNode visited) {
         ClassNode annotationType = visited.getClassNode();
         if (annotationType.isResolved() && "java.lang.Override".equals(annotationType.getName())) {
-            if (node instanceof MethodNode && !Boolean.TRUE.equals(node.getNodeMetaData(Verifier.DEFAULT_PARAMETER_GENERATED))) {
+            if (node instanceof MethodNode mNode && !Boolean.TRUE.equals(node.getNodeMetaData(Verifier.DEFAULT_PARAMETER_GENERATED))) {
                 boolean override = false;
-                MethodNode mNode = (MethodNode) node;
                 ClassNode  cNode = mNode.getDeclaringClass();
                 if (mNode.hasDefaultValue()) {
                     List<MethodNode> variants = cNode.getDeclaredMethods(mNode.getName());
diff --git a/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java b/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
index b38bd17ffa..5276c23a00 100644
--- a/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
+++ b/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
@@ -179,8 +179,7 @@ public class FinalVariableAnalyzer extends ClassCodeVisitorSupport {
         if (leftExpression instanceof Variable) {
             boolean uninitialized = isDeclaration && rightExpression instanceof EmptyExpression;
             recordAssignment((Variable) leftExpression, isDeclaration, uninitialized, false, expression);
-        } else if (leftExpression instanceof TupleExpression) {
-            TupleExpression te = (TupleExpression) leftExpression;
+        } else if (leftExpression instanceof TupleExpression te) {
             for (Expression next : te.getExpressions()) {
                 if (next instanceof Variable) {
                     recordAssignment((Variable) next, isDeclaration, false, false, next);
@@ -190,13 +189,11 @@ public class FinalVariableAnalyzer extends ClassCodeVisitorSupport {
     }
 
     private void recordFinalVars(Expression leftExpression) {
-        if (leftExpression instanceof VariableExpression) {
-            VariableExpression var = (VariableExpression) leftExpression;
+        if (leftExpression instanceof VariableExpression var) {
             if (Modifier.isFinal(var.getModifiers())) {
                 declaredFinalVariables.add(var);
             }
-        } else if (leftExpression instanceof TupleExpression) {
-            TupleExpression te = (TupleExpression) leftExpression;
+        } else if (leftExpression instanceof TupleExpression te) {
             for (Expression next : te.getExpressions()) {
                 if (next instanceof Variable) {
                     declaredFinalVariables.add((Variable) next);
@@ -329,8 +326,7 @@ public class FinalVariableAnalyzer extends ClassCodeVisitorSupport {
             for (int j = i; !done; j++) {
                 Statement branch = branches.get(j);
                 Statement block = branch; // default branch
-                if (branch instanceof CaseStatement) {
-                    CaseStatement caseS = (CaseStatement) branch;
+                if (branch instanceof CaseStatement caseS) {
                     block = caseS.getCode();
                     caseS.getExpression().visit(this);
                 }
@@ -444,10 +440,9 @@ public class FinalVariableAnalyzer extends ClassCodeVisitorSupport {
         if (block instanceof ReturnStatement || block instanceof  ThrowStatement) {
             return true;
         }
-        if (!(block instanceof BlockStatement)) {
+        if (!(block instanceof BlockStatement bs)) {
             return false;
         }
-        BlockStatement bs = (BlockStatement) block;
         if (bs.getStatements().isEmpty()) {
             return false;
         }
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
index 4c7ade06d9..5cde1cc739 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassCompletionVisitor.java
@@ -115,9 +115,8 @@ public class InnerClassCompletionVisitor extends InnerClassVisitorHelper {
             addDispatcherMethods(node);
         }
 
-        if (node instanceof InnerClassNode) {
+        if (node instanceof InnerClassNode innerClass) {
             thisField = node.getField("this$0");
-            InnerClassNode innerClass = (InnerClassNode) node;
             if (innerClass.getVariableScope() == null && node.getDeclaredConstructors().isEmpty()) {
                 // add empty default constructor
                 addGeneratedConstructor(innerClass, ACC_PUBLIC, Parameter.EMPTY_ARRAY, null, null);
diff --git a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
index 0281bfc0a9..afd0ba7ac7 100644
--- a/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/InnerClassVisitor.java
@@ -233,9 +233,8 @@ public class InnerClassVisitor extends InnerClassVisitorHelper {
         boolean isStatic = innerClass.isStaticClass();
         if (!isStatic) {
             if (currentMethod != null) {
-                if (currentMethod instanceof ConstructorNode) {
+                if (currentMethod instanceof ConstructorNode ctor) {
                     boolean[] precedesSuperOrThisCall = new boolean[1];
-                    ConstructorNode ctor = (ConstructorNode) currentMethod;
                     GroovyCodeVisitor visitor = new CodeVisitorSupport() {
                         @Override
                         public void visitConstructorCallExpression(ConstructorCallExpression cce) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java b/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
index 2dfa8668a0..4ba9b5e6af 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ReturnAdder.java
@@ -122,15 +122,13 @@ public class ReturnAdder {
             return returnStatement;
         }
 
-        if (statement instanceof SynchronizedStatement) {
-            SynchronizedStatement syncStatement = (SynchronizedStatement) statement;
+        if (statement instanceof SynchronizedStatement syncStatement) {
             Statement code = addReturnsIfNeeded(syncStatement.getCode(), rtype, scope);
             if (doAdd) syncStatement.setCode(code);
             return syncStatement;
         }
 
-        if (statement instanceof IfStatement) {
-            IfStatement ifElseStatement = (IfStatement) statement;
+        if (statement instanceof IfStatement ifElseStatement) {
             Statement ifBlock = addReturnsIfNeeded(ifElseStatement.getIfBlock(), rtype, scope);
             Statement elseBlock = addReturnsIfNeeded(ifElseStatement.getElseBlock(), rtype, scope);
             if (doAdd) {
@@ -140,8 +138,7 @@ public class ReturnAdder {
             return ifElseStatement;
         }
 
-        if (statement instanceof SwitchStatement) {
-            SwitchStatement switchStatement = (SwitchStatement) statement;
+        if (statement instanceof SwitchStatement switchStatement) {
             Statement defaultStatement = switchStatement.getDefaultStatement();
             List<CaseStatement> caseStatements = switchStatement.getCaseStatements();
             for (Iterator<CaseStatement> it = caseStatements.iterator(); it.hasNext(); ) {
@@ -156,8 +153,7 @@ public class ReturnAdder {
             return switchStatement;
         }
 
-        if (statement instanceof TryCatchStatement) {
-            TryCatchStatement tryCatchFinally = (TryCatchStatement) statement;
+        if (statement instanceof TryCatchStatement tryCatchFinally) {
             boolean[] missesReturn = new boolean[1];
             new ReturnAdder(returnStatement -> missesReturn[0] = true)
                     .addReturnsIfNeeded(tryCatchFinally.getFinallyStatement(), rtype, scope);
@@ -177,8 +173,7 @@ public class ReturnAdder {
             return tryCatchFinally;
         }
 
-        if (statement instanceof BlockStatement) {
-            BlockStatement blockStatement = (BlockStatement) statement;
+        if (statement instanceof BlockStatement blockStatement) {
             if (blockStatement.isEmpty()) {
                 ReturnStatement returnStatement = new ReturnStatement(defaultValueX(rtype));
                 returnStatement.copyStatementLabels(blockStatement);
@@ -206,8 +201,7 @@ public class ReturnAdder {
     }
 
     private Statement adjustSwitchCaseCode(final Statement statement, final ClassNode rtype, final VariableScope scope, final boolean lastCase) {
-        if (!statement.isEmpty() && statement instanceof BlockStatement) {
-            BlockStatement block = (BlockStatement) statement;
+        if (!statement.isEmpty() && statement instanceof BlockStatement block) {
             int breakIndex = block.getStatements().size() - 1;
             if (block.getStatements().get(breakIndex) instanceof BreakStatement) {
                 if (doAdd) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
index de8445a686..ddb524d184 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java
@@ -355,8 +355,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
 
         if (expression instanceof VariableExpression) {
             checkForFinal.accept((VariableExpression) expression, expression);
-        } else if (expression instanceof TupleExpression) {
-            TupleExpression tuple = (TupleExpression) expression;
+        } else if (expression instanceof TupleExpression tuple) {
             for (Expression tupleExpression : tuple.getExpressions()) {
                 checkForFinal.accept((VariableExpression) tupleExpression, expression);
             }
@@ -371,8 +370,7 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport {
     private void checkPropertyOnExplicitThis(final PropertyExpression expression) {
         if (!currentScope.isInStaticContext()) return;
         Expression object = expression.getObjectExpression();
-        if (!(object instanceof VariableExpression)) return;
-        VariableExpression ve = (VariableExpression) object;
+        if (!(object instanceof VariableExpression ve)) return;
         if (!"this".equals(ve.getName())) return;
         String name = expression.getPropertyAsString();
         if (name == null || "class".equals(name)) return;
diff --git a/src/main/java/org/codehaus/groovy/classgen/Verifier.java b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
index fe9758d0ab..0fcb41910d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/Verifier.java
+++ b/src/main/java/org/codehaus/groovy/classgen/Verifier.java
@@ -740,8 +740,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                 private boolean isThisObjectExpression(final MethodCallExpression mce) {
                     if (mce.isImplicitThis()) {
                         return true;
-                    } else if (mce.getObjectExpression() instanceof VariableExpression) {
-                        VariableExpression var = (VariableExpression) mce.getObjectExpression();
+                    } else if (mce.getObjectExpression() instanceof VariableExpression var) {
                         return var.isThisExpression() || var.isSuperExpression();
                     } else {
                         return false;
@@ -960,8 +959,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
 
                 @Override
                 public void visitVariableExpression(final VariableExpression e) {
-                    if (e.getAccessedVariable() instanceof Parameter) {
-                        Parameter p = (Parameter) e.getAccessedVariable();
+                    if (e.getAccessedVariable() instanceof Parameter p) {
                         if (!Arrays.asList(params).contains(p) && Arrays.asList(method.getParameters()).contains(p)) { // GROOVY-10602
                             VariableScope blockScope = block.getVariableScope();
                             VariableExpression localVariable = (VariableExpression) blockScope.getDeclaredVariable(p.getName());
@@ -1039,10 +1037,8 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                 if (argument instanceof CastExpression) {
                     argument = ((CastExpression) argument).getExpression();
                 }
-                if (argument instanceof VariableExpression) {
-                    VariableExpression v = (VariableExpression) argument;
-                    if (v.getAccessedVariable() instanceof Parameter) {
-                        Parameter p = (Parameter) v.getAccessedVariable();
+                if (argument instanceof VariableExpression v) {
+                    if (v.getAccessedVariable() instanceof Parameter p) {
                         if (p.getInitialExpression() instanceof ConstantExpression && !Arrays.asList(params).contains(p)){
                             // for simple default value, replace argument "(Type) param" with "(Type) <<param's default>>"
                             it.set(castX(method.getParameters()[it.nextIndex() - 1].getType(), p.getInitialExpression()));
@@ -1053,8 +1049,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
             GroovyCodeVisitor visitor = new CodeVisitorSupport() {
                 @Override
                 public void visitVariableExpression(final VariableExpression e) {
-                    if (e.getAccessedVariable() instanceof Parameter) {
-                        Parameter p = (Parameter) e.getAccessedVariable();
+                    if (e.getAccessedVariable() instanceof Parameter p) {
                         if (p.hasInitialExpression() && !Arrays.asList(params).contains(p)) {
                             String error = String.format(
                                     "The generated constructor \"%s(%s)\" references parameter '%s' which has been replaced by a default value expression.",
@@ -1300,8 +1295,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
 
             Statement stmt = it.next();
             if (stmt instanceof ExpressionStatement
-                    && ((ExpressionStatement) stmt).getExpression() instanceof BinaryExpression) {
-                BinaryExpression expr = (BinaryExpression) ((ExpressionStatement) stmt).getExpression();
+                    && ((ExpressionStatement) stmt).getExpression() instanceof BinaryExpression expr) {
 
                 if (expr.getOperation().getType() == Types.ASSIGN
                         && expr.getLeftExpression() instanceof FieldExpression
@@ -1334,8 +1328,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
                 // initialized first so that code dependent on them does not see their values as empty
                 Expression initialValueExpression = fieldNode.getInitialValueExpression();
                 Expression transformed = transformInlineConstants(initialValueExpression, fieldNode.getType());
-                if (transformed instanceof ConstantExpression) {
-                    ConstantExpression cexp = (ConstantExpression) transformed;
+                if (transformed instanceof ConstantExpression cexp) {
                     cexp = transformToPrimitiveConstantIfPossible(cexp);
                     if (fieldNode.isFinal() && ClassHelper.isStaticConstantInitializerType(cexp.getType()) && cexp.getType().equals(fieldNode.getType())) {
                         fieldNode.setInitialValueExpression(transformed);
@@ -1416,8 +1409,7 @@ public class Verifier implements GroovyClassVisitor, Opcodes {
     }
 
     public static long getTimestamp(final Class<?> clazz) {
-        if (clazz.getClassLoader() instanceof GroovyClassLoader.InnerLoader) {
-            GroovyClassLoader.InnerLoader innerLoader = (GroovyClassLoader.InnerLoader) clazz.getClassLoader();
+        if (clazz.getClassLoader() instanceof GroovyClassLoader.InnerLoader innerLoader) {
             return innerLoader.getTimeStamp();
         }
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
index c0d8ec420b..211998881e 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/AssertionWriter.java
@@ -206,15 +206,12 @@ public class AssertionWriter {
     }
 
     private static void addVariableNames(final Expression expression, final List<String> list) {
-        if (expression instanceof BooleanExpression) {
-            BooleanExpression boolExp = (BooleanExpression) expression;
+        if (expression instanceof BooleanExpression boolExp) {
             addVariableNames(boolExp.getExpression(), list);
-        } else if (expression instanceof BinaryExpression) {
-            BinaryExpression binExp = (BinaryExpression) expression;
+        } else if (expression instanceof BinaryExpression binExp) {
             addVariableNames(binExp.getLeftExpression(), list);
             addVariableNames(binExp.getRightExpression(), list);
-        } else if (expression instanceof VariableExpression) {
-            VariableExpression varExp = (VariableExpression) expression;
+        } else if (expression instanceof VariableExpression varExp) {
             list.add(varExp.getName());
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
index 3b695c59a7..e665763dec 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionHelper.java
@@ -482,8 +482,7 @@ public class BinaryExpressionHelper {
         Expression rhsValueLoader = new VariableSlotLoader(rhsType, rhsValueId, operandStack);
 
         // subscript assignment
-        if (leftExpression instanceof BinaryExpression) {
-            var leftBinExpr = (BinaryExpression) leftExpression;
+        if (leftExpression instanceof BinaryExpression leftBinExpr) {
             if (leftBinExpr.getOperation().getType() == LEFT_SQUARE_BRACKET) {
                 assignToArray(expression, leftBinExpr.getLeftExpression(), leftBinExpr.getRightExpression(), rhsValueLoader, leftBinExpr.isSafe());
             }
@@ -740,8 +739,7 @@ public class BinaryExpressionHelper {
 
     protected void evaluateBinaryExpressionWithAssignment(final String method, final BinaryExpression expression) {
         Expression leftExpression = expression.getLeftExpression();
-        if (leftExpression instanceof BinaryExpression) {
-            BinaryExpression bexp = (BinaryExpression) leftExpression;
+        if (leftExpression instanceof BinaryExpression bexp) {
             if (bexp.getOperation().getType() == LEFT_SQUARE_BRACKET) {
                 evaluateArrayAssignmentWithOperator(method, expression, bexp);
                 return;
@@ -877,8 +875,7 @@ public class BinaryExpressionHelper {
     private VariableSlotLoader loadWithSubscript(final Expression expression) {
         AsmClassGenerator acg = controller.getAcg();
         // if we have a BinaryExpression, check if it is with subscription
-        if (expression instanceof BinaryExpression) {
-            BinaryExpression bexp = (BinaryExpression) expression;
+        if (expression instanceof BinaryExpression bexp) {
             if (bexp.getOperation().getType() == LEFT_SQUARE_BRACKET) {
                 // right expression is the subscript expression
                 // we store the result of the subscription on the stack
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionMultiTypeDispatcher.java
index f7a9c3906f..9a98f459be 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionMultiTypeDispatcher.java
@@ -239,8 +239,7 @@ public class BinaryExpressionMultiTypeDispatcher extends BinaryExpressionHelper
 
     private static boolean isAssignmentToArray(final BinaryExpression binExp) {
         Expression leftExpression = binExp.getLeftExpression();
-        if (!(leftExpression instanceof BinaryExpression)) return false;
-        BinaryExpression leftBinExpr = (BinaryExpression) leftExpression;
+        if (!(leftExpression instanceof BinaryExpression leftBinExpr)) return false;
         return leftBinExpr.getOperation().getType() == LEFT_SQUARE_BRACKET;
     }
 
@@ -335,8 +334,7 @@ public class BinaryExpressionMultiTypeDispatcher extends BinaryExpressionHelper
 
     private boolean doAssignmentToLocalVariable(final String method, final BinaryExpression binExp) {
         Expression left = binExp.getLeftExpression();
-        if (left instanceof VariableExpression) {
-            VariableExpression ve = (VariableExpression) left;
+        if (left instanceof VariableExpression ve) {
             Variable v = ve.getAccessedVariable();
             if (v instanceof DynamicVariable) return false;
             if (v instanceof PropertyExpression) return false;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
index e46ba8b1ec..7b174f8209 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CallSiteWriter.java
@@ -106,8 +106,7 @@ public class CallSiteWriter {
     public CallSiteWriter(WriterController wc) {
         this.controller = wc;
         ClassNode node = controller.getClassNode();
-        if(node instanceof InterfaceHelperClassNode) {
-            InterfaceHelperClassNode ihcn = (InterfaceHelperClassNode) node;
+        if(node instanceof InterfaceHelperClassNode ihcn) {
             callSites.addAll(ihcn.getCallSites());
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
index 0c877f5c8d..6dc4eb0104 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/ClosureWriter.java
@@ -180,8 +180,7 @@ public class ClosureWriter {
     private static boolean classNodeUsesReferences(final ClassNode classNode) {
         boolean ret = classNode.getSuperClass().equals(ClassHelper.CLOSURE_TYPE);
         if (ret) return ret;
-        if (classNode instanceof InnerClassNode) {
-            InnerClassNode inner = (InnerClassNode) classNode;
+        if (classNode instanceof InnerClassNode inner) {
             return inner.isAnonymous();
         }
         return false;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
index 8e576c4e2e..f928abbc49 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/InvocationWriter.java
@@ -257,8 +257,7 @@ public class InvocationWriter {
     }
 
     private boolean isClassWithSuper(final Expression exp) {
-        if (exp instanceof PropertyExpression) {
-            PropertyExpression pexp = (PropertyExpression) exp;
+        if (exp instanceof PropertyExpression pexp) {
             return pexp.getObjectExpression() instanceof ClassExpression && "super".equals(pexp.getPropertyAsString());
         }
         return false;
@@ -430,8 +429,7 @@ public class InvocationWriter {
      * if Class.forName(x) is recognized, make a direct method call
      */
     protected boolean makeClassForNameCall(final Expression origin, final Expression receiver, final Expression message, final Expression arguments) {
-        if (!(receiver instanceof ClassExpression)) return false;
-        ClassExpression ce = (ClassExpression) receiver;
+        if (!(receiver instanceof ClassExpression ce)) return false;
         if (!ClassHelper.CLASS_Type.equals(ce.getType())) return false;
         String msg = getMethodName(message);
         if (!"forName".equals(msg)) return false;
@@ -452,8 +450,7 @@ public class InvocationWriter {
         ArgumentListExpression ae;
         if (arguments instanceof ArgumentListExpression) {
             ae = (ArgumentListExpression) arguments;
-        } else if (arguments instanceof TupleExpression) {
-            TupleExpression te = (TupleExpression) arguments;
+        } else if (arguments instanceof TupleExpression te) {
             ae = new ArgumentListExpression(te.getExpressions());
         } else {
             ae = new ArgumentListExpression();
@@ -464,8 +461,7 @@ public class InvocationWriter {
 
     protected String getMethodName(final Expression message) {
         String methodName = null;
-        if (message instanceof CastExpression) {
-            CastExpression msg = (CastExpression) message;
+        if (message instanceof CastExpression msg) {
             if (isStringType(msg.getType())) {
                 final Expression methodExpr = msg.getExpression();
                 if (methodExpr instanceof ConstantExpression) {
@@ -474,8 +470,7 @@ public class InvocationWriter {
             }
         }
 
-        if (methodName == null && message instanceof ConstantExpression) {
-            ConstantExpression constantExpression = (ConstantExpression) message;
+        if (methodName == null && message instanceof ConstantExpression constantExpression) {
             methodName = constantExpression.getText();
         }
         return methodName;
@@ -580,8 +575,7 @@ public class InvocationWriter {
 
     protected void writeNormalConstructorCall(final ConstructorCallExpression call) {
         Expression arguments = call.getArguments();
-        if (arguments instanceof TupleExpression) {
-            TupleExpression tupleExpression = (TupleExpression) arguments;
+        if (arguments instanceof TupleExpression tupleExpression) {
             int size = tupleExpression.getExpressions().size();
             if (size == 0) {
                 arguments = MethodCallExpression.NO_ARGUMENTS;
@@ -610,8 +604,7 @@ public class InvocationWriter {
         int i = 0; Parameter[] params = ctor.getParameters();
         for (Expression arg : args) {
             Parameter p = params[Math.min(i++, params.length)];
-            if (arg instanceof VariableExpression) {
-                VariableExpression var = (VariableExpression) arg;
+            if (arg instanceof VariableExpression var) {
                 loadVariableWithReference(var);
             } else {
                 arg.visit(controller.getAcg());
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
index addc0d16db..a266c91a3e 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/MopWriter.java
@@ -71,10 +71,9 @@ public class MopWriter {
 
         @Override
         public boolean equals(final Object obj) {
-            if (!(obj instanceof MopKey)) {
+            if (!(obj instanceof MopKey other)) {
                 return false;
             }
-            MopKey other = (MopKey) obj;
             return other.name.equals(name) && ParameterUtils.parametersEqual(other.params, params);
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java b/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
index aee1e7c598..4e90f99b0b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/OperandStack.java
@@ -574,8 +574,7 @@ public class OperandStack {
     }
 
     public void pushDynamicName(final Expression name) {
-        if (name instanceof ConstantExpression) {
-            ConstantExpression ce = (ConstantExpression) name;
+        if (name instanceof ConstantExpression ce) {
             Object value = ce.getValue();
             if (value instanceof String) {
                 pushConstant(ce);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
index 2b295d98a4..c2a60dafb5 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/OptimizingStatementWriter.java
@@ -369,17 +369,14 @@ public class OptimizingStatementWriter extends StatementWriter {
 
     private boolean writeDeclarationExtraction(final Statement statement) {
         Expression ex = null;
-        if (statement instanceof ReturnStatement) {
-            ReturnStatement rs = (ReturnStatement) statement;
+        if (statement instanceof ReturnStatement rs) {
             ex = rs.getExpression();
-        } else if (statement instanceof ExpressionStatement) {
-            ExpressionStatement es = (ExpressionStatement) statement;
+        } else if (statement instanceof ExpressionStatement es) {
             ex = es.getExpression();
         } else {
             throw new GroovyBugError("unknown statement type :" + statement.getClass());
         }
-        if (!(ex instanceof DeclarationExpression)) return true;
-        DeclarationExpression declaration = (DeclarationExpression) ex;
+        if (!(ex instanceof DeclarationExpression declaration)) return true;
         ex = declaration.getLeftExpression();
         if (ex instanceof TupleExpression) return false;
 
@@ -398,11 +395,9 @@ public class OptimizingStatementWriter extends StatementWriter {
         assignment.setSourcePosition(declaration);
         assignment.copyNodeMetaData(declaration);
         // replace statement code
-        if (statement instanceof ReturnStatement) {
-            ReturnStatement rs = (ReturnStatement) statement;
+        if (statement instanceof ReturnStatement rs) {
             rs.setExpression(assignment);
-        } else if (statement instanceof ExpressionStatement) {
-            ExpressionStatement es = (ExpressionStatement) statement;
+        } else if (statement instanceof ExpressionStatement es) {
             es.setExpression(assignment);
         } else {
             throw new GroovyBugError("unknown statement type :" + statement.getClass());
@@ -862,8 +857,7 @@ public class OptimizingStatementWriter extends StatementWriter {
          * @returns null if the optimization cannot be applied, otherwise it will return the new target type
          */
         private ClassNode optimizeDivWithIntOrLongTarget(final Expression rhs, final ClassNode assignmentTartgetType) {
-            if (!(rhs instanceof BinaryExpression)) return null;
-            BinaryExpression binExp = (BinaryExpression) rhs;
+            if (!(rhs instanceof BinaryExpression binExp)) return null;
             int op = binExp.getOperation().getType();
             if (op != Types.DIVIDE && op != Types.DIVIDE_EQUAL) return null;
 
@@ -900,8 +894,7 @@ public class OptimizingStatementWriter extends StatementWriter {
 
             // find method call target
             Parameter[] paraTypes = null;
-            if (callArgs instanceof ArgumentListExpression) {
-                ArgumentListExpression args = (ArgumentListExpression) callArgs;
+            if (callArgs instanceof ArgumentListExpression args) {
                 int size = args.getExpressions().size();
                 paraTypes = new Parameter[size];
                 int i = 0;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
index 6cf35b31b9..4168003d2d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
@@ -45,8 +45,7 @@ public class StatementMetaTypeChooser implements TypeChooser {
         if (meta != null) type = meta.type;
         if (type != null) return type;
 
-        if (exp instanceof VariableExpression) {
-            VariableExpression vexp = (VariableExpression) exp;
+        if (exp instanceof VariableExpression vexp) {
             if (vexp.isClosureSharedVariable()) return vexp.getType();
             if (vexp.isSuperExpression()) return current.getSuperClass();
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
index 0e8245ac5c..059f20bfc5 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
@@ -177,8 +177,7 @@ public class InvokeDynamicWriter extends InvocationWriter {
     }
 
     private Expression correctReceiverForInterfaceCall(final Expression receiver) {
-        if (receiver instanceof PropertyExpression) {
-            PropertyExpression pexp = (PropertyExpression) receiver;
+        if (receiver instanceof PropertyExpression pexp) {
             if (pexp.getObjectExpression() instanceof ClassExpression
                      && pexp.getProperty() instanceof ConstantExpression) {
                 String name = pexp.getProperty().getText();
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
index 914ec67217..087693aee9 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticInvocationWriter.java
@@ -260,8 +260,7 @@ public class StaticInvocationWriter extends InvocationWriter {
         ClassNode enclosingClass = controller.getClassNode();
         ClassNode declaringClass = target.getDeclaringClass();
 
-        if (target instanceof ExtensionMethodNode) {
-            ExtensionMethodNode emn = (ExtensionMethodNode) target;
+        if (target instanceof ExtensionMethodNode emn) {
             MethodVisitor mv = controller.getMethodVisitor();
             MethodNode mn = emn.getExtensionMethodNode();
             Parameter[] parameters = mn.getParameters();
@@ -346,8 +345,7 @@ public class StaticInvocationWriter extends InvocationWriter {
     }
 
     private boolean isClassWithSuper(Expression receiver) {
-        if (receiver instanceof PropertyExpression) {
-            PropertyExpression pexp = (PropertyExpression) receiver;
+        if (receiver instanceof PropertyExpression pexp) {
             return pexp.getObjectExpression() instanceof ClassExpression && "super".equals(pexp.getPropertyAsString());
         }
         return false;
@@ -524,8 +522,7 @@ public class StaticInvocationWriter extends InvocationWriter {
             varScope.putDeclaredVariable(element);
 
             Expression nextValue;
-            if (origin instanceof MethodCallExpression) {
-                MethodCallExpression oldMCE = (MethodCallExpression) origin;
+            if (origin instanceof MethodCallExpression oldMCE) {
                 MethodCallExpression newMCE = callX(
                         varX(element),
                         oldMCE.getMethod(),
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 0bf878ed4f..e139b7331b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -141,9 +141,8 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres
     @Override
     protected void evaluateBinaryExpressionWithAssignment(final String method, final BinaryExpression expression) {
         Expression leftExpression = expression.getLeftExpression();
-        if (leftExpression instanceof PropertyExpression
+        if (leftExpression instanceof PropertyExpression pexp
                 && !(leftExpression instanceof AttributeExpression)) {
-            PropertyExpression pexp = (PropertyExpression) leftExpression;
 
             BinaryExpression expressionWithoutAssignment = binX(
                     leftExpression,
@@ -174,9 +173,8 @@ public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpres
     @Override
     public void evaluateEqual(final BinaryExpression expression, final boolean defineVariable) {
         Expression leftExpression = expression.getLeftExpression();
-        if (leftExpression instanceof PropertyExpression
+        if (leftExpression instanceof PropertyExpression pexp
                 && !(leftExpression instanceof AttributeExpression)) {
-            PropertyExpression pexp = (PropertyExpression) leftExpression;
             if (!defineVariable && makeSetProperty(
                     pexp.getObjectExpression(),
                     pexp.getProperty(),
diff --git a/src/main/java/org/codehaus/groovy/control/AnnotationConstantsVisitor.java b/src/main/java/org/codehaus/groovy/control/AnnotationConstantsVisitor.java
index bb1760ac67..285f551284 100644
--- a/src/main/java/org/codehaus/groovy/control/AnnotationConstantsVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/AnnotationConstantsVisitor.java
@@ -51,11 +51,9 @@ public class AnnotationConstantsVisitor extends ClassCodeVisitorSupport {
     protected void visitConstructorOrMethod(final MethodNode node, final boolean isConstructor) {
         if (annotationDef) {
             Statement statement = node.getFirstStatement();
-            if (statement instanceof ReturnStatement) {
-                ReturnStatement rs = (ReturnStatement) statement;
+            if (statement instanceof ReturnStatement rs) {
                 rs.setExpression(transformInlineConstants(rs.getExpression(), node.getReturnType()));
-            } else if (statement instanceof ExpressionStatement) {
-                ExpressionStatement es = (ExpressionStatement) statement;
+            } else if (statement instanceof ExpressionStatement es) {
                 es.setExpression(transformInlineConstants(es.getExpression(), node.getReturnType()));
             }
         }
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index 471c79eb05..7912e5c18a 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -943,8 +943,7 @@ public class CompilationUnit extends ProcessingUnit {
                     if (errorCollector != null) {
                         unit.getErrorCollector().addCollectorContents(errorCollector);
                     } else {
-                        if (e instanceof GroovyRuntimeException) {
-                            GroovyRuntimeException gre = (GroovyRuntimeException) e;
+                        if (e instanceof GroovyRuntimeException gre) {
                             context = Optional.ofNullable(gre.getModule()).map(ModuleNode::getContext).orElse(context);
                         }
                         if (context != null) {
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 8e3a08716f..f223cb6521 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -512,11 +512,10 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         // a static inner class, because at least one dot is
         // required for this. Example: foo.bar -> foo$bar
         if (!(type instanceof LowerCaseClass || type instanceof ConstructedNestedClass)) {
-            if (type instanceof ConstructedClassWithPackage) {
+            if (type instanceof ConstructedClassWithPackage tmp) {
                 // we replace '.' only in the className part
                 // with '$' to find an inner class. The case that
                 // the package is really a class is handled elsewhere
-                ConstructedClassWithPackage tmp = (ConstructedClassWithPackage) type;
                 String savedName = tmp.className;
                 tmp.className = replaceLastPointWithDollar(savedName);
                 if (resolve(tmp, false, true, true)) {
@@ -833,8 +832,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         StringBuilder name = new StringBuilder(32);
         // this loop builds a name from right to left each name part separated by "."
         for (Expression expr = pe; expr != null && name != null; expr = ((PropertyExpression) expr).getObjectExpression()) {
-            if (expr instanceof VariableExpression) {
-                VariableExpression ve = (VariableExpression) expr;
+            if (expr instanceof VariableExpression ve) {
                 // stop at super and this
                 if (ve.isSuperExpression() || ve.isThisExpression()) {
                     return null;
@@ -1069,8 +1067,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
 
     protected Expression transformBinaryExpression(final BinaryExpression be) {
         Expression left = transform(be.getLeftExpression());
-        if (be.getOperation().isA(Types.ASSIGNMENT_OPERATOR) && left instanceof ClassExpression) {
-            ClassExpression ce = (ClassExpression) left;
+        if (be.getOperation().isA(Types.ASSIGNMENT_OPERATOR) && left instanceof ClassExpression ce) {
             String error = "you tried to assign a value to the class '" + ce.getType().getName() + "'";
             if (ce.getType().isScript()) {
                 error += ". Do you have a script with this name?";
@@ -1080,8 +1077,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         }
         if (left instanceof ClassExpression && be.getOperation().isOneOf(
                 new int[]{Types.ARRAY_EXPRESSION, Types.SYNTH_LIST, Types.SYNTH_MAP})) {
-            if (be.getRightExpression() instanceof ListExpression) {
-                ListExpression list = (ListExpression) be.getRightExpression();
+            if (be.getRightExpression() instanceof ListExpression list) {
                 if (list.getExpressions().isEmpty()) {
                     return new ClassExpression(left.getType().makeArray());
                 } else {
@@ -1103,9 +1099,8 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
                         return CastExpression.asExpression(left.getType(), me);
                     }
                 }
-            } else if (be.getRightExpression() instanceof SpreadMapExpression) {
+            } else if (be.getRightExpression() instanceof SpreadMapExpression mapExpression) {
                 // we have C[*:map] -> should become (C) map
-                SpreadMapExpression mapExpression = (SpreadMapExpression) be.getRightExpression();
                 Expression right = transform(mapExpression.getExpression());
                 return CastExpression.asExpression(left.getType(), right);
             }
@@ -1181,8 +1176,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
         checkingVariableTypeInDeclaration = true;
         Expression left = transform(oldLeft);
         checkingVariableTypeInDeclaration = false;
-        if (left instanceof ClassExpression) {
-            ClassExpression ce = (ClassExpression) left;
+        if (left instanceof ClassExpression ce) {
             addError("you tried to assign a value to the class " + ce.getType().getName(), oldLeft);
             return de;
         }
@@ -1236,13 +1230,11 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
     }
 
     private void checkAnnotationMemberValue(final Expression value) {
-        if (value instanceof PropertyExpression) {
-            PropertyExpression pe = (PropertyExpression) value;
+        if (value instanceof PropertyExpression pe) {
             if (!(pe.getObjectExpression() instanceof ClassExpression)) {
                 addError("unable to find class '" + pe.getText() + "' for annotation attribute constant", pe.getObjectExpression());
             }
-        } else if (value instanceof ListExpression) {
-            ListExpression le = (ListExpression) value;
+        } else if (value instanceof ListExpression le) {
             for (Expression e : le.getExpressions()) {
                 checkAnnotationMemberValue(e);
             }
diff --git a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
index dc4dd8e96f..f167f95690 100644
--- a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
@@ -156,10 +156,9 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
             }
             if (inAnnotation && exp instanceof AnnotationConstantExpression) {
                 ConstantExpression ce = (ConstantExpression) result;
-                if (ce.getValue() instanceof AnnotationNode) {
+                if (ce.getValue() instanceof AnnotationNode an) {
                     // replicate a little bit of AnnotationVisitor here
                     // because we can't wait until later to do this
-                    AnnotationNode an = (AnnotationNode) ce.getValue();
                     Map<String, Expression> attributes = an.getMembers();
                     for (Map.Entry<String, Expression> entry : attributes.entrySet()) {
                         Expression attrExpr = transform(entry.getValue());
@@ -208,8 +207,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
             inLeftExpression = true;
             left = transform(be.getLeftExpression());
             inLeftExpression = oldInLeftExpression;
-            if (left instanceof StaticMethodCallExpression) {
-                StaticMethodCallExpression smce = (StaticMethodCallExpression) left;
+            if (left instanceof StaticMethodCallExpression smce) {
                 StaticMethodCallExpression result = new StaticMethodCallExpression(smce.getOwnerType(), smce.getMethod(), right);
                 result.copyNodeMetaData(smce);
                 setSourcePosition(result, be);
@@ -233,9 +231,8 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
                 }
                 return result;
             }
-        } else if (v instanceof FieldNode) {
+        } else if (v instanceof FieldNode fn) {
             if (inSpecialConstructorCall) { // GROOVY-8819
-                FieldNode fn = (FieldNode) v;
                 ClassNode declaringClass = fn.getDeclaringClass();
                 if (fn.isStatic() && currentClass.isDerivedFrom(declaringClass)) {
                     Expression result = new PropertyExpression(new ClassExpression(declaringClass), v.getName());
@@ -323,12 +320,10 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
     protected Expression transformConstructorCallExpression(ConstructorCallExpression cce) {
         inSpecialConstructorCall = cce.isSpecialCall();
         Expression expression = cce.getArguments();
-        if (expression instanceof TupleExpression) {
-            TupleExpression tuple = (TupleExpression) expression;
+        if (expression instanceof TupleExpression tuple) {
             if (tuple.getExpressions().size() == 1) {
                 expression = tuple.getExpression(0);
-                if (expression instanceof NamedArgumentListExpression) {
-                    NamedArgumentListExpression namedArgs = (NamedArgumentListExpression) expression;
+                if (expression instanceof NamedArgumentListExpression namedArgs) {
                     List<MapEntryExpression> entryExpressions = namedArgs.getMapEntryExpressions();
                     entryExpressions.replaceAll(me -> (MapEntryExpression) transformMapEntryExpression(me, cce.getType()));
                 }
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
index 811cdf17cb..7133df5839 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
@@ -1100,19 +1100,16 @@ public class SecureASTCustomizer extends CompilationCustomizer {
                 try {
                     if (expression instanceof ConstructorCallExpression) {
                         assertImportIsAllowed(expression.getType().getName());
-                    } else if (expression instanceof MethodCallExpression) {
-                        MethodCallExpression expr = (MethodCallExpression) expression;
+                    } else if (expression instanceof MethodCallExpression expr) {
                         ClassNode objectExpressionType = expr.getObjectExpression().getType();
                         final String typename = getExpressionType(objectExpressionType).getName();
                         assertImportIsAllowed(typename);
                         assertStaticImportIsAllowed(expr.getMethodAsString(), typename);
-                    } else if (expression instanceof StaticMethodCallExpression) {
-                        StaticMethodCallExpression expr = (StaticMethodCallExpression) expression;
+                    } else if (expression instanceof StaticMethodCallExpression expr) {
                         final String typename = expr.getOwnerType().getName();
                         assertImportIsAllowed(typename);
                         assertStaticImportIsAllowed(expr.getMethod(), typename);
-                    } else if (expression instanceof MethodPointerExpression) {
-                        MethodPointerExpression expr = (MethodPointerExpression) expression;
+                    } else if (expression instanceof MethodPointerExpression expr) {
                         final String typename = expr.getType().getName();
                         assertImportIsAllowed(typename);
                         assertStaticImportIsAllowed(expr.getText(), typename);
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
index 37124423b3..52eefb283e 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
@@ -54,8 +54,7 @@ public class SourceAwareCustomizer extends DelegatingCustomizer {
     public void call(final SourceUnit source, final GeneratorContext context, final ClassNode classNode) throws CompilationFailedException {
         String fileName = source.getName();
         ReaderSource reader = source.getSource();
-        if (reader instanceof FileReaderSource) {
-            FileReaderSource file = (FileReaderSource) reader;
+        if (reader instanceof FileReaderSource file) {
             fileName = file.getFile().getName();
         }
         if (acceptSource(source) && acceptClass(classNode) && accept(fileName)) {
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
index 4de7ded47c..556f2e370b 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
@@ -69,8 +69,7 @@ public class InlinedASTCustomizerFactory extends AbstractFactory implements Post
 
     @Override
     public Object postCompleteNode(final FactoryBuilderSupport factory, final Object parent, final Object node) {
-        if (node instanceof Map) {
-            Map map = (Map) node;
+        if (node instanceof Map map) {
             ProxyGeneratorAdapter adapter = new ProxyGeneratorAdapter(
                     map,
                     map.containsKey("superClass")?(Class)map.get("superClass"):CompilationCustomizer.class,
diff --git a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
index c4ff96b99e..997c0142fb 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
@@ -48,8 +48,7 @@ public class LocatedMessage extends SimpleMessage {
 
     @Override
     public void write(PrintWriter writer, Janitor janitor) {
-        if (owner instanceof SourceUnit) {
-            SourceUnit source = (SourceUnit) owner;
+        if (owner instanceof SourceUnit source) {
 
             String name = source.getName();
             int line = context.getStartLine();
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 2dbe6cf8a3..5153e6e739 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -388,11 +388,9 @@ public class CachedClass {
     }
 
     private void addSubclassExpandos(List<MetaMethod> arr, MetaClass mc) {
-        if (mc instanceof ExpandoMetaClass) {
-            ExpandoMetaClass emc = (ExpandoMetaClass) mc;
+        if (mc instanceof ExpandoMetaClass emc) {
             for (Object mm : emc.getExpandoSubclassMethods()) {
-                if (mm instanceof MetaMethod) {
-                    MetaMethod method = (MetaMethod) mm;
+                if (mm instanceof MetaMethod method) {
                     if (method.getDeclaringClass() == this)
                       arr.add(method);
                 }
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
index af291f48f3..a80294f845 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
@@ -37,8 +37,7 @@ public class ArrayCachedClass extends CachedClass {
         Class paramComponent = getTheClass().getComponentType();
         if (paramComponent.isPrimitive()) {
             argument = DefaultTypeTransformation.convertToPrimitiveArray(argument, paramComponent);
-        } else if (paramComponent == String.class && argument instanceof GString[]) {
-            GString[] strings = (GString[]) argument;
+        } else if (paramComponent == String.class && argument instanceof GString[] strings) {
             String[] ret = new String[strings.length];
             for (int i = 0; i < strings.length; i++) {
                 ret[i] = strings[i].toString();
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 1ab3a5fa6c..b9b2e348ac 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -1399,8 +1399,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
         }
         catch (GroovyCastException e) {
             MetaClass mc = InvokerHelper.getMetaClass(obj);
-            if (mc instanceof ExpandoMetaClass) {
-                ExpandoMetaClass emc = (ExpandoMetaClass) mc;
+            if (mc instanceof ExpandoMetaClass emc) {
                 Object mixedIn = emc.castToMixedType(obj, type);
                 if (mixedIn != null)
                     return (T) mixedIn;
@@ -2912,8 +2911,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
 
     @SuppressWarnings({"rawtypes"})
     private static Map.Entry getEntry(Object entrySpec) {
-        if (entrySpec instanceof List) {
-            var list = (List) entrySpec;
+        if (entrySpec instanceof List list) {
             // def (key, value) == list
             Object key = list.isEmpty() ? null : list.get(0);
             Object value = list.size() <= 1 ? null : list.get(1);
@@ -3292,8 +3290,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
     @SuppressWarnings("unchecked")
     public static <C extends Collection> C collectNested(Iterable self, C collector, Closure transform) {
         for (Object element : self) {
-            if (element instanceof Collection) {
-                Collection c = (Collection) element;
+            if (element instanceof Collection c) {
                 collector.add(collectNested(c, createSimilarCollection(collector, c.size()), transform));
             } else {
                 collector.add(transform.call(element));
@@ -4013,9 +4010,8 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.0
      */
     public static void downto(BigInteger self, Number to, @ClosureParams(FirstParam.class) Closure closure) {
-        if (to instanceof BigDecimal) {
+        if (to instanceof BigDecimal to1) {
             final BigDecimal one = BigDecimal.valueOf(10, 1);  // That's what you get for "1.0".
-            final BigDecimal to1 = (BigDecimal) to;
             final BigDecimal selfD = new BigDecimal(self);
             if (selfD.compareTo(to1) >= 0) {
                 for (BigDecimal i = selfD; i.compareTo(to1) >= 0; i = i.subtract(one)) {
@@ -4026,9 +4022,8 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
                         MessageFormat.format(
                                 "The argument ({0}) to downto() cannot be greater than the value ({1}) it''s called on.",
                                 to, self));
-        } else if (to instanceof BigInteger) {
+        } else if (to instanceof BigInteger to1) {
             final BigInteger one = BigInteger.valueOf(1);
-            final BigInteger to1 = (BigInteger) to;
             if (self.compareTo(to1) >= 0) {
                 for (BigInteger i = self; i.compareTo(to1) >= 0; i = i.subtract(one)) {
                     closure.call(i);
@@ -4070,8 +4065,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static void downto(BigDecimal self, Number to, @ClosureParams(FirstParam.class) Closure closure) {
         final BigDecimal one = BigDecimal.valueOf(10, 1);  // Quick way to get "1.0".
-        if (to instanceof BigDecimal) {
-            BigDecimal to1 = (BigDecimal) to;
+        if (to instanceof BigDecimal to1) {
             if (self.compareTo(to1) >= 0) {
                 for (BigDecimal i = self; i.compareTo(to1) >= 0; i = i.subtract(one)) {
                     closure.call(i);
@@ -6703,8 +6697,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
                         continue outer;
                     } else {
                         Object flattened = next;
-                        if (flattened instanceof Optional && flattenOptionals) {
-                            Optional<?> opt = (Optional<?>) flattened;
+                        if (flattened instanceof Optional<?> opt && flattenOptionals) {
                             if (opt.isPresent()) {
                                 flattened = opt.get();
                             } else {
@@ -6713,8 +6706,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
                         }
                         if (flattenUsing != null) {
                             Object transformed = flattenUsing.call(new Object[]{flattened});
-                            if (transformed instanceof Optional && flattenOptionals) {
-                                Optional<?> opt = (Optional<?>) transformed;
+                            if (transformed instanceof Optional<?> opt && flattenOptionals) {
                                 if (opt.isPresent()) {
                                     transformed = opt.get();
                                 } else {
@@ -6723,8 +6715,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
                             }
                             // handle some simple recursive cases to avoid infinite loop
                             boolean returnedSelf = (flattened == transformed);
-                            if (!returnedSelf && transformed instanceof Collection) {
-                                Collection<?> c = (Collection<?>) transformed;
+                            if (!returnedSelf && transformed instanceof Collection<?> c) {
                                 if (!c.isEmpty() && head(c) == transformed) {
                                     returnedSelf = true;
                                 }
@@ -8373,8 +8364,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
             throw new NoSuchElementException("Cannot access init() for an empty Iterable");
         }
         Collection<T> result;
-        if (self instanceof Collection) {
-            Collection<T> selfCol = (Collection<T>) self;
+        if (self instanceof Collection<T> selfCol) {
             result = createSimilarCollection(selfCol, selfCol.size() - 1);
         } else {
             result = new ArrayList<>();
@@ -9449,8 +9439,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     @SuppressWarnings("unchecked")
     public static boolean isCase(Class caseValue, Object switchValue) {
-        if (switchValue instanceof Class) {
-            Class val = (Class) switchValue;
+        if (switchValue instanceof Class val) {
             return caseValue.isAssignableFrom(val);
         }
         return caseValue.isInstance(switchValue);
@@ -12403,8 +12392,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
         RangeInfo info = subListBorders(self.size(), range);
         List sublist = self.subList(info.from, info.to);
         sublist.clear();
-        if (value instanceof Collection) {
-            Collection col = (Collection) value;
+        if (value instanceof Collection col) {
             if (col.isEmpty()) return;
             sublist.addAll(col);
         } else {
@@ -17273,10 +17261,9 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.0
      */
     public static void upto(BigInteger self, Number to, @ClosureParams(FirstParam.class) Closure closure) {
-        if (to instanceof BigDecimal) {
+        if (to instanceof BigDecimal to1) {
             final BigDecimal one = BigDecimal.valueOf(10, 1);
             BigDecimal self1 = new BigDecimal(self);
-            BigDecimal to1 = (BigDecimal) to;
             if (self1.compareTo(to1) <= 0) {
                 for (BigDecimal i = self1; i.compareTo(to1) <= 0; i = i.add(one)) {
                     closure.call(i);
@@ -17286,9 +17273,8 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
                         MessageFormat.format(
                                 "The argument ({0}) to upto() cannot be less than the value ({1}) it''s called on.",
                                 to, self));
-        } else if (to instanceof BigInteger) {
+        } else if (to instanceof BigInteger to1) {
             final BigInteger one = BigInteger.valueOf(1);
-            BigInteger to1 = (BigInteger) to;
             if (self.compareTo(to1) <= 0) {
                 for (BigInteger i = self; i.compareTo(to1) <= 0; i = i.add(one)) {
                     closure.call(i);
@@ -17326,8 +17312,7 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
      */
     public static void upto(BigDecimal self, Number to, @ClosureParams(FirstParam.class) Closure closure) {
         final BigDecimal one = BigDecimal.valueOf(10, 1);  // That's what you get for "1.0".
-        if (to instanceof BigDecimal) {
-            BigDecimal to1 = (BigDecimal) to;
+        if (to instanceof BigDecimal to1) {
             if (self.compareTo(to1) <= 0) {
                 for (BigDecimal i = self; i.compareTo(to1) <= 0; i = i.add(one)) {
                     closure.call(i);
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java
index 2afe3496ef..f0bf346138 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethodsSupport.java
@@ -297,8 +297,7 @@ public class DefaultGroovyMethodsSupport {
     }
 
     protected static <T> Queue<T> createSimilarQueue(Queue<T> orig) {
-        if (orig instanceof ArrayBlockingQueue) {
-            ArrayBlockingQueue<T> queue = (ArrayBlockingQueue<T>) orig;
+        if (orig instanceof ArrayBlockingQueue<T> queue) {
             return new ArrayBlockingQueue<>(queue.size() + queue.remainingCapacity());
         } else if (orig instanceof ArrayDeque) {
             return new ArrayDeque<>();
diff --git a/src/main/java/org/codehaus/groovy/runtime/FormatHelper.java b/src/main/java/org/codehaus/groovy/runtime/FormatHelper.java
index aeaa4d420a..30f8d7d3a4 100644
--- a/src/main/java/org/codehaus/groovy/runtime/FormatHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/FormatHelper.java
@@ -160,8 +160,7 @@ public class FormatHelper {
             // other primitives
             return formatCollection(DefaultTypeTransformation.arrayAsCollection(arguments), inspect, escapeBackslashes, maxSize, safe);
         }
-        if (arguments instanceof Range) {
-            Range range = (Range) arguments;
+        if (arguments instanceof Range range) {
             try {
                 if (inspect) {
                     return range.inspect();
@@ -489,8 +488,7 @@ public class FormatHelper {
             out.write(toMapString((Map) object));
         } else if (object instanceof Collection) {
             out.write(toListString((Collection) object));
-        } else if (object instanceof Writable) {
-            Writable writable = (Writable) object;
+        } else if (object instanceof Writable writable) {
             writable.writeTo(out);
         } else if (object instanceof InputStream || object instanceof Reader) {
             // Copy stream to stream
@@ -524,8 +522,7 @@ public class FormatHelper {
             out.append(toMapString((Map) object));
         } else if (object instanceof Collection) {
             out.append(toListString((Collection) object));
-        } else if (object instanceof Writable) {
-            Writable writable = (Writable) object;
+        } else if (object instanceof Writable writable) {
             Writer stringWriter = new StringBuilderWriter();
             writable.writeTo(stringWriter);
             out.append(stringWriter.toString());
diff --git a/src/main/java/org/codehaus/groovy/runtime/GStringUtil.java b/src/main/java/org/codehaus/groovy/runtime/GStringUtil.java
index 6742d83e5d..19d4abb3fb 100644
--- a/src/main/java/org/codehaus/groovy/runtime/GStringUtil.java
+++ b/src/main/java/org/codehaus/groovy/runtime/GStringUtil.java
@@ -81,8 +81,7 @@ public final class GStringUtil {
             if (i < numberOfValues) {
                 final Object value = vs[i];
 
-                if (value instanceof Closure) {
-                    final Closure c = (Closure) value;
+                if (value instanceof Closure c) {
                     int maximumNumberOfParameters = c.getMaximumNumberOfParameters();
 
                     if (maximumNumberOfParameters == 0) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/HandleMetaClass.java b/src/main/java/org/codehaus/groovy/runtime/HandleMetaClass.java
index a5ef820bbb..21ac0b9ad3 100644
--- a/src/main/java/org/codehaus/groovy/runtime/HandleMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/HandleMetaClass.java
@@ -63,8 +63,7 @@ public class HandleMetaClass extends DelegatingMetaClass {
           if (object != NONE) {
               final MetaClass metaClass = delegate;
               delegate = new ExpandoMetaClass(delegate.getTheClass(), false, true);
-              if (metaClass instanceof ExpandoMetaClass) {
-                  ExpandoMetaClass emc = (ExpandoMetaClass) metaClass;
+              if (metaClass instanceof ExpandoMetaClass emc) {
                   for (MetaMethod method : emc.getExpandoMethods())
                     ((ExpandoMetaClass)delegate).registerInstanceMethod(method);
               }
diff --git a/src/main/java/org/codehaus/groovy/runtime/IOGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/IOGroovyMethods.java
index e104966b6d..4cc24f1a20 100644
--- a/src/main/java/org/codehaus/groovy/runtime/IOGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/IOGroovyMethods.java
@@ -646,8 +646,7 @@ public class IOGroovyMethods extends DefaultGroovyMethodsSupport {
      * @since 1.0
      */
     public static String readLine(Reader self) throws IOException {
-        if (self instanceof BufferedReader) {
-            BufferedReader br = (BufferedReader) self;
+        if (self instanceof BufferedReader br) {
             return br.readLine();
         }
         if (self.markSupported()) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java b/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
index 847542da48..4e62ba91ef 100644
--- a/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
@@ -114,8 +114,7 @@ public class InvokerHelper {
         if (value.getClass().isArray()) {
             return Arrays.asList((Object[]) value);
         }
-        if (value instanceof Enumeration) {
-            Enumeration e = (Enumeration) value;
+        if (value instanceof Enumeration e) {
             List answer = new ArrayList();
             while (e.hasMoreElements()) {
                 answer.add(e.nextElement());
@@ -159,11 +158,9 @@ public class InvokerHelper {
             object = NullObject.getNullObject();
         }
 
-        if (object instanceof GroovyObject) {
-            GroovyObject pogo = (GroovyObject) object;
+        if (object instanceof GroovyObject pogo) {
             return pogo.getProperty(property);
-        } else if (object instanceof Class) {
-            Class c = (Class) object;
+        } else if (object instanceof Class c) {
             return metaRegistry.getMetaClass(c).getProperty(object, property);
         } else {
             return ((MetaClassRegistryImpl) metaRegistry).getMetaClass(object).getProperty(object, property);
@@ -182,8 +179,7 @@ public class InvokerHelper {
             object = NullObject.getNullObject();
         }
 
-        if (object instanceof GroovyObject) {
-            GroovyObject pogo = (GroovyObject) object;
+        if (object instanceof GroovyObject pogo) {
             pogo.setProperty(property, newValue);
         } else if (object instanceof Class) {
             metaRegistry.getMetaClass((Class) object).setProperty(object, property, newValue);
@@ -234,12 +230,10 @@ public class InvokerHelper {
     }
 
     public static Object unaryMinus(Object value) {
-        if (value instanceof Integer) {
-            Integer number = (Integer) value;
+        if (value instanceof Integer number) {
             return -number;
         }
-        if (value instanceof Long) {
-            Long number = (Long) value;
+        if (value instanceof Long number) {
             return -number;
         }
         if (value instanceof BigInteger) {
@@ -248,20 +242,16 @@ public class InvokerHelper {
         if (value instanceof BigDecimal) {
             return ((BigDecimal) value).negate();
         }
-        if (value instanceof Double) {
-            Double number = (Double) value;
+        if (value instanceof Double number) {
             return -number;
         }
-        if (value instanceof Float) {
-            Float number = (Float) value;
+        if (value instanceof Float number) {
             return -number;
         }
-        if (value instanceof Short) {
-            Short number = (Short) value;
+        if (value instanceof Short number) {
             return (short) -number;
         }
-        if (value instanceof Byte) {
-            Byte number = (Byte) value;
+        if (value instanceof Byte number) {
             return (byte) -number;
         }
         if (value instanceof ArrayList) {
@@ -313,8 +303,7 @@ public class InvokerHelper {
         String regexToCompareTo;
         if (right instanceof String) {
             regexToCompareTo = (String) right;
-        } else if (right instanceof Pattern) {
-            Pattern pattern = (Pattern) right;
+        } else if (right instanceof Pattern pattern) {
             return pattern.matcher(stringToCompare);
         } else {
             regexToCompareTo = FormatHelper.toString(right);
@@ -386,8 +375,7 @@ public class InvokerHelper {
         Map answer = new LinkedHashMap(initialCapacity(values.length / 2));
 
         for (int i = 0, n = values.length; i < n - 1; ) {
-            if ((values[i] instanceof SpreadMap) && (values[i + 1] instanceof Map)) {
-                Map smap = (Map) values[i + 1];
+            if ((values[i] instanceof SpreadMap) && (values[i + 1] instanceof Map smap)) {
                 for (Object e : smap.entrySet()) {
                     Map.Entry entry = (Map.Entry) e;
                     answer.put(entry.getKey(), entry.getValue());
@@ -546,12 +534,10 @@ public class InvokerHelper {
         return createRange(from, to, false, !inclusive);
     }
     public static Object bitwiseNegate(Object value) {
-        if (value instanceof Integer) {
-            Integer number = (Integer) value;
+        if (value instanceof Integer number) {
             return ~number;
         }
-        if (value instanceof Long) {
-            Long number = (Long) value;
+        if (value instanceof Long number) {
             return ~number;
         }
         if (value instanceof BigInteger) {
@@ -603,8 +589,7 @@ public class InvokerHelper {
         }
 
         // if the object is a Class, call a static method from that class
-        if (object instanceof Class) {
-            Class<?> theClass = (Class<?>) object;
+        if (object instanceof Class<?> theClass) {
             MetaClass metaClass = metaRegistry.getMetaClass(theClass);
             return metaClass.invokeStaticMethod(object, methodName, asArray(arguments));
         }
diff --git a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
index acd9ca8969..57c6a33557 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
@@ -910,8 +910,7 @@ public class MetaClassHelper {
 
     private static Class getClassWithNullAndWrapper(Object arg) {
         if (arg == null) return null;
-        if (arg instanceof Wrapper) {
-            Wrapper w = (Wrapper) arg;
+        if (arg instanceof Wrapper w) {
             return w.getType();
         }
         return arg.getClass();
diff --git a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index 0bdb5d7265..8f4cde2421 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -64,13 +64,11 @@ public class ScriptBytecodeAdapter {
     //  --------------------------------------------------------
     public static Throwable unwrap(GroovyRuntimeException gre) {
         if (gre.getCause() == null) {
-            if (gre instanceof MissingPropertyExceptionNoStack) {
-                MissingPropertyExceptionNoStack noStack = (MissingPropertyExceptionNoStack) gre;
+            if (gre instanceof MissingPropertyExceptionNoStack noStack) {
                 return new MissingPropertyException(noStack.getProperty(), noStack.getType());
             }
 
-            if (gre instanceof MissingMethodExceptionNoStack) {
-                MissingMethodExceptionNoStack noStack = (MissingMethodExceptionNoStack) gre;
+            if (gre instanceof MissingMethodExceptionNoStack noStack) {
                 return new MissingMethodException(noStack.getMethod(), noStack.getType(), noStack.getArguments(), noStack.isStatic());
             }
         }
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
index cecdac3785..1db7d5d7f2 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
@@ -117,8 +117,7 @@ public final class CallSiteArray {
     private static CallSite createPojoSite(CallSite callSite, Object receiver, Object[] args) {
         final Class klazz = receiver.getClass();
         MetaClass metaClass = InvokerHelper.getMetaClass(receiver);
-        if (!GroovyCategorySupport.hasCategoryInCurrentThread() && metaClass instanceof MetaClassImpl) {
-            final MetaClassImpl mci = (MetaClassImpl) metaClass;
+        if (!GroovyCategorySupport.hasCategoryInCurrentThread() && metaClass instanceof MetaClassImpl mci) {
             final ClassInfo info = mci.getTheCachedClass().classInfo;
             if (info.hasPerInstanceMetaClasses()) {
                 return new PerInstancePojoMetaClassSite(callSite, info);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
index ce9132f868..b54c508daf 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class BooleanArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof boolean[] && arg instanceof Integer)
+            if ((receiver instanceof boolean[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final boolean[] objects = (boolean[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
index eea5fd6c38..354fc0646f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
@@ -56,9 +56,8 @@ public class BooleanArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof boolean[] && args[0] instanceof Integer && args[1] instanceof Boolean)
+            if ((receiver instanceof boolean[] objects && args[0] instanceof Integer && args[1] instanceof Boolean)
                     && checkPojoMetaClass()) {
-                final boolean[] objects = (boolean[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Boolean) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
index 6d1f028889..745655e7fb 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class ByteArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof byte[] && arg instanceof Integer)
+            if ((receiver instanceof byte[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final byte[] objects = (byte[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
index 8952f1658f..df45a3c903 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
@@ -60,9 +60,8 @@ public class ByteArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof byte[] && args[0] instanceof Integer && args[1] instanceof Byte)
+            if ((receiver instanceof byte[] objects && args[0] instanceof Integer && args[1] instanceof Byte)
                     && checkPojoMetaClass()) {
-                final byte[] objects = (byte[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Byte) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
index 03389270a0..ae58933352 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class CharacterArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof char[] && arg instanceof Integer)
+            if ((receiver instanceof char[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final char[] objects = (char[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
index c8c122a6ec..7e3eee262c 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
@@ -57,9 +57,8 @@ public class CharacterArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof char[] && args[0] instanceof Integer && args[1] instanceof Character)
+            if ((receiver instanceof char[] objects && args[0] instanceof Integer && args[1] instanceof Character)
                     && checkPojoMetaClass()) {
-                final char[] objects = (char[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Character) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
index 0e1014d912..4ae556f940 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class DoubleArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof double[] && arg instanceof Integer)
+            if ((receiver instanceof double[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final double[] objects = (double[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
index 95cebd9beb..469a3912fa 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
@@ -68,9 +68,8 @@ public class DoubleArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof double[] && args[0] instanceof Integer && args[1] instanceof Double)
+            if ((receiver instanceof double[] objects && args[0] instanceof Integer && args[1] instanceof Double)
                     && checkPojoMetaClass()) {
-                final double[] objects = (double[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Double) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
index ff5badb50b..64df6517a0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class FloatArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof float[] && arg instanceof Integer)
+            if ((receiver instanceof float[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final float[] objects = (float[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
index 428b7a82da..97bbfe2569 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
@@ -68,9 +68,8 @@ public class FloatArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof float[] && args[0] instanceof Integer && args[1] instanceof Float)
+            if ((receiver instanceof float[] objects && args[0] instanceof Integer && args[1] instanceof Float)
                     && checkPojoMetaClass()) {
-                final float[] objects = (float[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Float) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
index 0863753f7d..07e6f01445 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class IntegerArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof int[] && arg instanceof Integer)
+            if ((receiver instanceof int[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final int[] objects = (int[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
index c8353c6b1a..144f386153 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
@@ -68,9 +68,8 @@ public class IntegerArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof int[] && args[0] instanceof Integer && args[1] instanceof Integer)
+            if ((receiver instanceof int[] objects && args[0] instanceof Integer && args[1] instanceof Integer)
                     && checkPojoMetaClass()) {
-                final int[] objects = (int[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Integer) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
index 231a9d887f..9ab8194e95 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class LongArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof long[] && arg instanceof Integer)
+            if ((receiver instanceof long[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final long[] objects = (long[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
index 112cdadfe4..350b2bb304 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
@@ -68,9 +68,8 @@ public class LongArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof long[] && args[0] instanceof Integer && args[1] instanceof Long)
+            if ((receiver instanceof long[] objects && args[0] instanceof Integer && args[1] instanceof Long)
                     && checkPojoMetaClass()) {
-                final long[] objects = (long[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Long) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
index c3e623483a..ee80bbbdc8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
@@ -59,9 +59,8 @@ public class ShortArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object arg) throws Throwable {
-            if ((receiver instanceof short[] && arg instanceof Integer)
+            if ((receiver instanceof short[] objects && arg instanceof Integer)
                     && checkPojoMetaClass()) {
-                final short[] objects = (short[]) receiver;
                 return objects[normaliseIndex((Integer) arg, objects.length)];
             } else
                 return super.call(receiver, arg);
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
index 295645e64f..bb3bdc9965 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
@@ -68,9 +68,8 @@ public class ShortArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
 
         @Override
         public Object call(Object receiver, Object[] args) throws Throwable {
-            if ((receiver instanceof short[] && args[0] instanceof Integer && args[1] instanceof Short)
+            if ((receiver instanceof short[] objects && args[0] instanceof Integer && args[1] instanceof Short)
                     && checkPojoMetaClass()) {
-                final short[] objects = (short[]) receiver;
                 objects[normaliseIndex((Integer) args[0], objects.length)] = (Short) args[1];
                 return null;
             } else
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
index 479c6b20e9..62140826cc 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
@@ -196,8 +196,8 @@ public final class ClosureMetaClass extends MetaClassImpl {
             return null;
         }
 
-        if (delegate instanceof Class) {
-            for (var type = (Class<?>) delegate; type != Object.class && type != null; type = type.getSuperclass()) {
+        if (delegate instanceof Class<?> type) {
+            for (; type != Object.class && type != null; type = type.getSuperclass()) {
                 MetaMethod method = registry.getMetaClass(type).getStaticMetaMethod(methodName, argClasses);
                 if (method != null) {
                     return method;
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
index 91fdea6236..f16b136e9f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ConcurrentReaderHashMap.java
@@ -663,7 +663,7 @@ public class ConcurrentReaderHashMap
             count--;
 
             Entry head = e.next;
-            for (Entry p = first; p != e; p = p.next) 
+            for (Entry p = first; p != e; p = p.next)
               head = new Entry(p.hash, p.key, p.value, head);
 
             tab[index] = head;
@@ -693,7 +693,7 @@ public class ConcurrentReaderHashMap
         e.value = null;
         count--;
         Entry head = e.next;
-        for (Entry p = first; p != e; p = p.next) 
+        for (Entry p = first; p != e; p = p.next)
           head = new Entry(p.hash, p.key, p.value, head);
 
         tab[index] = head;
@@ -964,10 +964,9 @@ public class ConcurrentReaderHashMap
     }
     @Override
     public boolean contains(Object o) {
-      if (!(o instanceof Map.Entry))
+      if (!(o instanceof Map.Entry entry))
         return false;
-      Map.Entry entry = (Map.Entry)o;
-      Object v = ConcurrentReaderHashMap.this.get(entry.getKey());
+        Object v = ConcurrentReaderHashMap.this.get(entry.getKey());
       return v != null && v.equals(entry.getValue());
     }
     @Override
@@ -1117,10 +1116,9 @@ public class ConcurrentReaderHashMap
 
     @Override
     public boolean equals(Object o) {
-      if (!(o instanceof Map.Entry))
+      if (!(o instanceof Map.Entry e))
         return false;
-      Map.Entry e = (Map.Entry)o;
-      return (key.equals(e.getKey()) && value.equals(e.getValue()));
+        return (key.equals(e.getKey()) && value.equals(e.getValue()));
     }
 
     @Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
index 99de9e2fb3..983baacc44 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MetaMethodIndex.java
@@ -118,8 +118,7 @@ public class MetaMethodIndex {
 
     private void copyNonPrivateMethods(final Cache from, final Map<String, Cache> to) {
         var fastArrayOrMetaMethod = from.methods;
-        if (fastArrayOrMetaMethod instanceof FastArray) {
-            FastArray fastArray = (FastArray) fastArrayOrMetaMethod;
+        if (fastArrayOrMetaMethod instanceof FastArray fastArray) {
             Cache e = null;
             final int n = fastArray.size();
             Object[] array = fastArray.getArray();
@@ -148,8 +147,7 @@ public class MetaMethodIndex {
 
     private void copyNonPrivateNonNewMetaMethods(final Cache from, final Map<String, Cache> to) {
         var fastArrayOrMetaMethod = from.methods;
-        if (fastArrayOrMetaMethod instanceof FastArray) {
-            FastArray fastArray = (FastArray) fastArrayOrMetaMethod;
+        if (fastArrayOrMetaMethod instanceof FastArray fastArray) {
             Cache e = null;
             final int n = fastArray.size();
             Object[] array = fastArray.getArray();
@@ -180,16 +178,14 @@ public class MetaMethodIndex {
             return toIndex;
         }
 
-        if (o instanceof MetaMethod) {
-            final MetaMethod inIndex = (MetaMethod) o;
+        if (o instanceof MetaMethod inIndex) {
             if (!isMatchingMethod(inIndex, toIndex)) {
                 return new FastArray(new Object[]{inIndex, toIndex});
             }
             return !isOverridden(inIndex, toIndex) ? inIndex : toIndex;
         }
 
-        if (o instanceof FastArray) {
-            final FastArray array = (FastArray) o;
+        if (o instanceof FastArray array) {
             int found = findMatchingMethod(array, toIndex);
             if (found == -1) {
                 array.add(toIndex);
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
index 87f9660585..06a0f3a56f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/MethodSelectionException.java
@@ -27,11 +27,11 @@ import java.lang.reflect.Modifier;
 
 /**
  * This exception is thrown if the runtime is unable to select
- * a method. This class builds the exception text when calling 
+ * a method. This class builds the exception text when calling
  * getMessage.
  * <p>
  * <b>Note:</b> This exception as for internal use only!
- * 
+ *
  * @since Groovy 1.1
  */
 public class MethodSelectionException extends GroovyRuntimeException {
@@ -82,8 +82,7 @@ public class MethodSelectionException extends GroovyRuntimeException {
         for (int i = 0; i < methods.size; i++) {
             buffer.append("\n  ");
             Object methodOrConstructor = methods.get(i);
-            if (methodOrConstructor instanceof MetaMethod) {
-                MetaMethod method = (MetaMethod) methodOrConstructor;
+            if (methodOrConstructor instanceof MetaMethod method) {
                 buffer.append(Modifier.toString(method.getModifiers()));
                 buffer.append(" ").append(method.getReturnType().getName());
                 buffer.append(" ").append(method.getDeclaringClass().getName());
@@ -100,4 +99,4 @@ public class MethodSelectionException extends GroovyRuntimeException {
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
index 74ec06c908..510f3c7d6e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
+++ b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
@@ -177,8 +177,7 @@ public class DefaultTypeTransformation {
         if (object instanceof GString) {
             object = object.toString();
         }
-        if (object instanceof String) {
-            String s = (String) object;
+        if (object instanceof String s) {
             if (s.length() == 1) {
                 char c = s.charAt(0);
                 return (int) c;
@@ -213,8 +212,7 @@ public class DefaultTypeTransformation {
     public static char castToChar(Object object) {
         if (object instanceof Character) {
             return (Character) object;
-        } else if (object instanceof Number) {
-            Number value = (Number) object;
+        } else if (object instanceof Number value) {
             return (char) value.intValue();
         } else {
             String text = object.toString();
@@ -374,10 +372,9 @@ public class DefaultTypeTransformation {
         }
 
         Object[] args = null;
-        if (object instanceof Collection) {
+        if (object instanceof Collection collection) {
             // let's try to invoke the constructor with the list as arguments
             // such as for creating a Dimension, Point, Color etc.
-            Collection collection = (Collection) object;
             args = collection.toArray();
         } else if (object instanceof Object[]) {
             args = (Object[]) object;
@@ -504,8 +501,7 @@ public class DefaultTypeTransformation {
             } catch (IOException e) {
                 throw new GroovyRuntimeException("Error reading file: " + value, e);
             }
-        } else if (value instanceof MethodClosure) {
-            MethodClosure method = (MethodClosure) value;
+        } else if (value instanceof MethodClosure method) {
             IteratorClosureAdapter<?> adapter = new IteratorClosureAdapter<>(method.getDelegate());
             method.call(adapter);
             return adapter.asList();
@@ -1081,8 +1077,7 @@ public class DefaultTypeTransformation {
     @Deprecated(since = "2.3.0")
     public static Character getCharFromSizeOneString(Object value) {
         if (value instanceof GString) value = value.toString();
-        if (value instanceof String) {
-            String s = (String) value;
+        if (value instanceof String s) {
             if (s.length() != 1) throw new IllegalArgumentException("String of length 1 expected but got a bigger one");
             return s.charAt(0);
         } else {
diff --git a/src/main/java/org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.java b/src/main/java/org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.java
index b06569ded2..7b43921dfc 100644
--- a/src/main/java/org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.java
+++ b/src/main/java/org/codehaus/groovy/runtime/typehandling/ShortTypeHandling.java
@@ -56,7 +56,7 @@ public class ShortTypeHandling {
     }
 
     /**
-     * this class requires that the supplied enum is not fitting a 
+     * this class requires that the supplied enum is not fitting a
      * Collection case for casting
      */
     public static Enum castToEnum(Object object, Class<? extends Enum> type) {
@@ -72,8 +72,7 @@ public class ShortTypeHandling {
         if (object==null) return null;
         if (object instanceof Character) {
             return (Character) object;
-        } else if (object instanceof Number) {
-            Number value = (Number) object;
+        } else if (object instanceof Number value) {
             return (char) value.intValue();
         }
         String text = object.toString();
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 92f32fcc5b..c935aa3fca 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -705,8 +705,7 @@ public class JavaStubGenerator {
             }
             return null;
         }
-        if (arg instanceof MethodCallExpression) { // GROOVY-10122
-            MethodCallExpression mce = (MethodCallExpression) arg;
+        if (arg instanceof MethodCallExpression mce) { // GROOVY-10122
             if (ExpressionUtils.isThisExpression(mce.getObjectExpression())) {
                 MethodNode mn = ctor.getDeclaringClass().tryFindPossibleMethod(mce.getMethodAsString(), mce.getArguments());
                 if (mn != null) return mn.getReturnType();
@@ -761,8 +760,7 @@ public class JavaStubGenerator {
         } else {
             if (classNode.isAnnotationDefinition() && methodNode.hasAnnotationDefault()) {
                 Statement fs = methodNode.getFirstStatement();
-                if (fs instanceof ExpressionStatement) {
-                    ExpressionStatement es = (ExpressionStatement) fs;
+                if (fs instanceof ExpressionStatement es) {
                     Expression re = es.getExpression();
                     ClassNode rt = methodNode.getReturnType();
                     Consumer<Expression> valuePrinter = (value) -> {
@@ -784,9 +782,8 @@ public class JavaStubGenerator {
                     };
 
                     out.print(" default ");
-                    if (re instanceof ListExpression) {
+                    if (re instanceof ListExpression le) {
                         out.print("{ ");
-                        ListExpression le = (ListExpression) re;
                         boolean first = true;
                         for (Expression e : le.getExpressions()) {
                             if (first) first = false; else out.print(", ");
@@ -982,15 +979,13 @@ public class JavaStubGenerator {
     private String getAnnotationValue(final Object memberValue) {
         String val = "null";
         boolean replaceDollars = true;
-        if (memberValue instanceof ListExpression) {
+        if (memberValue instanceof ListExpression le) {
             StringJoiner sj = new StringJoiner(",", "{", "}");
-            ListExpression le = (ListExpression) memberValue;
             for (Expression e : le.getExpressions()) {
                 sj.add(getAnnotationValue(e));
             }
             val = sj.toString();
-        } else if (memberValue instanceof ConstantExpression) {
-            ConstantExpression ce = (ConstantExpression) memberValue;
+        } else if (memberValue instanceof ConstantExpression ce) {
             Object constValue = ce.getValue();
             if (constValue instanceof AnnotationNode) {
                 Writer writer = new StringBuilderWriter();
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/MemJavaFileObject.java b/src/main/java/org/codehaus/groovy/tools/javac/MemJavaFileObject.java
index 7705248de6..8c96b99242 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/MemJavaFileObject.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/MemJavaFileObject.java
@@ -72,8 +72,7 @@ public class MemJavaFileObject extends SimpleJavaFileObject {
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof MemJavaFileObject)) return false;
-        MemJavaFileObject that = (MemJavaFileObject) o;
+        if (!(o instanceof MemJavaFileObject that)) return false;
         return Objects.equals(className, that.className);
     }
 
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/RawJavaFileObject.java b/src/main/java/org/codehaus/groovy/tools/javac/RawJavaFileObject.java
index c8da49dff7..d3925f331e 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/RawJavaFileObject.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/RawJavaFileObject.java
@@ -68,8 +68,7 @@ public class RawJavaFileObject extends SimpleJavaFileObject {
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof RawJavaFileObject)) return false;
-        RawJavaFileObject that = (RawJavaFileObject) o;
+        if (!(o instanceof RawJavaFileObject that)) return false;
         return Objects.equals(uri, that.uri);
     }
 
diff --git a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
index 44ba9a440c..3f0732020a 100644
--- a/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AbstractASTTransformation.java
@@ -158,8 +158,7 @@ public abstract class AbstractASTTransformation implements ASTTransformation, Er
         if (expr == null) {
             return null;
         }
-        if (expr instanceof ListExpression) {
-            final ListExpression listExpression = (ListExpression) expr;
+        if (expr instanceof ListExpression listExpression) {
             if (isUndefinedMarkerList(listExpression)) {
                 return null;
             }
@@ -199,8 +198,7 @@ public abstract class AbstractASTTransformation implements ASTTransformation, Er
         if (expr == null) {
             return null;
         }
-        if (expr instanceof ListExpression) {
-            final ListExpression listExpression = (ListExpression) expr;
+        if (expr instanceof ListExpression listExpression) {
             if (isUndefinedMarkerList(listExpression)) {
                 return null;
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
index ba87481809..e27b0e932f 100644
--- a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
+++ b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
@@ -114,8 +114,7 @@ public class AnnotationCollectorTransform {
             }
             boolean legacySerialization = false;
             final Expression member = collector.getMember("serializeClass");
-            if (member instanceof ClassExpression) {
-                ClassExpression ce = (ClassExpression) member;
+            if (member instanceof ClassExpression ce) {
                 legacySerialization = ce.getType().getName().equals(cn.getName());
             }
             ClassNode helper = cn;
@@ -159,13 +158,11 @@ public class AnnotationCollectorTransform {
         }
 
         private Expression serialize(Expression e) {
-            if (e instanceof AnnotationConstantExpression) {
-                AnnotationConstantExpression ace = (AnnotationConstantExpression) e;
+            if (e instanceof AnnotationConstantExpression ace) {
                 return serialize((AnnotationNode) ace.getValue());
             }
-            if (e instanceof ListExpression) {
+            if (e instanceof ListExpression le) {
                 boolean annotationConstant = false;
-                ListExpression le = (ListExpression) e;
                 List<Expression> list = le.getExpressions();
                 List<Expression> newList = new ArrayList<>(list.size());
                 for (Expression exp: list) {
@@ -216,11 +213,10 @@ public class AnnotationCollectorTransform {
         if (memberValue == null) {
             return Collections.emptyList();
         }
-        if (!(memberValue instanceof ListExpression)) {
+        if (!(memberValue instanceof ListExpression memberListExp)) {
             addError("Annotation collector expected a list of classes, but got a "+memberValue.getClass(), collector, source);
             return Collections.emptyList();
         }
-        ListExpression memberListExp = (ListExpression) memberValue;
         List<Expression> memberList = memberListExp.getExpressions();
         if (memberList.isEmpty()) {
             return Collections.emptyList();
@@ -353,9 +349,8 @@ public class AnnotationCollectorTransform {
                 le.addExpression(new AnnotationConstantExpression(an));
             }
             return le;
-        } else if (o instanceof Object[]) {
+        } else if (o instanceof Object[] values) {
             ListExpression le = new ListExpression();
-            Object[] values = (Object[]) o;
             for (Object val : values) {
                 le.addExpression(makeExpression(val));
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
index 7f631f56a2..eacbf0ef7d 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoCloneASTTransformation.java
@@ -112,8 +112,7 @@ public class AutoCloneASTTransformation extends AbstractASTTransformation {
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             cNode.addInterface(CLONEABLE_TYPE);
             boolean includeFields = memberHasValue(anno, "includeFields", true);
@@ -313,11 +312,9 @@ public class AutoCloneASTTransformation extends AbstractASTTransformation {
 
     private static AutoCloneStyle getStyle(AnnotationNode node, String name) {
         final Expression member = node.getMember(name);
-        if (member instanceof PropertyExpression) {
-            PropertyExpression prop = (PropertyExpression) member;
+        if (member instanceof PropertyExpression prop) {
             Expression oe = prop.getObjectExpression();
-            if (oe instanceof ClassExpression) {
-                ClassExpression ce = (ClassExpression) oe;
+            if (oe instanceof ClassExpression ce) {
                 if ("groovy.transform.AutoCloneStyle".equals(ce.getType().getName())) {
                     return AutoCloneStyle.valueOf(prop.getPropertyAsString());
                 }
diff --git a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
index 8feec9e82b..0dc6f14bdf 100644
--- a/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/AutoImplementASTTransformation.java
@@ -76,8 +76,7 @@ public class AutoImplementASTTransformation extends AbstractASTTransformation {
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
 
             String message = getMemberStringValue(anno, "message");
diff --git a/src/main/java/org/codehaus/groovy/transform/BuilderASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/BuilderASTTransformation.java
index a10ad45206..78843a53a0 100644
--- a/src/main/java/org/codehaus/groovy/transform/BuilderASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/BuilderASTTransformation.java
@@ -83,11 +83,10 @@ public class BuilderASTTransformation extends AbstractASTTransformation implemen
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
         if (parent instanceof ClassNode || parent instanceof MethodNode) {
-            if (parent instanceof ClassNode) {
+            if (parent instanceof ClassNode cn) {
                 if (!checkNotInterface((ClassNode) parent, MY_TYPE_NAME)) {
                     return;
                 }
-                ClassNode cn = (ClassNode) parent;
                 if (hasAnnotation(cn, RECORD_TYPE)) {
                     // we'll later create a tuple constructor and move the builder annotation
                     // to it but let's create a mock constructor node for now
diff --git a/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
index 30249a9a97..5752b6464a 100644
--- a/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/CategoryASTTransformation.java
@@ -143,8 +143,7 @@ public class CategoryASTTransformation implements ASTTransformation {
 
             @Override
             public Expression transform(final Expression expression) {
-                if (expression instanceof VariableExpression) {
-                    VariableExpression ve = (VariableExpression) expression;
+                if (expression instanceof VariableExpression ve) {
                     if (ve.isThisExpression()) {
                         Expression thisExpression = createThisExpression();
                         thisExpression.setSourcePosition(ve);
@@ -154,16 +153,14 @@ public class CategoryASTTransformation implements ASTTransformation {
                         pe.setSourcePosition(ve);
                         return pe;
                     }
-                } else if (expression instanceof MethodCallExpression) {
-                    MethodCallExpression mce = (MethodCallExpression) expression;
+                } else if (expression instanceof MethodCallExpression mce) {
                     if (inClosure && mce.isImplicitThis() && isThisExpression(mce.getObjectExpression())) {
                         // GROOVY-6510: preserve implicit-this semantics
                         mce.setArguments(transform(mce.getArguments()));
                         mce.setMethod(transform(mce.getMethod()));
                         return mce;
                     }
-                } else if (expression instanceof ClosureExpression) {
-                    ClosureExpression ce = (ClosureExpression) expression;
+                } else if (expression instanceof ClosureExpression ce) {
                     addVariablesToStack(hasImplicitParameter(ce) ? params(param(ClassHelper.OBJECT_TYPE, "it")) : getParametersSafe(ce));
                     ce.getVariableScope().putReferencedLocalVariable(selfParameter.get());
                     addAll(varStack.getLast(), "owner", "delegate", "thisObject");
diff --git a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
index 320c12468b..758b74c22f 100644
--- a/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/DelegateASTTransformation.java
@@ -111,8 +111,7 @@ public class DelegateASTTransformation extends AbstractASTTransformation {
         AnnotationNode node = (AnnotationNode) nodes[0];
         DelegateDescription delegate = null;
 
-        if (parent instanceof FieldNode) {
-            FieldNode fieldNode = (FieldNode) parent;
+        if (parent instanceof FieldNode fieldNode) {
 
             delegate = new DelegateDescription();
             delegate.delegate = fieldNode;
@@ -122,8 +121,7 @@ public class DelegateASTTransformation extends AbstractASTTransformation {
             delegate.owner = fieldNode.getOwner();
             delegate.getOp = varX(fieldNode);
             delegate.origin = "field";
-        } else if (parent instanceof MethodNode) {
-            MethodNode methodNode = (MethodNode) parent;
+        } else if (parent instanceof MethodNode methodNode) {
 
             delegate = new DelegateDescription();
             delegate.delegate = methodNode;
diff --git a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
index cf724f8356..bdb53ff1d4 100644
--- a/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/EqualsAndHashCodeASTTransformation.java
@@ -117,8 +117,7 @@ public class EqualsAndHashCodeASTTransformation extends AbstractASTTransformatio
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             boolean callSuper = memberHasValue(anno, "callSuper", true);
             boolean cacheHashCode = memberHasValue(anno, "cache", true);
diff --git a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
index 6fdc4e5f25..a7d68049cb 100644
--- a/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ExternalizeMethodsASTTransformation.java
@@ -78,8 +78,7 @@ public class ExternalizeMethodsASTTransformation extends AbstractASTTransformati
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             cNode.addInterface(EXTERNALIZABLE_TYPE);
             boolean includeFields = memberHasValue(anno, "includeFields", true);
diff --git a/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
index aadc5ef930..d20be1301f 100644
--- a/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ExternalizeVerifierASTTransformation.java
@@ -55,8 +55,7 @@ public class ExternalizeVerifierASTTransformation extends AbstractASTTransformat
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!hasNoArgConstructor(cNode)) {
                 addError(MY_TYPE_NAME + ": An Externalizable class requires a no-arg constructor but none found", cNode);
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
index 3672d081a3..a729ff07b6 100644
--- a/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/FieldASTTransformation.java
@@ -95,8 +95,7 @@ public class FieldASTTransformation extends ClassCodeExpressionTransformer imple
 
         sourceUnit = source; // support for addError
 
-        if (nodes[1] instanceof DeclarationExpression) {
-            DeclarationExpression de = (DeclarationExpression) nodes[1];
+        if (nodes[1] instanceof DeclarationExpression de) {
             ClassNode declaringClass = de.getDeclaringClass();
             if (!declaringClass.isScript()) {
                 addError("Annotation @" + MY_TYPE.getNameWithoutPackage() + " can only be used within a Script.", de);
@@ -173,8 +172,7 @@ public class FieldASTTransformation extends ClassCodeExpressionTransformer imple
     @Override
     public Expression transform(final Expression expr) {
         if (expr == null) return null;
-        if (expr instanceof DeclarationExpression) {
-            DeclarationExpression de = (DeclarationExpression) expr;
+        if (expr instanceof DeclarationExpression de) {
             if (de.getLeftExpression() == candidate.getVariableExpression()) {
                 if (insideScriptBody) {
                     // TODO: make EmptyExpression work
@@ -190,15 +188,13 @@ public class FieldASTTransformation extends ClassCodeExpressionTransformer imple
             // GROOVY-4700, GROOVY-5207, GROOVY-9554
             visitClosureExpression(currentClosure);
             currentClosure = old;
-        } else if (expr instanceof VariableExpression) {
-            VariableExpression ve = (VariableExpression) expr;
+        } else if (expr instanceof VariableExpression ve) {
             // only need to check the variable name because the Groovy compiler already fails if a variable
             // with the same name exists in the scope; this means a closure cannot shadow a class variable
             if (insideScriptBody && currentClosure != null && ve.getName().equals(variableName)) {
                 adjustToClassVar(ve);
             }
-        } else if (expr instanceof ConstructorCallExpression) {
-            ConstructorCallExpression cce = (ConstructorCallExpression) expr;
+        } else if (expr instanceof ConstructorCallExpression cce) {
             if (insideScriptBody && cce.isUsingAnonymousInnerClass()) {
                 // if a match is found, the compiler will have already set up AIC constructor to have
                 // an argument which isn't needed since we'll be accessing the field; we must undo it
diff --git a/src/main/java/org/codehaus/groovy/transform/FinalASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/FinalASTTransformation.java
index 65f6ca27ec..9717afce7c 100644
--- a/src/main/java/org/codehaus/groovy/transform/FinalASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/FinalASTTransformation.java
@@ -49,17 +49,14 @@ public class FinalASTTransformation extends AbstractASTTransformation {
         if (!MY_TYPE.equals(node.getClassNode())) return;
         if (memberHasValue(node, "enabled", false)) return;
 
-        if (candidate instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) candidate;
+        if (candidate instanceof ClassNode cNode) {
             checkModifiers(this, cNode.getModifiers(), cNode, "type " + cNode.getName());
             cNode.setModifiers(cNode.getModifiers() | ACC_FINAL);
-        } else if (candidate instanceof MethodNode) {
+        } else if (candidate instanceof MethodNode mNode) {
             // includes constructors
-            MethodNode mNode = (MethodNode) candidate;
             checkModifiers(this, mNode.getModifiers(), mNode, "method or constructor " + mNode.getName());
             mNode.setModifiers(mNode.getModifiers() | ACC_FINAL);
-        } else if (candidate instanceof FieldNode) {
-            FieldNode fNode = (FieldNode) candidate;
+        } else if (candidate instanceof FieldNode fNode) {
             checkModifiers(this, fNode.getModifiers(), fNode, "field " + fNode.getName());
             fNode.setModifiers(fNode.getModifiers() | ACC_FINAL);
         }
diff --git a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
index 30fdfd8424..ceb6a11b2b 100644
--- a/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ImmutableASTTransformation.java
@@ -114,7 +114,7 @@ public class ImmutableASTTransformation extends AbstractASTTransformation implem
         init(nodes, source);
         AnnotationNode anno = (AnnotationNode) nodes[0];
         AnnotatedNode parent = (AnnotatedNode) nodes[1];
-        if (MY_TYPE.equals(anno.getClassNode()) && parent instanceof ClassNode) { ClassNode type = (ClassNode) parent;
+        if (MY_TYPE.equals(anno.getClassNode()) && parent instanceof ClassNode type) {
             GroovyClassLoader classLoader = compilationUnit != null ? compilationUnit.getTransformLoader() : source.getClassLoader();
             PropertyHandler handler = PropertyHandler.createPropertyHandler(this, classLoader, type);
             if (handler != null
diff --git a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
index e31affee79..d4f9bbc77f 100644
--- a/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/IndexedPropertyASTTransformation.java
@@ -64,8 +64,7 @@ public class IndexedPropertyASTTransformation extends AbstractASTTransformation
         AnnotationNode node = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(node.getClassNode())) return;
 
-        if (parent instanceof FieldNode) {
-            FieldNode fNode = (FieldNode) parent;
+        if (parent instanceof FieldNode fNode) {
             ClassNode cNode = fNode.getDeclaringClass();
             if (cNode.getProperty(fNode.getName()) == null) {
                 addError("Error during " + MY_TYPE_NAME + " processing. Field '" + fNode.getName() +
diff --git a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
index 91cb3ae4d8..12a4b6a763 100644
--- a/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/LazyASTTransformation.java
@@ -86,8 +86,7 @@ public class LazyASTTransformation extends AbstractASTTransformation {
         AnnotatedNode parent = (AnnotatedNode) nodes[1];
         AnnotationNode node = (AnnotationNode) nodes[0];
 
-        if (parent instanceof FieldNode) {
-            final FieldNode fieldNode = (FieldNode) parent;
+        if (parent instanceof FieldNode fieldNode) {
             visitField(this, node, fieldNode);
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
index eb62fa9fec..c07bdf27aa 100644
--- a/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/MapConstructorASTTransformation.java
@@ -93,8 +93,7 @@ public class MapConstructorASTTransformation extends AbstractASTTransformation i
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             boolean includeFields = memberHasValue(anno, "includeFields", Boolean.TRUE);
             boolean includeProperties = !memberHasValue(anno, "includeProperties", Boolean.FALSE);
@@ -227,11 +226,9 @@ public class MapConstructorASTTransformation extends AbstractASTTransformation i
         return new ClassCodeExpressionTransformer() {
             @Override
             public Expression transform(final Expression exp) {
-                if (exp instanceof ClosureExpression) {
-                    ClosureExpression ce = (ClosureExpression) exp;
+                if (exp instanceof ClosureExpression ce) {
                     ce.getCode().visit(this);
-                } else if (exp instanceof VariableExpression) {
-                    VariableExpression ve = (VariableExpression) exp;
+                } else if (exp instanceof VariableExpression ve) {
                     if ("args".equals(ve.getName()) && ve.getAccessedVariable() instanceof DynamicVariable) {
                         VariableExpression newVe = varX(new Parameter(MAP_TYPE, "args"));
                         newVe.setSourcePosition(ve);
diff --git a/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
index 7a51be12b9..fcbb006a5a 100644
--- a/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/MemoizedASTTransformation.java
@@ -77,8 +77,7 @@ public class MemoizedASTTransformation extends AbstractASTTransformation {
         init(nodes, source);
         AnnotationNode annotationNode = (AnnotationNode) nodes[0];
         AnnotatedNode annotatedNode = (AnnotatedNode) nodes[1];
-        if (MY_TYPE.equals(annotationNode.getClassNode()) && annotatedNode instanceof MethodNode) {
-            MethodNode methodNode = (MethodNode) annotatedNode;
+        if (MY_TYPE.equals(annotationNode.getClassNode()) && annotatedNode instanceof MethodNode methodNode) {
             if (methodNode.isAbstract()) {
                 addError("Annotation " + MY_TYPE_NAME + " cannot be used for abstract methods.", methodNode);
                 return;
diff --git a/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
index 745bdd6919..54038bed3b 100644
--- a/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NewifyASTTransformation.java
@@ -231,8 +231,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
     }
 
     private Pattern determineClassNamePattern(Expression expr) {
-        if (!(expr instanceof ConstantExpression)) { return null; }
-        final ConstantExpression constExpr = (ConstantExpression) expr;
+        if (!(expr instanceof ConstantExpression constExpr)) { return null; }
         final String text = constExpr.getText();
         if (constExpr.getValue() == null || text.isEmpty()) { return null; }
         try {
@@ -251,8 +250,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
         ListExpression list = new ListExpression();
         if (expr instanceof ClassExpression) {
             list.addExpression(expr);
-        } else if (expr instanceof VariableExpression && searchSourceUnit) {
-            VariableExpression ve = (VariableExpression) expr;
+        } else if (expr instanceof VariableExpression ve && searchSourceUnit) {
             ClassNode fromSourceUnit = getSourceUnitClass(ve);
             if (fromSourceUnit != null) {
                 ClassExpression found = classX(fromSourceUnit);
@@ -266,8 +264,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
             final List<Expression> expressions = list.getExpressions();
             for (int i = 0; i < expressions.size(); i++) {
                 Expression next = expressions.get(i);
-                if (next instanceof VariableExpression && searchSourceUnit) {
-                    VariableExpression ve = (VariableExpression) next;
+                if (next instanceof VariableExpression ve && searchSourceUnit) {
                     ClassNode fromSourceUnit = getSourceUnitClass(ve);
                     if (fromSourceUnit != null) {
                         ClassExpression found = classX(fromSourceUnit);
@@ -298,8 +295,7 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
     @Override
     public Expression transform(Expression expr) {
         if (expr == null) return null;
-        if (expr instanceof MethodCallExpression && candidate == null) {
-            MethodCallExpression mce = (MethodCallExpression) expr;
+        if (expr instanceof MethodCallExpression mce && candidate == null) {
             Expression args = transform(mce.getArguments());
             if (isNewifyCandidate(mce)) {
                 Expression transformed = transformMethodCall(mce, args);
@@ -313,16 +309,13 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
             transformed.setSafe(mce.isSafe());
             transformed.setSourcePosition(mce);
             return transformed;
-        } else if (expr instanceof ClosureExpression) {
-            ClosureExpression ce = (ClosureExpression) expr;
+        } else if (expr instanceof ClosureExpression ce) {
             ce.getCode().visit(this);
-        } else if (expr instanceof ConstructorCallExpression) {
-            ConstructorCallExpression cce = (ConstructorCallExpression) expr;
+        } else if (expr instanceof ConstructorCallExpression cce) {
             if (cce.isUsingAnonymousInnerClass()) {
                 cce.getType().visitContents(this);
             }
-        } else if (expr instanceof DeclarationExpression) {
-            DeclarationExpression de = (DeclarationExpression) expr;
+        } else if (expr instanceof DeclarationExpression de) {
             if (shouldTransform(de)) {
                 candidate = null;
                 Expression left = de.getLeftExpression();
@@ -402,11 +395,10 @@ public class NewifyASTTransformation extends ClassCodeExpressionTransformer impl
         if (classType != null) {
             Expression argsToUse = argsExp;
             if (classType.getOuterClass() != null && ((classType.getModifiers() & org.objectweb.asm.Opcodes.ACC_STATIC) == 0)) {
-                if (!(argsExp instanceof ArgumentListExpression)) {
+                if (!(argsExp instanceof ArgumentListExpression argsListExp)) {
                     addError("Non-static inner constructor arguments must be an argument list expression; pass 'this' pointer explicitly as first constructor argument otherwise.", mce);
                     return mce;
                 }
-                final ArgumentListExpression argsListExp = (ArgumentListExpression) argsExp;
                 final List<Expression> argExpList = argsListExp.getExpressions();
                 final VariableExpression thisVarExp = new VariableExpression("this");
 
diff --git a/src/main/java/org/codehaus/groovy/transform/NonSealedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NonSealedASTTransformation.java
index f6332324b1..fce1f2e42a 100644
--- a/src/main/java/org/codehaus/groovy/transform/NonSealedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NonSealedASTTransformation.java
@@ -41,8 +41,7 @@ public class NonSealedASTTransformation extends AbstractASTTransformation {
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!NON_SEALED_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (cNode.isEnum()) {
                 addError("@" + NON_SEALED_CLASS.getSimpleName() + " not allowed for enum", cNode);
                 return;
diff --git a/src/main/java/org/codehaus/groovy/transform/NullCheckASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/NullCheckASTTransformation.java
index 3f1a2dac1b..d17cd9823f 100644
--- a/src/main/java/org/codehaus/groovy/transform/NullCheckASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/NullCheckASTTransformation.java
@@ -70,8 +70,7 @@ public class NullCheckASTTransformation extends AbstractASTTransformation {
         if (!NULL_CHECK_TYPE.equals(anno.getClassNode())) return;
         boolean includeGenerated = isIncludeGenerated(anno);
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, NULL_CHECK_NAME)) return;
             for (ConstructorNode cn : cNode.getDeclaredConstructors()) {
                 adjustMethod(cn, includeGenerated);
diff --git a/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
index d055670d50..16d58d93b7 100644
--- a/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
@@ -84,12 +84,10 @@ public class OperatorRenameASTTransformation extends ClassCodeExpressionTransfor
     @Override
     public void visit(ASTNode[] nodes, SourceUnit source) {
         sourceUnit = source;
-        if (nodes.length != 2 || !(nodes[0] instanceof AnnotationNode) || !(nodes[1] instanceof AnnotatedNode)) {
+        if (nodes.length != 2 || !(nodes[0] instanceof AnnotationNode anno) || !(nodes[1] instanceof AnnotatedNode parent)) {
             throw new GroovyBugError("Internal error: expecting [AnnotationNode, AnnotatedNode] but got: " + Arrays.asList(nodes));
         }
 
-        AnnotatedNode parent = (AnnotatedNode) nodes[1];
-        AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
         addIfFound(anno, nameTable, "plus");
@@ -122,8 +120,7 @@ public class OperatorRenameASTTransformation extends ClassCodeExpressionTransfor
     @Override
     public Expression transform(Expression expr) {
         if (expr == null) return null;
-        if (expr instanceof BinaryExpression) {
-            final BinaryExpression be = (BinaryExpression) expr;
+        if (expr instanceof BinaryExpression be) {
             int type = be.getOperation().getType();
             String oldName = getOperationName(type);
             if (nameTable.containsKey(oldName)) {
@@ -137,8 +134,7 @@ public class OperatorRenameASTTransformation extends ClassCodeExpressionTransfor
                 result.setSourcePosition(be);
                 return result;
             }
-        } else if (expr instanceof ClosureExpression) {
-            ClosureExpression ce = (ClosureExpression) expr;
+        } else if (expr instanceof ClosureExpression ce) {
             ce.getCode().visit(this);
         }
         return expr.transformExpression(this);
diff --git a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
index cc67c0910b..627cd69414 100644
--- a/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/PackageScopeASTTransformation.java
@@ -189,8 +189,7 @@ public class PackageScopeASTTransformation extends AbstractASTTransformation {
         List<groovy.transform.PackageScopeTarget> list = new ArrayList<groovy.transform.PackageScopeTarget>();
         if (expr instanceof PropertyExpression) {
             list.add(extractTarget((PropertyExpression) expr));
-        } else if (expr instanceof ListExpression) {
-            final ListExpression expressionList = (ListExpression) expr;
+        } else if (expr instanceof ListExpression expressionList) {
             final List<Expression> expressions = expressionList.getExpressions();
             for (Expression ex : expressions) {
                 if (ex instanceof PropertyExpression) {
@@ -203,8 +202,7 @@ public class PackageScopeASTTransformation extends AbstractASTTransformation {
 
     private static groovy.transform.PackageScopeTarget extractTarget(PropertyExpression expr) {
         Expression oe = expr.getObjectExpression();
-        if (oe instanceof ClassExpression) {
-            ClassExpression ce = (ClassExpression) oe;
+        if (oe instanceof ClassExpression ce) {
             if ("groovy.transform.PackageScopeTarget".equals(ce.getType().getName())) {
                 Expression prop = expr.getProperty();
                 if (prop instanceof ConstantExpression) {
diff --git a/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
index 39c4b8806d..4449670c61 100644
--- a/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ReadWriteLockASTTransformation.java
@@ -80,8 +80,7 @@ public class ReadWriteLockASTTransformation extends AbstractASTTransformation {
 
         String value = getMemberStringValue(node, "value");
 
-        if (parent instanceof MethodNode) {
-            MethodNode mNode = (MethodNode) parent;
+        if (parent instanceof MethodNode mNode) {
             ClassNode cNode = mNode.getDeclaringClass();
             FieldNode lockExpr = determineLock(value, cNode, mNode.isStatic(), myTypeName);
             if (lockExpr == null) return;
diff --git a/src/main/java/org/codehaus/groovy/transform/RecordCompletionASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/RecordCompletionASTTransformation.java
index dd30e5426b..52af631dd4 100644
--- a/src/main/java/org/codehaus/groovy/transform/RecordCompletionASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/RecordCompletionASTTransformation.java
@@ -67,8 +67,7 @@ public class RecordCompletionASTTransformation extends AbstractASTTransformation
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             MethodNode copyWith = cNode.getMethod("copyWith", params(param(MAP_TYPE, "namedArgs")));
             if (copyWith != null) {
                 adjustCopyWith(cNode, copyWith);
@@ -88,8 +87,7 @@ public class RecordCompletionASTTransformation extends AbstractASTTransformation
         ConstructorNode consNode = cNode.getDeclaredConstructor(params.toArray(Parameter.EMPTY_ARRAY));
         if (consNode != null) {
             Statement code = copyWith.getCode();
-            if (code instanceof ReturnStatement) {
-                ReturnStatement rs = (ReturnStatement) code;
+            if (code instanceof ReturnStatement rs) {
                 Expression expr = rs.getExpression();
                 if (expr instanceof ConstructorCallExpression) {
                     expr.putNodeMetaData(StaticTypesMarker.DIRECT_METHOD_CALL_TARGET, consNode);
diff --git a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
index 0b80bc8e6e..31a6cb6b72 100644
--- a/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/RecordTypeASTTransformation.java
@@ -501,11 +501,9 @@ public class RecordTypeASTTransformation extends AbstractASTTransformation imple
     private static RecordTypeMode getMode(AnnotationNode node, String name) {
         if (node != null) {
             final Expression member = node.getMember(name);
-            if (member instanceof PropertyExpression) {
-                PropertyExpression prop = (PropertyExpression) member;
+            if (member instanceof PropertyExpression prop) {
                 Expression oe = prop.getObjectExpression();
-                if (oe instanceof ClassExpression) {
-                    ClassExpression ce = (ClassExpression) oe;
+                if (oe instanceof ClassExpression ce) {
                     if ("groovy.transform.RecordTypeMode".equals(ce.getType().getName())) {
                         return RecordTypeMode.valueOf(prop.getPropertyAsString());
                     }
diff --git a/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
index bdc351a558..7a71b17334 100644
--- a/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SealedASTTransformation.java
@@ -59,8 +59,7 @@ public class SealedASTTransformation extends AbstractASTTransformation {
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!SEALED_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (cNode.isEnum()) {
                 addError(SEALED_NAME + " not allowed for enum", cNode);
                 return;
@@ -130,11 +129,9 @@ public class SealedASTTransformation extends AbstractASTTransformation {
     private static SealedMode getMode(AnnotationNode node, String name) {
         if (node != null) {
             final Expression member = node.getMember(name);
-            if (member instanceof PropertyExpression) {
-                PropertyExpression prop = (PropertyExpression) member;
+            if (member instanceof PropertyExpression prop) {
                 Expression oe = prop.getObjectExpression();
-                if (oe instanceof ClassExpression) {
-                    ClassExpression ce = (ClassExpression) oe;
+                if (oe instanceof ClassExpression ce) {
                     if ("groovy.transform.SealedMode".equals(ce.getType().getName())) {
                         return SealedMode.valueOf(prop.getPropertyAsString());
                     }
diff --git a/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
index 3ada0cfbf4..942cb39836 100644
--- a/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SingletonASTTransformation.java
@@ -67,8 +67,7 @@ public class SingletonASTTransformation extends AbstractASTTransformation {
         AnnotatedNode parent = (AnnotatedNode) nodes[1];
         AnnotationNode node = (AnnotationNode) nodes[0];
 
-        if (parent instanceof ClassNode) {
-            ClassNode classNode = (ClassNode) parent;
+        if (parent instanceof ClassNode classNode) {
             String propertyName = getMemberStringValue(node, "property", "instance");
             boolean isLazy = memberHasValue(node, "lazy", true);
             boolean isStrict = !memberHasValue(node, "strict", false);
@@ -138,4 +137,4 @@ public class SingletonASTTransformation extends AbstractASTTransformation {
             addGeneratedConstructor(classNode, new ConstructorNode(ACC_PRIVATE, body));
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/codehaus/groovy/transform/StaticTypesTransformation.java b/src/main/java/org/codehaus/groovy/transform/StaticTypesTransformation.java
index 1df48a7527..53450dc94c 100644
--- a/src/main/java/org/codehaus/groovy/transform/StaticTypesTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/StaticTypesTransformation.java
@@ -54,15 +54,13 @@ public class StaticTypesTransformation implements ASTTransformation, Compilation
         Expression extensions = members.get("extensions");
         AnnotatedNode node = (AnnotatedNode) nodes[1];
         StaticTypeCheckingVisitor visitor = null;
-        if (node instanceof ClassNode) {
-            ClassNode classNode = (ClassNode) node;
+        if (node instanceof ClassNode classNode) {
             visitor = newVisitor(source, classNode);
             visitor.setCompilationUnit(compilationUnit);
             addTypeCheckingExtensions(visitor, extensions);
             visitor.initialize();
             visitor.visitClass(classNode);
-        } else if (node instanceof MethodNode) {
-            MethodNode methodNode = (MethodNode) node;
+        } else if (node instanceof MethodNode methodNode) {
             visitor = newVisitor(source, methodNode.getDeclaringClass());
             visitor.setCompilationUnit(compilationUnit);
             addTypeCheckingExtensions(visitor, extensions);
@@ -85,8 +83,7 @@ public class StaticTypesTransformation implements ASTTransformation, Compilation
                     extensions.getText(),
                     compilationUnit
             ));
-        } else if (extensions instanceof ListExpression) {
-            ListExpression list = (ListExpression) extensions;
+        } else if (extensions instanceof ListExpression list) {
             for (Expression ext : list.getExpressions()) {
                 addTypeCheckingExtensions(visitor, ext);
             }
diff --git a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
index 35e3450c4a..6b97e96ab1 100644
--- a/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/SynchronizedASTTransformation.java
@@ -60,8 +60,7 @@ public class SynchronizedASTTransformation extends AbstractASTTransformation {
         if (!MY_TYPE.equals(node.getClassNode())) return;
         String value = getMemberStringValue(node, "value");
 
-        if (parent instanceof MethodNode) {
-            MethodNode mNode = (MethodNode) parent;
+        if (parent instanceof MethodNode mNode) {
             if (mNode.isAbstract()) {
                 addError("Error during " + MY_TYPE_NAME + " processing: annotation not allowed on abstract method '" + mNode.getName() + "'", mNode);
                 return;
diff --git a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
index bc8424be19..217fbe3d51 100644
--- a/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/ToStringASTTransformation.java
@@ -97,8 +97,7 @@ public class ToStringASTTransformation extends AbstractASTTransformation {
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             boolean includeSuper = memberHasValue(anno, "includeSuper", true);
             boolean includeSuperProperties = memberHasValue(anno, "includeSuperProperties", true);
diff --git a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
index 25a81f9fb0..b493adc5ae 100644
--- a/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/TupleConstructorASTTransformation.java
@@ -130,8 +130,7 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!MY_TYPE.equals(anno.getClassNode())) return;
 
-        if (parent instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) parent;
+        if (parent instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, MY_TYPE_NAME)) return;
             boolean includeFields = memberHasValue(anno, "includeFields", Boolean.TRUE);
             boolean includeProperties = !memberHasValue(anno, "includeProperties", Boolean.FALSE);
@@ -389,16 +388,13 @@ public class TupleConstructorASTTransformation extends AbstractASTTransformation
     private static DefaultsMode maybeDefaultsMode(final AnnotationNode node, final String name) {
         if (node != null) {
             final Expression member = node.getMember(name);
-            if (member instanceof ConstantExpression) {
-                ConstantExpression ce = (ConstantExpression) member;
+            if (member instanceof ConstantExpression ce) {
                 if (ce.getValue() instanceof DefaultsMode) {
                     return (DefaultsMode) ce.getValue();
                 }
-            } else if (member instanceof PropertyExpression) {
-                PropertyExpression prop = (PropertyExpression) member;
+            } else if (member instanceof PropertyExpression prop) {
                 Expression oe = prop.getObjectExpression();
-                if (oe instanceof ClassExpression) {
-                    ClassExpression ce = (ClassExpression) oe;
+                if (oe instanceof ClassExpression ce) {
                     if ("groovy.transform.DefaultsMode".equals(ce.getType().getName())) {
                         return DefaultsMode.valueOf(prop.getPropertyAsString());
                     }
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompileTransformation.java b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompileTransformation.java
index 348873919c..86b909193a 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/StaticCompileTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/StaticCompileTransformation.java
@@ -57,8 +57,7 @@ public class StaticCompileTransformation extends StaticTypesTransformation {
         Map<String,Expression> members = ((AnnotationNode) nodes[0]).getMembers();
         Expression extensions = members.get("extensions");
         StaticTypeCheckingVisitor visitor = null;
-        if (target instanceof ClassNode) {
-            ClassNode classNode = (ClassNode) target;
+        if (target instanceof ClassNode classNode) {
             visitor = newVisitor(source, classNode);
             visitor.setCompilationUnit(compilationUnit);
             addTypeCheckingExtensions(visitor, extensions);
@@ -66,8 +65,7 @@ public class StaticCompileTransformation extends StaticTypesTransformation {
             target.putNodeMetaData(STATIC_COMPILE_NODE, !visitor.isSkipMode(target));
             visitor.initialize();
             visitor.visitClass(classNode);
-        } else if (target instanceof MethodNode) {
-            MethodNode methodNode = (MethodNode) target;
+        } else if (target instanceof MethodNode methodNode) {
             ClassNode declaringClass = methodNode.getDeclaringClass();
             visitor = newVisitor(source, declaringClass);
             visitor.setCompilationUnit(compilationUnit);
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/BinaryExpressionTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/BinaryExpressionTransformer.java
index aa752eae75..6928ceefc5 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/BinaryExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/BinaryExpressionTransformer.java
@@ -178,9 +178,8 @@ public class BinaryExpressionTransformer {
         if (directMCT != null) {
             Expression left = staticCompilationTransformer.transform(bin.getLeftExpression());
             Expression right = staticCompilationTransformer.transform(bin.getRightExpression());
-            if (left instanceof PropertyExpression) {
+            if (left instanceof PropertyExpression pe) {
                 // transform "a.x = val" into "def tmp = val; a.setX(tmp); tmp"
-                PropertyExpression pe = (PropertyExpression) left;
                 return transformAssignmentToSetterCall(
                         pe.getObjectExpression(), // "a"
                         directMCT, // "setX"
@@ -419,8 +418,7 @@ public class BinaryExpressionTransformer {
             // call handles the operation, so we must add the assignment now
             expr = binX(left, Token.newSymbol(Types.ASSIGN, operation.getStartLine(), operation.getStartColumn()), call);
             // GROOVY-5746: one execution of receiver and subscript
-            if (left instanceof BinaryExpression) {
-                BinaryExpression be = (BinaryExpression) left;
+            if (left instanceof BinaryExpression be) {
                 if (be.getOperation().getType() == Types.LEFT_SQUARE_BRACKET) {
                     be.setLeftExpression(transformRepeatedReference(be.getLeftExpression()));
                     be.setRightExpression(transformRepeatedReference(be.getRightExpression()));
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CastExpressionOptimizer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CastExpressionOptimizer.java
index 59cd92e719..1c81311a2f 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/CastExpressionOptimizer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/CastExpressionOptimizer.java
@@ -53,8 +53,7 @@ public class CastExpressionOptimizer {
             }
         } else if (ClassHelper.char_TYPE.equals(cast.getType())) {
             Expression expression = cast.getExpression();
-            if (expression instanceof ConstantExpression) {
-                ConstantExpression ce = (ConstantExpression) expression;
+            if (expression instanceof ConstantExpression ce) {
                 if (ClassHelper.STRING_TYPE.equals(ce.getType())) {
                     String val = (String) ce.getValue();
                     if (val!=null && val.length()==1) {
diff --git a/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java b/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
index 6998195031..7190f94147 100644
--- a/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/sc/transformers/ConstructorCallTransformer.java
@@ -67,13 +67,11 @@ public class ConstructorCallTransformer {
                 && StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf(params[params.length - 1].getType(), ClassHelper.MAP_TYPE)
                 && node.getCode() == StaticTypeCheckingVisitor.GENERATED_EMPTY_STATEMENT) {
             Expression arguments = expr.getArguments();
-            if (arguments instanceof TupleExpression) {
-                TupleExpression tupleExpression = (TupleExpression) arguments;
+            if (arguments instanceof TupleExpression tupleExpression) {
                 List<Expression> expressions = tupleExpression.getExpressions();
                 if (expressions.size() == 1 || expressions.size() == 2) { // 2 = inner class case
                     Expression expression = expressions.get(expressions.size() - 1);
-                    if (expression instanceof MapExpression) {
-                        MapExpression map = (MapExpression) expression;
+                    if (expression instanceof MapExpression map) {
                         // check that the node doesn't belong to the list of declared constructors
                         ClassNode declaringClass = node.getDeclaringClass();
                         for (ConstructorNode constructorNode : declaringClass.getDeclaredConstructors()) {
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
index bd1278225b..90f204f79e 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/GroovyTypeCheckingExtensionSupport.java
@@ -522,8 +522,7 @@ public class GroovyTypeCheckingExtensionSupport extends AbstractTypeCheckingExte
                 }
             }
 
-            if (args instanceof Object[] && ((Object[]) args).length == 1 && ((Object[]) args)[0] instanceof Closure) {
-                Object[] argsArray = (Object[]) args;
+            if (args instanceof Object[] argsArray && ((Object[]) args).length == 1 && ((Object[]) args)[0] instanceof Closure) {
                 String methodName = METHOD_ALIASES.get(name);
                 if (methodName == null) {
                     return InvokerHelper.invokeMethod(extension, name, args);
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java b/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java
index 8d0d904721..c9f5236fab 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java
@@ -58,16 +58,14 @@ public class SignatureCodecVersion1 implements SignatureCodec {
 
     private void doEncode(final ClassNode node, DataOutputStream dos) throws IOException {
         dos.writeUTF(node.getClass().getSimpleName());
-        if (node instanceof UnionTypeClassNode) {
-            UnionTypeClassNode union = (UnionTypeClassNode) node;
+        if (node instanceof UnionTypeClassNode union) {
             ClassNode[] delegates = union.getDelegates();
             dos.writeInt(delegates.length);
             for (ClassNode delegate : delegates) {
                 doEncode(delegate, dos);
             }
             return;
-        } else if (node instanceof WideningCategories.LowestUpperBoundClassNode) {
-            WideningCategories.LowestUpperBoundClassNode lub = (WideningCategories.LowestUpperBoundClassNode) node;
+        } else if (node instanceof WideningCategories.LowestUpperBoundClassNode lub) {
             dos.writeUTF(lub.getLubName());
             doEncode(lub.getUnresolvedSuperClass(), dos);
             ClassNode[] interfaces = lub.getInterfaces();
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index 519cf395f9..bfa955c405 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -785,8 +785,7 @@ public abstract class StaticTypeCheckingSupport {
             valueExpr = ((CastExpression) valueExpr).getExpression();
         if (valueExpr instanceof ConstantExpression) {
             Object value = ((ConstantExpression) valueExpr).getValue();
-            if (!(value instanceof Number)) return true; // null or ...
-            Number number = (Number) value;
+            if (!(value instanceof Number number)) return true; // null or ...
             switch (leftIndex) {
               case 0: // byte
                 switch (rightIndex) {
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index c5e64d400f..5ec9f6b4a2 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -537,11 +537,9 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 for (AnnotationNode annotation : annotations) {
                     Expression value = annotation.getMember("value");
                     if (value != null) {
-                        if (value instanceof ConstantExpression) {
-                            ConstantExpression ce = (ConstantExpression) value;
+                        if (value instanceof ConstantExpression ce) {
                             if (TypeCheckingMode.SKIP.toString().equals(ce.getValue().toString())) return true;
-                        } else if (value instanceof PropertyExpression) {
-                            PropertyExpression pe = (PropertyExpression) value;
+                        } else if (value instanceof PropertyExpression pe) {
                             if (TypeCheckingMode.SKIP.toString().equals(pe.getPropertyAsString())) return true;
                         }
                     }
@@ -560,8 +558,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
      * @return true if the inner class node should be skipped
      */
     protected boolean isSkippedInnerClass(final AnnotatedNode node) {
-        if (node instanceof ClassNode) {
-            ClassNode type = (ClassNode) node;
+        if (node instanceof ClassNode type) {
             if (type.getOuterClass() != null) {
                 MethodNode enclosingMethod = type.getEnclosingMethod();
                 if (enclosingMethod != null && isSkipMode(enclosingMethod)) {
@@ -707,8 +704,7 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
             }
         } else if (accessedVariable != null) {
             VariableExpression localVariable;
-            if (accessedVariable instanceof Parameter) {
-                Parameter prm = (Parameter) accessedVariable;
+            if (accessedVariable instanceof Parameter prm) {
                 localVariable = new ParameterVariableExpression(prm);
             } else {
                 localVariable = (VariableExpression) accessedVariable;
@@ -971,15 +967,12 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
                 // propagate closure parameter information
                 if (leftExpression instanceof VariableExpression
                         // GROOVY-11400: save to declared variable; skip field, property, parameter or dynamic variable
-                        && ((VariableExpression) leftExpression).getAccessedVariable() instanceof VariableExpression) {
-                    var targetVariable = (VariableExpression) ((VariableExpression) leftExpression).getAccessedVariable();
-                    if (rightExpression instanceof ClosureExpression) {
-                        var closure = (ClosureExpression) rightExpression;
+                        && ((VariableExpression) leftExpression).getAccessedVariable() instanceof VariableExpression targetVariable) {
+                    if (rightExpression instanceof ClosureExpression closure) {
                         if (!hasImplicitParameter(closure)) // GROOVY-11394: arrow means zero parameters
                             targetVariable.putNodeMetaData(CLOSURE_ARGUMENTS, getParametersSafe(closure));
                     } else if (rightExpression instanceof VariableExpression
-                            && ((VariableExpression) rightExpression).getAccessedVariable() instanceof VariableExpression) {
-                        var sourceVariable = (VariableExpression) ((VariableExpression) rightExpression).getAccessedVariable();
+                            && ((VariableExpression) rightExpression).getAccessedVariable() instanceof VariableExpression sourceVariable) {
                         targetVariable.putNodeMetaData(CLOSURE_ARGUMENTS, sourceVariable.getNodeMetaData(CLOSURE_ARGUMENTS));
                     }
                 }
@@ -1337,13 +1330,12 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
             }
         }
 
-        if (!(rightExpression instanceof ListExpression)) {
+        if (!(rightExpression instanceof ListExpression values)) {
             addStaticTypeError("Multiple assignments without list or tuple on the right-hand side are unsupported in static type checking mode", rightExpression);
             return false;
         }
 
         TupleExpression tuple = (TupleExpression) leftExpression;
-        ListExpression values = (ListExpression) rightExpression;
         List<Expression> tupleExpressions = tuple.getExpressions();
         List<Expression> valueExpressions = values.getExpressions();
 
@@ -2580,14 +2572,12 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
 
     protected MethodNode typeCheckMapConstructor(final ConstructorCallExpression call, final ClassNode receiver, final Expression arguments) {
         MethodNode node = null;
-        if (arguments instanceof TupleExpression) {
-            TupleExpression texp = (TupleExpression) arguments;
+        if (arguments instanceof TupleExpression texp) {
             List<Expression> expressions = texp.getExpressions();
             // should only get here with size = 2 when inner class constructor
             if (expressions.size() == 1 || expressions.size() == 2) {
                 Expression expression = expressions.get(expressions.size() - 1);
-                if (expression instanceof MapExpression) {
-                    MapExpression argList = (MapExpression) expression;
+                if (expression instanceof MapExpression argList) {
                     checkGroovyConstructorMap(call, receiver, argList);
                     Parameter[] params = expressions.size() == 1
                             ? new Parameter[]{new Parameter(MAP_TYPE, "map")}
@@ -3099,8 +3089,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
      */
     @Deprecated(forRemoval = true, since = "2.5.0")
     protected void checkClosureParameters(final Expression callArguments, final ClassNode receiver) {
-        if (callArguments instanceof ArgumentListExpression) {
-            ArgumentListExpression argList = (ArgumentListExpression) callArguments;
+        if (callArguments instanceof ArgumentListExpression argList) {
             ClosureExpression closure = (ClosureExpression) argList.getExpression(0);
             Parameter[] parameters = closure.getParameters();
             if (parameters.length > 1) {
@@ -3218,8 +3207,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                 Expression value = an.getMember("value");
                 if (value instanceof AnnotationConstantExpression) {
                     processNamedParam((AnnotationConstantExpression) value, entries, args, collectedNames);
-                } else if (value instanceof ListExpression) {
-                    ListExpression le = (ListExpression) value;
+                } else if (value instanceof ListExpression le) {
                     for (Expression next : le.getExpressions()) {
                         if (next instanceof AnnotationConstantExpression) {
                             processNamedParam((AnnotationConstantExpression) next, entries, args, collectedNames);
@@ -3320,8 +3308,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
                     typeParametersResolved = hasTypeArguments;
                 } else {
                     Expression emc = typeCheckingContext.getEnclosingMethodCall();
-                    if (emc instanceof MethodCallExpression) {
-                        MethodCallExpression mce = (MethodCallExpression) emc;
+                    if (emc instanceof MethodCallExpression mce) {
                         if (mce.getArguments() == arguments) {
                             GenericsType[] typeArguments = mce.getGenericsTypes();
                             if (typeArguments != null) {
@@ -3551,7 +3538,7 @@ out:    if ((samParameterTypes.length == 1 && isOrImplements(samParameterTypes[0
 
         GenericsType[] typeArguments = null;
         Expression emc = typeCheckingContext.getEnclosingMethodCall(); // GROOVY-7789, GROOVY-11168
-        if (emc instanceof MethodCallExpression) { MethodCallExpression call = (MethodCallExpression) emc;
+        if (emc instanceof MethodCallExpression call) {
             if (arguments == call.getArguments() || InvocationWriter.makeArgumentList(arguments).getExpressions().stream().anyMatch(arg ->
                     arg instanceof ClosureExpression && DefaultGroovyMethods.contains(InvocationWriter.makeArgumentList(call.getArguments()), arg)))
                 typeArguments = call.getGenericsTypes();
@@ -4037,9 +4024,8 @@ out:                if (mn.size() != 1) {
      * @return the inferred closure return type or <em>null</em>
      */
     protected ClassNode getInferredReturnTypeFromWithClosureArgument(final Expression callArguments) {
-        if (!(callArguments instanceof ArgumentListExpression)) return null;
+        if (!(callArguments instanceof ArgumentListExpression argList)) return null;
 
-        ArgumentListExpression argList = (ArgumentListExpression) callArguments;
         ClosureExpression closure = (ClosureExpression) argList.getExpression(0);
 
         visitClosureExpression(closure);
@@ -4681,8 +4667,7 @@ trying: for (ClassNode[] signature : signatures) {
             }
         }
 
-        if (exp instanceof VariableExpression) {
-            VariableExpression var = (VariableExpression) exp;
+        if (exp instanceof VariableExpression var) {
             Variable accessedVariable = var.getAccessedVariable();
             if (accessedVariable instanceof VariableExpression) {
                 if (accessedVariable != var)
@@ -4972,8 +4957,7 @@ trying: for (ClassNode[] signature : signatures) {
 
     protected MethodNode findMethodOrFail(final Expression expr, final ClassNode receiver, final String name, final ClassNode... args) {
         List<MethodNode> methods = findMethod(receiver, name, args);
-        if (methods.isEmpty() && (expr instanceof BinaryExpression)) {
-            BinaryExpression be = (BinaryExpression) expr;
+        if (methods.isEmpty() && (expr instanceof BinaryExpression be)) {
             MethodCallExpression call = callX(be.getLeftExpression(), name, be.getRightExpression());
             methods = extension.handleMissingMethod(receiver, name, args(be.getLeftExpression()), args, call);
         }
@@ -5251,16 +5235,14 @@ trying: for (ClassNode[] signature : signatures) {
             return GenericsUtils.makeClassSafe0(CLASS_Type, new GenericsType(type));
         }
 
-        if (node instanceof VariableExpression) {
-            VariableExpression vexp = (VariableExpression) node;
+        if (node instanceof VariableExpression vexp) {
             type = isTraitSelf(vexp);
             if (type != null) return makeSelf(type);
             if (vexp.isThisExpression()) return makeThis();
             if (vexp.isSuperExpression()) return makeSuper();
 
             Variable variable = vexp.getAccessedVariable();
-            if (variable instanceof FieldNode) {
-                FieldNode fieldNode = (FieldNode) variable;
+            if (variable instanceof FieldNode fieldNode) {
                 ClassNode fieldType = fieldNode.getOriginType();
                 if (!fieldNode.isStatic() && GenericsUtils.hasUnresolvedGenerics(fieldType)) {
                     ClassNode declType = fieldNode.getDeclaringClass(), thisType = typeCheckingContext.getEnclosingClassNode();
@@ -5271,8 +5253,7 @@ trying: for (ClassNode[] signature : signatures) {
             if (variable != vexp && variable instanceof VariableExpression) {
                 return getType((VariableExpression) variable);
             }
-            if (variable instanceof Parameter) {
-                Parameter parameter = (Parameter) variable;
+            if (variable instanceof Parameter parameter) {
                 if (getTemporaryTypesForExpression(vexp).isEmpty()) { // not instanceof
                     // check if the parameter is part of a control structure (for loop)
                     type = typeCheckingContext.controlStructureVariables.get(parameter);
@@ -5331,8 +5312,7 @@ trying: for (ClassNode[] signature : signatures) {
             return inferMapExpressionType((MapExpression) node);
         }
 
-        if (node instanceof RangeExpression) {
-            RangeExpression re = (RangeExpression) node;
+        if (node instanceof RangeExpression re) {
             ClassNode fromType = getType(re.getFrom());
             ClassNode toType = getType(re.getTo());
             if (fromType.equals(toType)) {
@@ -5652,8 +5632,7 @@ trying: for (ClassNode[] signature : signatures) {
                                     ? getCombinedBoundType(argumentType.getGenericsTypes()[0])
                                         : wrapTypeIfNecessary(getInferredReturnType(argument));
                             ClassNode[] p;
-                            if (argument instanceof ClosureExpression) {
-                                ClosureExpression closure = (ClosureExpression) argument;
+                            if (argument instanceof ClosureExpression closure) {
                                 p = extractTypesFromParameters(getParametersSafe(closure));
                             } else { // argument instanceof MethodPointerExpression
                                 List<MethodNode> candidates = argument.getNodeMetaData(MethodNode.class);
@@ -6140,8 +6119,7 @@ out:    for (ClassNode type : todo) {
                         }
                     }
                 }
-            } else if (expression instanceof MethodCallExpression) {
-                MethodCallExpression call = (MethodCallExpression) expression;
+            } else if (expression instanceof MethodCallExpression call) {
                 Expression objectExpression = call.getObjectExpression();
                 if (objectExpression instanceof VariableExpression) {
                     // this should always be the case, but adding a test is safer
@@ -6472,8 +6450,7 @@ out:    for (ClassNode type : todo) {
         @Override
         public void visitVariableExpression(final VariableExpression expression) {
             Variable var = findTargetVariable(expression);
-            if ((!onlySharedVariables || isOuterScopeShared(var)) && var instanceof VariableExpression) {
-                VariableExpression ve = (VariableExpression) var;
+            if ((!onlySharedVariables || isOuterScopeShared(var)) && var instanceof VariableExpression ve) {
                 ClassNode cn = ve.getNodeMetaData(INFERRED_TYPE);
                 if (cn == null) cn = ve.getOriginType();
                 varOrigType.put(ve, cn);
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/TraitTypeCheckingExtension.java b/src/main/java/org/codehaus/groovy/transform/stc/TraitTypeCheckingExtension.java
index 926582a967..3384e28d0e 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/TraitTypeCheckingExtension.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/TraitTypeCheckingExtension.java
@@ -72,8 +72,7 @@ public class TraitTypeCheckingExtension extends AbstractTypeCheckingExtension {
             return Collections.singletonList(makeDynamic(call, returnType));
         }
 
-        if (call instanceof MethodCallExpression) {
-            MethodCallExpression mce = (MethodCallExpression) call;
+        if (call instanceof MethodCallExpression mce) {
             ClassNode returnType = mce.getNodeMetaData(TraitASTTransformation.DO_DYNAMIC);
             if (returnType != null) return Collections.singletonList(makeDynamic(call, returnType));
 
diff --git a/src/main/java/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.java b/src/main/java/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.java
index 9a092b6f45..187fb4f385 100644
--- a/src/main/java/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.java
+++ b/src/main/java/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.java
@@ -32,9 +32,8 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.returnS;
 public class TernaryToIfStatementConverter {
     @SuppressWarnings("Instanceof")
     public Statement convert(ReturnStatement statementWithInnerTernaryExpression) {
-        if (!(statementWithInnerTernaryExpression.getExpression() instanceof TernaryExpression))
+        if (!(statementWithInnerTernaryExpression.getExpression() instanceof TernaryExpression ternary))
             return statementWithInnerTernaryExpression;
-        TernaryExpression ternary = (TernaryExpression) statementWithInnerTernaryExpression.getExpression();
         return ifElseS(ternary.getBooleanExpression(), returnS(ternary.getTrueExpression()), returnS(ternary.getFalseExpression()));
     }
 }
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
index dd187c645f..2c25f97b6b 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/SuperCallTraitTransformer.java
@@ -94,10 +94,8 @@ class SuperCallTraitTransformer extends ClassCodeExpressionTransformer {
             exp.getLeftExpression().putNodeMetaData("assign.target", exp.getOperation());
 
         Expression trn = super.transform(exp);
-        if (trn instanceof BinaryExpression) {
-            BinaryExpression bin = (BinaryExpression) trn;
-            if (bin.getOperation().getType() == Types.ASSIGN && bin.getLeftExpression() instanceof PropertyExpression) {
-                PropertyExpression leftExpression = (PropertyExpression) bin.getLeftExpression();
+        if (trn instanceof BinaryExpression bin) {
+            if (bin.getOperation().getType() == Types.ASSIGN && bin.getLeftExpression() instanceof PropertyExpression leftExpression) {
                 ClassNode traitType = getTraitSuperTarget(leftExpression.getObjectExpression());
                 if (traitType != null) {
                     ClassNode helperType = getHelper(traitType);
@@ -223,8 +221,7 @@ class SuperCallTraitTransformer extends ClassCodeExpressionTransformer {
     }
 
     private ClassNode getTraitSuperTarget(final Expression exp) {
-        if (exp instanceof PropertyExpression) {
-            PropertyExpression pexp = (PropertyExpression) exp;
+        if (exp instanceof PropertyExpression pexp) {
             Expression objExp = pexp.getObjectExpression();
             if (objExp instanceof ClassExpression) {
                 ClassNode type = objExp.getType();
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
index b2478262d5..70daf4acff 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitASTTransformation.java
@@ -131,8 +131,7 @@ public class TraitASTTransformation extends AbstractASTTransformation implements
         AnnotationNode anno = (AnnotationNode) nodes[0];
         if (!anno.getClassNode().equals(Traits.TRAIT_CLASSNODE)) return;
         init(nodes, source);
-        if (node instanceof ClassNode) {
-            ClassNode cNode = (ClassNode) node;
+        if (node instanceof ClassNode cNode) {
             if (!checkNotInterface(cNode, Traits.TRAIT_TYPE_NAME)) return;
 
             checkInnerClasses(cNode);
diff --git a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
index d0d9d21cde..787cf26543 100644
--- a/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
+++ b/src/main/java/org/codehaus/groovy/transform/trait/TraitReceiverTransformer.java
@@ -97,8 +97,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
         ClassNode weavedType = weaved.getOriginType();
         if (exp instanceof BinaryExpression) {
             return transformBinaryExpression((BinaryExpression) exp, weavedType);
-        } else if (exp instanceof MethodCallExpression) {
-            MethodCallExpression mce = (MethodCallExpression) exp;
+        } else if (exp instanceof MethodCallExpression mce) {
             String obj = mce.getObjectExpression().getText();
             if ("super".equals(obj)) {
                 return transformSuperMethodCall(mce); // super.m(x) --> $self.Ttrait$super$m(x)
@@ -108,8 +107,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
         } else if (exp instanceof FieldExpression) {
             FieldNode fn = ((FieldExpression) exp).getField();
             return transformFieldReference(exp, fn, fn.isStatic());
-        } else if (exp instanceof VariableExpression) {
-            VariableExpression vexp = (VariableExpression) exp;
+        } else if (exp instanceof VariableExpression vexp) {
             Variable accessedVariable = vexp.getAccessedVariable();
             if (accessedVariable instanceof FieldNode || accessedVariable instanceof PropertyNode) {
                 if (knownFields.contains(vexp.getName())) {
@@ -134,8 +132,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
             if (vexp.isSuperExpression()) {
                 throwSuperError(vexp);
             }
-        } else if (exp instanceof PropertyExpression) {
-            PropertyExpression pexp = (PropertyExpression) exp;
+        } else if (exp instanceof PropertyExpression pexp) {
             String obj = pexp.getObjectExpression().getText();
             if (pexp.isImplicitThis() || "this".equals(obj)) {
                 String propName = pexp.getPropertyAsString();
@@ -260,8 +257,7 @@ class TraitReceiverTransformer extends ClassCodeExpressionTransformer {
 
         Expression arguments = transform(call.getArguments());
         ArgumentListExpression superCallArgs = new ArgumentListExpression();
-        if (arguments instanceof ArgumentListExpression) {
-            ArgumentListExpression list = (ArgumentListExpression) arguments;
+        if (arguments instanceof ArgumentListExpression list) {
             for (Expression expression : list) {
                 superCallArgs.addExpression(expression);
             }
diff --git a/src/main/java/org/codehaus/groovy/util/ReferenceManager.java b/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
index dfd96953f7..54e7d9e410 100644
--- a/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
+++ b/src/main/java/org/codehaus/groovy/util/ReferenceManager.java
@@ -25,7 +25,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 public class ReferenceManager {
     private static class ThreadedReferenceManager extends ReferenceManager {
         private final Thread thread;
-        private volatile boolean shouldRun = true; 
+        private volatile boolean shouldRun = true;
         public ThreadedReferenceManager(ReferenceQueue queue) {
             super(queue);
             thread = new Thread(() -> {
@@ -40,8 +40,7 @@ public class ReferenceManager {
                     }
                     if (r==null) continue;
 
-                    if (r instanceof Reference) {
-                        Reference ref = (Reference) r;
+                    if (r instanceof Reference ref) {
                         Finalizable holder = ref.getHandler();
                         if (holder!=null) holder.finalizeReference();
                     }
@@ -58,7 +57,7 @@ public class ReferenceManager {
         public void stopThread() {
             shouldRun = false;
             thread.interrupt();
-        }        
+        }
         @Override
         public String toString() {
             return "ReferenceManager(threaded, thread="+thread+")";
@@ -101,8 +100,7 @@ public class ReferenceManager {
                 java.lang.ref.Reference r = queue.poll();
                 if (r==null) break;
 
-                if (r instanceof Reference) {
-                    Reference ref = (Reference) r;
+                if (r instanceof Reference ref) {
                     Finalizable holder = ref.getHandler();
                     if (holder!=null) holder.finalizeReference();
                 }
@@ -138,7 +136,7 @@ public class ReferenceManager {
                 // we change the manager once the threshold is reached. There is
                 // a small chance that the value will go beyond Integer.MAX_VALUE
                 // so we check for values below 0 too. If threshold is low, then
-                // this is unlikely to happen. If threshold is high, then we 
+                // this is unlikely to happen. If threshold is high, then we
                 // have all negative values as fall back
                 int count = refCnt.incrementAndGet();
                 if (count>threshold || count<0) {
@@ -158,8 +156,8 @@ public class ReferenceManager {
             public String toString() {
                 return "ReferenceManager(thresholded, current manager="+manager+", threshold="+refCnt.get()+"/"+threshold+")";
             }
-        };        
-    }  
+        };
+    }
 
     private ReferenceQueue queue;
 
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
index d17fca15fe..e813e3217f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/IndyInterface.java
@@ -385,8 +385,7 @@ public class IndyInterface {
     }
 
     private static <T> T doWithCallSite(MutableCallSite callSite, Object[] arguments, BiFunction<? super CacheableCallSite, ? super Object, ? extends T> f) {
-        if (callSite instanceof CacheableCallSite) {
-            CacheableCallSite cacheableCallSite = (CacheableCallSite) callSite;
+        if (callSite instanceof CacheableCallSite cacheableCallSite) {
             Object receiver = arguments[0];
 
             if (null == receiver) receiver = NullObject.getNullObject();
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
index 5d77b21a58..cab8b23ae8 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
@@ -364,19 +364,16 @@ public class Java8 implements VMPlugin {
         String typeName = definition.getClassNode().getName();
         if ("java.lang.annotation.Retention".equals(typeName)) {
             Expression exp = definition.getMember("value");
-            if (!(exp instanceof PropertyExpression)) return;
-            PropertyExpression pe = (PropertyExpression) exp;
+            if (!(exp instanceof PropertyExpression pe)) return;
             String name = pe.getPropertyAsString();
             RetentionPolicy policy = RetentionPolicy.valueOf(name);
             setRetentionPolicy(policy, root);
         } else if ("java.lang.annotation.Target".equals(typeName)) {
             Expression exp = definition.getMember("value");
-            if (!(exp instanceof ListExpression)) return;
-            ListExpression list = (ListExpression) exp;
+            if (!(exp instanceof ListExpression list)) return;
             int targets = 0;
             for (Expression e : list.getExpressions()) {
-                if (!(e instanceof PropertyExpression)) return;
-                PropertyExpression element = (PropertyExpression) e;
+                if (!(e instanceof PropertyExpression element)) return;
                 String name = element.getPropertyAsString();
                 ElementType type = ElementType.valueOf(name);
                 Integer target = elementTypeToTarget.get(type);
@@ -611,8 +608,7 @@ public class Java8 implements VMPlugin {
             return false;
         }
 
-        if (accessibleObject instanceof Constructor) {
-            Constructor<?> c = (Constructor<?>) accessibleObject;
+        if (accessibleObject instanceof Constructor<?> c) {
             if (c.getDeclaringClass() == Class.class) {
                 return false; // Cannot make a java.lang.Class constructor accessible
             }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
index a2901292c9..350b66d87a 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
@@ -418,8 +418,7 @@ public abstract class Selector {
             if (LOG_ENABLED) LOG.info("getting constructor");
             Object[] newArgs = removeRealReceiver(args);
             method = mci.retrieveConstructor(newArgs);
-            if (method instanceof MetaConstructor) {
-                MetaConstructor mcon = (MetaConstructor) method;
+            if (method instanceof MetaConstructor mcon) {
                 if (mcon.isBeanConstructor()) {
                     if (LOG_ENABLED) LOG.info("do beans constructor");
                     beanConstructor = true;
@@ -433,9 +432,8 @@ public abstract class Selector {
         @Override
         public void setHandleForMetaMethod() {
             if (method == null) return;
-            if (method instanceof MetaConstructor) {
+            if (method instanceof MetaConstructor mc) {
                 if (LOG_ENABLED) LOG.info("meta method is MetaConstructor instance");
-                MetaConstructor mc = (MetaConstructor) method;
                 isVargs = mc.isVargsMethod();
                 Constructor<?> con = mc.getCachedConstrcutor().getCachedConstructor();
                 try {
@@ -594,8 +592,7 @@ public abstract class Selector {
             var receiver = getCorrectedReceiver();
             if (receiver instanceof GroovyObject) {
                 mc = ((GroovyObject) receiver).getMetaClass();
-            } else if (receiver instanceof Class) {
-                Class<?> c = (Class<?>) receiver;
+            } else if (receiver instanceof Class<?> c) {
                 mc = GroovySystem.getMetaClassRegistry().getMetaClass(c);
                 cache &= !ClassInfo.getClassInfo(c).hasPerInstanceMetaClasses();
             } else {
@@ -662,9 +659,8 @@ public abstract class Selector {
                 metaMethod = ((ReflectionMetaMethod) metaMethod).getCachedMethod();
             }
 
-            if (metaMethod instanceof CachedMethod) {
+            if (metaMethod instanceof CachedMethod cm) {
                 isVargs = metaMethod.isVargsMethod();
-                CachedMethod cm = (CachedMethod) metaMethod;
                 VMPlugin vmplugin = VMPluginFactory.getPlugin();
                 cm = (CachedMethod) vmplugin.transformMetaMethod(mc, cm, sender);
                 try {
@@ -935,8 +931,7 @@ public abstract class Selector {
             MethodHandle fallback = callSite.getFallbackTarget();
 
             // special guards for receiver
-            if (receiver instanceof GroovyObject) {
-                GroovyObject go = (GroovyObject) receiver;
+            if (receiver instanceof GroovyObject go) {
                 MetaClass mc = go.getMetaClass();
                 MethodHandle test = SAME_MC.bindTo(mc);
                 // drop dummy receiver
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index b9d5d922f7..6981ee17a2 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -192,9 +192,8 @@ public class Java9 extends Java8 {
 
     @Override
     public MetaMethod transformMetaMethod(final MetaClass metaClass, final MetaMethod metaMethod, Class<?> caller) {
-        if (metaMethod instanceof CachedMethod) {
+        if (metaMethod instanceof CachedMethod cachedMethod) {
             if (caller == null) caller = ReflectionUtils.class;
-            CachedMethod  cachedMethod = (CachedMethod) metaMethod;
             CachedClass declaringClass = metaMethod.getDeclaringClass();
             Optional<CachedMethod> transformedMethod = Optional.ofNullable(cachedMethod.getTransformedMethod());
             if (transformedMethod.isEmpty()
@@ -282,11 +281,10 @@ public class Java9 extends Java8 {
             throw new IllegalCallerException(); // should not happen
         }
 
-        if (!(accessibleObject instanceof Member)) {
+        if (!(accessibleObject instanceof Member member)) {
             throw new IllegalArgumentException("accessibleObject should be a member of type: " + accessibleObject); // should not happen
         }
 
-        Member member = (Member) accessibleObject;
         Class<?> declaringClass = member.getDeclaringClass();
 
         Module callerModule = callerClass.getModule();
diff --git a/subprojects/groovy-ant/src/main/java/groovy/ant/AntBuilder.java b/subprojects/groovy-ant/src/main/java/groovy/ant/AntBuilder.java
index 5e0b6c164e..07dae0bc73 100644
--- a/subprojects/groovy-ant/src/main/java/groovy/ant/AntBuilder.java
+++ b/subprojects/groovy-ant/src/main/java/groovy/ant/AntBuilder.java
@@ -250,8 +250,7 @@ public class AntBuilder extends BuilderSupport {
         }
 
         // as in Target.execute()
-        if (node instanceof Task) {
-            Task task = (Task) node;
+        if (node instanceof Task task) {
             final String taskName = task.getTaskName();
 
             if ("antcall".equals(taskName) && parent == null) {
@@ -417,8 +416,7 @@ public class AntBuilder extends BuilderSupport {
         String tagName = name.toString();
         String ns = "";
 
-        if (name instanceof QName) {
-            QName q = (QName) name;
+        if (name instanceof QName q) {
             tagName = q.getLocalPart();
             ns = q.getNamespaceURI();
         }
diff --git a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
index 077fded670..d006256ec4 100644
--- a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
+++ b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
@@ -721,8 +721,7 @@ public class Groovy extends Java {
      * @return the name to use when compiling the script
      */
     private String computeScriptName() {
-        if (src instanceof FileResource) {
-            FileResource fr = (FileResource) src;
+        if (src instanceof FileResource fr) {
             return fr.getFile().getAbsolutePath();
         } else {
             String name = PREFIX;
diff --git a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
index d26bc3041d..9c8a4eddcb 100644
--- a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
+++ b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
@@ -1391,8 +1391,7 @@ public class Groovyc extends MatchingTask {
         }
 
         ClassLoader loader = getClass().getClassLoader();
-        if (loader instanceof AntClassLoader) {
-            @SuppressWarnings("resource") AntClassLoader antLoader = (AntClassLoader) loader;
+        if (loader instanceof @SuppressWarnings("resource") AntClassLoader antLoader) {
             String[] pathElm = antLoader.getClasspath().split(File.pathSeparator, -1);
             List<String> classpath = configuration.getClasspath();
             /*
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleTextEditor.java b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleTextEditor.java
index d255546dbd..03e0f7978a 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleTextEditor.java
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/ConsoleTextEditor.java
@@ -361,8 +361,7 @@ public class ConsoleTextEditor extends JScrollPane {
             doc.setDocumentFilter(documentFilter);
 
             disableMatchingHighlighter();
-            if (documentFilter instanceof SmartDocumentFilter) {
-                final SmartDocumentFilter smartDocumentFilter = (SmartDocumentFilter) documentFilter;
+            if (documentFilter instanceof SmartDocumentFilter smartDocumentFilter) {
                 enableMatchingHighlighter(smartDocumentFilter);
             }
         } catch (ReflectiveOperationException e) {
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/text/TextEditor.java b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/text/TextEditor.java
index fd8c9a6421..904b3a9c2a 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/text/TextEditor.java
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/text/TextEditor.java
@@ -496,8 +496,7 @@ public class TextEditor extends JTextPane implements Pageable, Printable {
 
     private void setRenderRange(int start, int stop) {
         DocumentFilter documentFilter = ((DefaultStyledDocument) TextEditor.this.getDocument()).getDocumentFilter();
-        if (documentFilter instanceof SmartDocumentFilter) {
-            SmartDocumentFilter smartDocumentFilter = (SmartDocumentFilter) documentFilter;
+        if (documentFilter instanceof SmartDocumentFilter smartDocumentFilter) {
             smartDocumentFilter.setRenderRange(Tuple.tuple(start, stop));
         }
     }
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
index a8d1770bcb..024d4168d1 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/ast/visitor/AnnotationClosureVisitor.java
@@ -335,8 +335,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
 
             // in case of a FieldNode, checks whether the FieldNode can be replaced with a Parameter
             Variable accessedVariable = getParameterCandidate(expression.getAccessedVariable());
-            if (accessedVariable instanceof FieldNode) {
-                FieldNode fieldNode = (FieldNode) accessedVariable;
+            if (accessedVariable instanceof FieldNode fieldNode) {
 
                 if (fieldNode.isPrivate() && !classNode.hasProperty(fieldNode.getName())) {
                     // if this is a class invariant we'll change the field node access
@@ -345,8 +344,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
                 }
             }
 
-            if (accessedVariable instanceof Parameter) {
-                Parameter parameter = (Parameter) accessedVariable;
+            if (accessedVariable instanceof Parameter parameter) {
                 if ("it".equals(parameter.getName())) {
                     addError("[groovy-contracts] Access to 'it' is not supported.", expression);
                 }
@@ -362,8 +360,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
             checkOperation(expression, expression.getOperation());
 
             if (secondPass) {
-                if (expression.getExpression() instanceof VariableExpression) {
-                    VariableExpression variableExpression = (VariableExpression) expression.getExpression();
+                if (expression.getExpression() instanceof VariableExpression variableExpression) {
                     if (variableExpressions.containsKey(variableExpression)) {
                         expression.setExpression(variableExpressions.get(variableExpression));
                     }
@@ -378,8 +375,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
             checkOperation(expression, expression.getOperation());
 
             if (secondPass) {
-                if (expression.getExpression() instanceof VariableExpression) {
-                    VariableExpression variableExpression = (VariableExpression) expression.getExpression();
+                if (expression.getExpression() instanceof VariableExpression variableExpression) {
                     if (variableExpressions.containsKey(variableExpression)) {
                         expression.setExpression(variableExpressions.get(variableExpression));
                     }
@@ -394,14 +390,12 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
             checkOperation(expression, expression.getOperation());
 
             if (secondPass) {
-                if (expression.getLeftExpression() instanceof VariableExpression) {
-                    VariableExpression variableExpression = (VariableExpression) expression.getLeftExpression();
+                if (expression.getLeftExpression() instanceof VariableExpression variableExpression) {
                     if (variableExpressions.containsKey(variableExpression)) {
                         expression.setLeftExpression(variableExpressions.get(variableExpression));
                     }
                 }
-                if (expression.getRightExpression() instanceof VariableExpression) {
-                    VariableExpression variableExpression = (VariableExpression) expression.getRightExpression();
+                if (expression.getRightExpression() instanceof VariableExpression variableExpression) {
                     if (variableExpressions.containsKey(variableExpression)) {
                         expression.setRightExpression(variableExpressions.get(variableExpression));
                     }
@@ -491,8 +485,7 @@ public class AnnotationClosureVisitor extends BaseVisitor implements ASTNodeMeta
                 // add a cast but only if an explicit cast is not already there and we haven't been here before
                 PropertyExpression propExpr = (PropertyExpression) super.transform(expr);
                 Expression objExpr = propExpr.getObjectExpression();
-                if (objExpr instanceof VariableExpression) {
-                    VariableExpression varExpr = (VariableExpression) objExpr;
+                if (objExpr instanceof VariableExpression varExpr) {
                     if ("old".equals(varExpr.getName())) {
                         String propName = propExpr.getPropertyAsString();
                         ClassNode declaringClass = methodNode.getDeclaringClass();
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/ClassInvariantGenerator.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/ClassInvariantGenerator.java
index 57919865fd..20b7b2fd0a 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/ClassInvariantGenerator.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/ClassInvariantGenerator.java
@@ -101,8 +101,7 @@ public class ClassInvariantGenerator extends BaseGenerator {
         Statement invariantMethodCall = stmt(callThisX(invariantMethod.getName()));
 
         final Statement statement = method.getCode();
-        if (statement instanceof BlockStatement && !isPrimitiveVoid(method.getReturnType()) && !(method instanceof ConstructorNode)) {
-            final BlockStatement blockStatement = (BlockStatement) statement;
+        if (statement instanceof BlockStatement blockStatement && !isPrimitiveVoid(method.getReturnType()) && !(method instanceof ConstructorNode)) {
 
             final List<ReturnStatement> returnStatements = AssertStatementCreationUtility.getReturnStatements(method);
             for (ReturnStatement returnStatement : returnStatements) {
@@ -111,8 +110,7 @@ public class ClassInvariantGenerator extends BaseGenerator {
 
             if (returnStatements.isEmpty()) blockStatement.addStatement(invariantMethodCall);
 
-        } else if (statement instanceof BlockStatement) {
-            final BlockStatement blockStatement = (BlockStatement) statement;
+        } else if (statement instanceof BlockStatement blockStatement) {
             blockStatement.addStatement(invariantMethodCall);
         } else {
             final BlockStatement assertionBlock = block(statement, invariantMethodCall);
diff --git a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/PreconditionGenerator.java b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/PreconditionGenerator.java
index 82c359069f..0a573def33 100644
--- a/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/PreconditionGenerator.java
+++ b/subprojects/groovy-contracts/src/main/java/org/apache/groovy/contracts/generation/PreconditionGenerator.java
@@ -100,9 +100,8 @@ public class PreconditionGenerator extends BaseGenerator {
         final BlockStatement modifiedMethodCode = block();
         modifiedMethodCode.addStatements(blockStatement.getStatements());
 
-        if (method.getCode() instanceof BlockStatement) {
+        if (method.getCode() instanceof BlockStatement methodBlock) {
 
-            BlockStatement methodBlock = (BlockStatement) method.getCode();
             for (Statement statement : methodBlock.getStatements()) {
                 if (method instanceof ConstructorNode && statement instanceof ExpressionStatement && ((ExpressionStatement) statement).getExpression() instanceof ConstructorCallExpression) {
                     modifiedMethodCode.getStatements().add(0, statement);
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
index beb5e39220..6c1792cdde 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/dsl/GinqAstBuilder.java
@@ -336,8 +336,7 @@ public class GinqAstBuilder extends CodeVisitorSupport implements SyntaxErrorRep
             TupleExpression tupleExpression = (TupleExpression) call.getArguments();
             if (1 == tupleExpression.getExpressions().size()) {
                 Expression firstExpression = tupleExpression.getExpressions().get(0);
-                if (firstExpression instanceof MethodCallExpression) {
-                    MethodCallExpression mce = (MethodCallExpression) firstExpression;
+                if (firstExpression instanceof MethodCallExpression mce) {
                     if (KW_DISTINCT.equals(mce.getMethodAsString())) {
                         tupleExpression = (TupleExpression) mce.getArguments();
                         currentGinqExpression.putNodeMetaData(GINQ_SELECT_DISTINCT, true);
@@ -345,8 +344,7 @@ public class GinqAstBuilder extends CodeVisitorSupport implements SyntaxErrorRep
                 }
             } else {
                 for (Expression expression : tupleExpression.getExpressions()) {
-                    if (expression instanceof MethodCallExpression) {
-                        MethodCallExpression mce = (MethodCallExpression) expression;
+                    if (expression instanceof MethodCallExpression mce) {
                         if (KW_DISTINCT.equals(mce.getMethodAsString())) {
                             this.collectSyntaxError(new GinqSyntaxError(
                                     "Invalid usage of `distinct`",
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/Queryable.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/Queryable.java
index dd53faeda1..a9940dd93c 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/Queryable.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/Queryable.java
@@ -550,8 +550,7 @@ public interface Queryable<T> {
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
-            if (!(o instanceof Order)) return false;
-            Order<?, ?> order = (Order<?, ?>) o;
+            if (!(o instanceof Order<?, ?> order)) return false;
             return asc == order.asc &&
                     keyExtractor.equals(order.keyExtractor);
         }
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
index 603cd97c01..efec5d32dd 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/QueryableCollection.java
@@ -661,8 +661,7 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
-            if (!(o instanceof PartitionCacheKey)) return false;
-            PartitionCacheKey that = (PartitionCacheKey) o;
+            if (!(o instanceof PartitionCacheKey that)) return false;
             return partitionKey.equals(that.partitionKey) && partitionId.equals(that.partitionId);
         }
 
@@ -684,8 +683,7 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
         @Override
         public boolean equals(Object o) {
             if (this == o) return true;
-            if (!(o instanceof SortedPartitionCacheKey)) return false;
-            SortedPartitionCacheKey that = (SortedPartitionCacheKey) o;
+            if (!(o instanceof SortedPartitionCacheKey that)) return false;
             return partition == that.partition && orderId.equals(that.orderId);
         }
 
@@ -777,8 +775,7 @@ class QueryableCollection<T> implements Queryable<T>, Serializable {
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof QueryableCollection)) return false;
-        QueryableCollection<?> that = (QueryableCollection<?>) o;
+        if (!(o instanceof QueryableCollection<?> that)) return false;
         return toList().equals(that.toList());
     }
 
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/WindowDefinitionImpl.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/WindowDefinitionImpl.java
index 8f24dfc8c9..97b94811a6 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/WindowDefinitionImpl.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/provider/collection/runtime/WindowDefinitionImpl.java
@@ -112,8 +112,7 @@ class WindowDefinitionImpl<T, U extends Comparable<? super U>> implements Window
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
-        if (!(o instanceof WindowDefinitionImpl)) return false;
-        WindowDefinitionImpl<?, ?> that = (WindowDefinitionImpl<?, ?>) o;
+        if (!(o instanceof WindowDefinitionImpl<?, ?> that)) return false;
         return Objects.equals(id, that.id);
     }
 
diff --git a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/transform/GinqASTTransformation.java b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/transform/GinqASTTransformation.java
index 1d3638c356..e6b333e6b0 100644
--- a/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/transform/GinqASTTransformation.java
+++ b/subprojects/groovy-ginq/src/main/groovy/org/apache/groovy/ginq/transform/GinqASTTransformation.java
@@ -67,8 +67,7 @@ public class GinqASTTransformation extends AbstractASTTransformation {
         AnnotationNode annotationNode = (AnnotationNode) nodes[0];
         if (!GQ_CLASS_NODE.equals(annotationNode.getClassNode())) return;
 
-        if (annotatedNode instanceof MethodNode) {
-            MethodNode methodNode = (MethodNode) annotatedNode;
+        if (annotatedNode instanceof MethodNode methodNode) {
             if (methodNode.isAbstract()) {
                 addError("Error during " + GQ_CLASS_NODE.getName() + " processing: annotation not allowed on abstract method '" + methodNode.getName() + "'", methodNode);
                 return;
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
index 16fe347ae3..a4f31b5084 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDoc.java
@@ -273,8 +273,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
         while (nextClass != null && nextClass.getSuperclass() != null && !Object.class.equals(nextClass)) {
             nextClass = nextClass.getSuperclass();
             GroovyClassDoc nextDoc = new ExternalGroovyClassDoc(nextClass);
-            if (prev instanceof SimpleGroovyClassDoc) {
-                SimpleGroovyClassDoc parent = (SimpleGroovyClassDoc) prev;
+            if (prev instanceof SimpleGroovyClassDoc parent) {
                 parent.setSuperClass(nextDoc);
             }
             result.add(0, nextDoc);
@@ -296,8 +295,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
             for (GroovyClassDoc t : temp) {
                 if (t instanceof SimpleGroovyClassDoc) {
                     next.addAll(((SimpleGroovyClassDoc)t).getParentInterfaces());
-                } else if (t instanceof ExternalGroovyClassDoc) {
-                    ExternalGroovyClassDoc d = (ExternalGroovyClassDoc) t;
+                } else if (t instanceof ExternalGroovyClassDoc d) {
                     next.addAll(getJavaInterfaces(d));
                 }
             }
@@ -400,10 +398,8 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
 
         // resolve property types
         for (GroovyFieldDoc property : properties)  {
-            if (property instanceof SimpleGroovyFieldDoc)  {
-                SimpleGroovyFieldDoc simpleGroovyFieldDoc = (SimpleGroovyFieldDoc) property;
-                if (simpleGroovyFieldDoc.type() instanceof SimpleGroovyType)  {
-                    SimpleGroovyType simpleGroovyType = (SimpleGroovyType) simpleGroovyFieldDoc.type();
+            if (property instanceof SimpleGroovyFieldDoc simpleGroovyFieldDoc)  {
+                if (simpleGroovyFieldDoc.type() instanceof SimpleGroovyType simpleGroovyType)  {
                     GroovyClassDoc propertyTypeClassDoc = resolveClass(rootDoc, simpleGroovyType.qualifiedTypeName());
                     if (propertyTypeClassDoc != null)  {
                         simpleGroovyFieldDoc.setType(propertyTypeClassDoc);
@@ -633,8 +629,7 @@ public class SimpleGroovyClassDoc extends SimpleGroovyAbstractableElementDoc imp
             if (slashIndex > 0) {
                 String outerName = name.substring(0, slashIndex);
                 GroovyClassDoc gcd = resolveClass(rootDoc, outerName);
-                if (gcd instanceof ExternalGroovyClassDoc) {
-                    ExternalGroovyClassDoc egcd = (ExternalGroovyClassDoc) gcd;
+                if (gcd instanceof ExternalGroovyClassDoc egcd) {
                     String innerName = name.substring(slashIndex+1);
                     Class outerClass = egcd.externalClass();
                     for (Class inner : outerClass.getDeclaredClasses()) {
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyEngine.java b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyEngine.java
index 3cb2d52fca..4c5bcdaa2c 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyEngine.java
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyEngine.java
@@ -1083,8 +1083,7 @@ public class GroovyEngine implements ScriptEngine {
                 try {
                     for (Object o : classesForPackage(domain, shell)) {
                         String name = null;
-                        if (o instanceof Class<?>) {
-                            Class<?> c = (Class<?>) o;
+                        if (o instanceof Class<?> c) {
                             try {
                                 if ((!Modifier.isPublic(c.getModifiers()) && !access.allClasses)
                                         || c.getCanonicalName() == null) {
@@ -1504,10 +1503,9 @@ public class GroovyEngine implements ScriptEngine {
 
         @SuppressWarnings("unchecked")
         private void doIdentifierCandidates(List<Candidate> candidates, Object object, String curBuf) {
-            if (!(object instanceof Map)) {
+            if (!(object instanceof Map<?, ?> map)) {
                 return;
             }
-            Map<?, ?> map = (Map<?, ?>) object;
             if (map.isEmpty() || !(map.keySet().iterator().next() instanceof String)) {
                 return;
             }
@@ -2228,16 +2226,14 @@ public class GroovyEngine implements ScriptEngine {
                 } catch (org.codehaus.groovy.control.MultipleCompilationErrorsException e) {
                     if (e.getErrorCollector().getErrors() != null) {
                         for (Object o : e.getErrorCollector().getErrors()) {
-                            if (o instanceof SyntaxErrorMessage) {
-                                SyntaxErrorMessage sem = (SyntaxErrorMessage) o;
+                            if (o instanceof SyntaxErrorMessage sem) {
                                 out.setErrorIndex(errorIndex(e.getMessage(), sem.getCause()));
                             }
                         }
                     }
                     if (e.getErrorCollector().getWarnings() != null) {
                         for (Object o : e.getErrorCollector().getWarnings()) {
-                            if (o instanceof SyntaxErrorMessage) {
-                                SyntaxErrorMessage sem = (SyntaxErrorMessage) o;
+                            if (o instanceof SyntaxErrorMessage sem) {
                                 out.setErrorIndex(errorIndex(e.getMessage(), sem.getCause()));
                             }
                         }
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/SystemRegistryImpl.java b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/SystemRegistryImpl.java
index 6a3849aa4c..321394d4da 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/SystemRegistryImpl.java
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/SystemRegistryImpl.java
@@ -269,8 +269,7 @@ public class SystemRegistryImpl implements SystemRegistry {
     }
 
     public void addCompleter(Completer completer) {
-        if (completer instanceof SystemCompleter) {
-            SystemCompleter sc = (SystemCompleter) completer;
+        if (completer instanceof SystemCompleter sc) {
             if (sc.isCompiled()) {
                 customAggregateCompleter.getCompleters().add(sc);
             } else {
diff --git a/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxBuilderModelMBean.java b/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxBuilderModelMBean.java
index fe67b0ba41..7242a07453 100644
--- a/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxBuilderModelMBean.java
+++ b/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxBuilderModelMBean.java
@@ -200,8 +200,7 @@ public class JmxBuilderModelMBean extends RequiredModelMBean implements Notifica
             if (event != null) {
                 Object del = event.get("managedObject");
                 Object callback = event.get("callback");
-                if (callback != null && callback instanceof Closure) {
-                    Closure closure = (Closure) callback;
+                if (callback != null && callback instanceof Closure closure) {
                     closure.setDelegate(del);
                     if (closure.getMaximumNumberOfParameters() == 1)
                         closure.call(buildAttributeNotificationPacket(note));
diff --git a/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxEventListener.java b/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxEventListener.java
index 26e7380fb0..1fadb5b695 100644
--- a/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxEventListener.java
+++ b/subprojects/groovy-jmx/src/main/java/groovy/jmx/builder/JmxEventListener.java
@@ -59,8 +59,7 @@ public class JmxEventListener implements NotificationListener {
         if (event != null) {
             Object del = event.get("managedObject");
             Object callback = event.get("callback");
-            if (callback != null && callback instanceof Closure) {
-                Closure closure = (Closure) callback;
+            if (callback != null && callback instanceof Closure closure) {
                 closure.setDelegate(del);
                 if (closure.getMaximumNumberOfParameters() == 1)
                     closure.call(buildOperationNotificationPacket(notification));
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java b/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java
index d2cf391e4f..66ae17f37a 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java
@@ -246,8 +246,7 @@ public class DefaultJsonGenerator implements JsonGenerator {
             if ( isStatic(mp.getModifiers())) continue; // GROOVY-7682
 
             // skip write-only property: see File
-            if (mp instanceof MetaBeanProperty) {
-                MetaBeanProperty mbp = (MetaBeanProperty) mp;
+            if (mp instanceof MetaBeanProperty mbp) {
                 if (mbp.getField() == null && mbp.getGetter() == null) continue;
             }
 
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/JsonBuilder.java b/subprojects/groovy-json/src/main/java/groovy/json/JsonBuilder.java
index c4563c7316..4fd097ebf1 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/JsonBuilder.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/JsonBuilder.java
@@ -317,8 +317,7 @@ public class JsonBuilder extends GroovyObjectSupport implements Writable {
             } else if (arr.length == 2) {
                 final Object first = arr[0];
                 final Object second = arr[1];
-                if (second instanceof Closure) {
-                    final Closure closure = (Closure)second;
+                if (second instanceof Closure closure) {
                     if (first instanceof Map) {
                         Map<String, Object> subMap = new LinkedHashMap<>();
                         subMap.putAll(asMap(first));
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java b/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
index 7d442490ce..380ad48630 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/StreamingJsonBuilder.java
@@ -463,8 +463,7 @@ public class StreamingJsonBuilder extends GroovyObjectSupport {
                         call(name);
                     break;
                     case 1:
-                        if (arr[0] instanceof Closure) {
-                            final Closure callable = (Closure) arr[0];
+                        if (arr[0] instanceof Closure callable) {
                             call(name, callable);
                         } else if (arr[0] instanceof Map) {
                             final Map<String, Map> map = Collections.singletonMap(name, (Map) arr[0]);
@@ -482,8 +481,7 @@ public class StreamingJsonBuilder extends GroovyObjectSupport {
                             final Closure callable = (Closure) second;
                             call(name, (Map)first, callable);
                         }
-                        else if(isClosure && first instanceof Iterable) {
-                            final Iterable coll = (Iterable) first;
+                        else if(isClosure && first instanceof Iterable coll) {
                             final Closure callable = (Closure) second;
                             call(name, coll, callable);
                         }
diff --git a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/LazyValueMap.java b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/LazyValueMap.java
index e7d9373b29..26fff71fae 100644
--- a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/LazyValueMap.java
+++ b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/LazyValueMap.java
@@ -121,11 +121,9 @@ public class LazyValueMap extends AbstractMap<String, Object> implements ValueMa
      */
     private void lazyChopIfNeeded(Object object) {
         if (lazyChop) {
-            if (object instanceof LazyValueMap) {
-                LazyValueMap m = (LazyValueMap) object;
+            if (object instanceof LazyValueMap m) {
                 m.chopMap();
-            } else if (object instanceof ValueList) {
-                ValueList list = (ValueList) object;
+            } else if (object instanceof ValueList list) {
                 list.chopList();
             }
         }
@@ -159,18 +157,15 @@ public class LazyValueMap extends AbstractMap<String, Object> implements ValueMa
             for (Map.Entry<String, Object> entry : map.entrySet()) {
 
                 Object object = entry.getValue();
-                if (object instanceof Value) {
-                    Value value = (Value) object;
+                if (object instanceof Value value) {
                     if (value.isContainer()) {
                         chopContainer(value);
                     } else {
                         value.chop();
                     }
-                } else if (object instanceof LazyValueMap) {
-                    LazyValueMap m = (LazyValueMap) object;
+                } else if (object instanceof LazyValueMap m) {
                     m.chopMap();
-                } else if (object instanceof ValueList) {
-                    ValueList list = (ValueList) object;
+                } else if (object instanceof ValueList list) {
                     list.chopList();
                 }
             }
@@ -180,11 +175,9 @@ public class LazyValueMap extends AbstractMap<String, Object> implements ValueMa
     /* We need to chop up this child container. */
     private static void chopContainer(Value value) {
         Object obj = value.toValue();
-        if (obj instanceof LazyValueMap) {
-            LazyValueMap map = (LazyValueMap) obj;
+        if (obj instanceof LazyValueMap map) {
             map.chopMap();
-        } else if (obj instanceof ValueList) {
-            ValueList list = (ValueList) obj;
+        } else if (obj instanceof ValueList list) {
             list.chopList();
         }
     }
diff --git a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ValueList.java b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ValueList.java
index 489cd2c2b2..568d8bfab3 100644
--- a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ValueList.java
+++ b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ValueList.java
@@ -85,8 +85,7 @@ public class ValueList extends AbstractList<Object> {
         for (Object obj : list) {
             if (obj == null) continue;
 
-            if (obj instanceof Value) {
-                Value value = (Value) obj;
+            if (obj instanceof Value value) {
                 if (value.isContainer()) {
                     chopContainer(value);
                 } else {
@@ -98,11 +97,9 @@ public class ValueList extends AbstractList<Object> {
 
     private void chopIfNeeded(Object object) {
         if (lazyChop) {
-            if (object instanceof LazyValueMap) {
-                LazyValueMap m = (LazyValueMap) object;
+            if (object instanceof LazyValueMap m) {
                 m.chopMap();
-            } else if (object instanceof ValueList) {
-                ValueList list = (ValueList) object;
+            } else if (object instanceof ValueList list) {
                 list.chopList();
             }
         }
@@ -110,11 +107,9 @@ public class ValueList extends AbstractList<Object> {
 
     static void chopContainer(Value value) {
         Object obj = value.toValue();
-        if (obj instanceof LazyValueMap) {
-            LazyValueMap map = (LazyValueMap) obj;
+        if (obj instanceof LazyValueMap map) {
             map.chopMap();
-        } else if (obj instanceof ValueList) {
-            ValueList list = (ValueList) obj;
+        } else if (obj instanceof ValueList list) {
             list.chopList();
         }
     }
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/methods/MacroGroovyMethods.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/methods/MacroGroovyMethods.java
index 6a8480ee33..264cf22ccc 100644
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/methods/MacroGroovyMethods.java
+++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/methods/MacroGroovyMethods.java
@@ -177,13 +177,11 @@ public class MacroGroovyMethods {
             return null;
         }
 
-        if (!(macroCallArguments instanceof TupleExpression)) {
+        if (!(macroCallArguments instanceof TupleExpression tupleArguments)) {
             source.addError(new SyntaxException("Call should have TupleExpression as arguments" + '\n', macroCallArguments));
             return null;
         }
 
-        TupleExpression tupleArguments = (TupleExpression) macroCallArguments;
-
         if (tupleArguments.getExpressions() == null) {
             source.addError(new SyntaxException("Call arguments should have expressions" + '\n', tupleArguments));
             return null;
diff --git a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
index 89ccb524ae..b4b9f437dd 100644
--- a/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
+++ b/subprojects/groovy-macro/src/main/groovy/org/codehaus/groovy/macro/runtime/MacroBuilder.java
@@ -99,12 +99,10 @@ public enum MacroBuilder {
         ClassCodeExpressionTransformer trn = new ClassCodeExpressionTransformer() {
             @Override
             public Expression transform(Expression expression) {
-                if (!(expression instanceof MethodCallExpression)) {
+                if (!(expression instanceof MethodCallExpression call)) {
                     return super.transform(expression);
                 }
 
-                MethodCallExpression call = (MethodCallExpression) expression;
-
                 if (!DOLLAR_VALUE.equals(call.getMethodAsString())) {
                     return super.transform(expression);
                 }
diff --git a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
index 37c970c106..2cf87875d8 100644
--- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
+++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
@@ -4334,8 +4334,7 @@ public class Sql implements AutoCloseable {
         int i = 1;
         ParameterMetaData metaData = getParameterMetaDataSafe(statement);
         if (metaData != null) {
-            if (metaData.getParameterCount() == 0 && params.size() == 1 && params.get(0) instanceof Map) {
-                Map paramsMap = (Map) params.get(0);
+            if (metaData.getParameterCount() == 0 && params.size() == 1 && params.get(0) instanceof Map paramsMap) {
                 if (paramsMap.isEmpty()) return;
             }
             // GROOVY-8174: we'd like stricter checking here but many drivers currently in use just aren't consistent enough, so we log
@@ -4369,8 +4368,7 @@ public class Sql implements AutoCloseable {
     protected void setObject(PreparedStatement statement, int i, Object value)
             throws SQLException {
         if (value instanceof InParameter || value instanceof OutParameter) {
-            if (value instanceof InParameter) {
-                InParameter in = (InParameter) value;
+            if (value instanceof InParameter in) {
                 Object val = in.getValue();
                 if (null == val) {
                     statement.setNull(i, in.getType());
@@ -4378,9 +4376,8 @@ public class Sql implements AutoCloseable {
                     statement.setObject(i, val, in.getType());
                 }
             }
-            if (value instanceof OutParameter) {
+            if (value instanceof OutParameter out) {
                 try {
-                    OutParameter out = (OutParameter) value;
                     ((CallableStatement) statement).registerOutParameter(i, out.getType());
                 } catch (ClassCastException e) {
                     throw new SQLException("Cannot register out parameter.");
diff --git a/subprojects/groovy-swing/src/main/java/groovy/swing/model/DefaultTableColumn.java b/subprojects/groovy-swing/src/main/java/groovy/swing/model/DefaultTableColumn.java
index e51af1efda..faf1014fa4 100644
--- a/subprojects/groovy-swing/src/main/java/groovy/swing/model/DefaultTableColumn.java
+++ b/subprojects/groovy-swing/src/main/java/groovy/swing/model/DefaultTableColumn.java
@@ -20,12 +20,12 @@ package groovy.swing.model;
 
 import javax.swing.table.TableColumn;
 
-/** 
+/**
  * Represents a column using a ValueModel to extract the value.
  */
 public class DefaultTableColumn extends TableColumn {
 
-    private ValueModel valueModel;    
+    private ValueModel valueModel;
 
     public DefaultTableColumn(ValueModel valueModel) {
         this.valueModel = valueModel;
@@ -53,18 +53,16 @@ public class DefaultTableColumn extends TableColumn {
      * @param row the row of interest
      * @param rowIndex the index of the row of interest
      * @param columnIndex the column of interest
-     */    
+     */
     public Object getValue(Object row, int rowIndex, int columnIndex) {
-        if (valueModel instanceof NestedValueModel) {
-            NestedValueModel nestedModel = (NestedValueModel) valueModel;
+        if (valueModel instanceof NestedValueModel nestedModel) {
             nestedModel.getSourceModel().setValue(row);
         }
         return valueModel.getValue();
     }
 
     public void setValue(Object row, Object value, int rowIndex, int columnIndex) {
-        if (valueModel instanceof NestedValueModel) {
-            NestedValueModel nestedModel = (NestedValueModel) valueModel;
+        if (valueModel instanceof NestedValueModel nestedModel) {
             nestedModel.getSourceModel().setValue(row);
         }
         valueModel.setValue(value);
@@ -81,4 +79,4 @@ public class DefaultTableColumn extends TableColumn {
         return valueModel;
     }
 
-}
\ No newline at end of file
+}
diff --git a/subprojects/groovy-templates/src/main/groovy/groovy/text/XmlTemplateEngine.java b/subprojects/groovy-templates/src/main/groovy/groovy/text/XmlTemplateEngine.java
index 7eb165ded9..a38f432a16 100644
--- a/subprojects/groovy-templates/src/main/groovy/groovy/text/XmlTemplateEngine.java
+++ b/subprojects/groovy-templates/src/main/groovy/groovy/text/XmlTemplateEngine.java
@@ -239,8 +239,7 @@ public class XmlTemplateEngine extends TemplateEngine {
         @Override
         protected boolean printSpecialNode(Node node) {
             Object name = node.name();
-            if (name instanceof QName) {
-                QName qn = (QName) name;
+            if (name instanceof QName qn) {
                 // check uri and for legacy cases just check prefix name (not recommended)
                 if ("http://groovy.codehaus.org/2005/gsp".equals(qn.getNamespaceURI()) || "gsp".equals(qn.getPrefix())) {
                     String s = qn.getLocalPart();
diff --git a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
index aa4f1b424a..c3f7915e2a 100644
--- a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
+++ b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupBuilderCodeTransformer.java
@@ -86,13 +86,11 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
         if (exp instanceof MethodCallExpression) {
             return transformMethodCall((MethodCallExpression) exp);
         }
-        if (exp instanceof ClosureExpression) {
-            ClosureExpression cl = (ClosureExpression) exp;
+        if (exp instanceof ClosureExpression cl) {
             cl.getCode().visit(this);
             return cl;
         }
-        if (exp instanceof VariableExpression) {
-            VariableExpression var = (VariableExpression) exp;
+        if (exp instanceof VariableExpression var) {
             if (var.getAccessedVariable() instanceof DynamicVariable) {
                 MethodCallExpression callGetModel = new MethodCallExpression(
                         new VariableExpression("this"),
@@ -130,8 +128,7 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
         Expression left = bin.getLeftExpression();
         Expression right = bin.getRightExpression();
         boolean assignment = bin.getOperation().getType() == Types.ASSIGN;
-        if (assignment && left instanceof VariableExpression) {
-            VariableExpression var = (VariableExpression) left;
+        if (assignment && left instanceof VariableExpression var) {
             if (var.getAccessedVariable() instanceof DynamicVariable) {
                 String varName = var.getName();
                 if (!"modelTypes".equals(varName)) {
@@ -153,8 +150,7 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
                 }
             }
         }
-        if (assignment && left instanceof VariableExpression && right instanceof ClosureExpression) {
-            VariableExpression var = (VariableExpression) left;
+        if (assignment && left instanceof VariableExpression var && right instanceof ClosureExpression) {
             if ("modelTypes".equals(var.getName())) {
                 // template declaring its expected types from model directly
                 // modelTypes = {
@@ -177,8 +173,7 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
     }
 
     private void extractModelTypesFromStatement(final Statement code, final Map<String, ClassNode> model) {
-        if (code instanceof BlockStatement) {
-            BlockStatement block = (BlockStatement) code;
+        if (code instanceof BlockStatement block) {
             for (Statement statement : block.getStatements()) {
                 extractModelTypesFromStatement(statement, model);
             }
@@ -240,8 +235,7 @@ class MarkupBuilderCodeTransformer extends ClassCodeExpressionTransformer {
         Expression arguments = exp.getArguments();
         if (arguments instanceof TupleExpression) {
             List<Expression> expressions = ((TupleExpression) arguments).getExpressions();
-            if (expressions.size() == 1 && expressions.get(0) instanceof MapExpression) {
-                MapExpression map = (MapExpression) expressions.get(0);
+            if (expressions.size() == 1 && expressions.get(0) instanceof MapExpression map) {
                 List<MapEntryExpression> entries = map.getMapEntryExpressions();
                 if (entries.size() == 1) {
                     MapEntryExpression mapEntry = entries.get(0);
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/DOMBuilder.java b/subprojects/groovy-xml/src/main/java/groovy/xml/DOMBuilder.java
index 3a818f553c..8bfd974eed 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/DOMBuilder.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/DOMBuilder.java
@@ -73,7 +73,7 @@ public class DOMBuilder extends BuilderSupport {
 
     /**
      * Creates a DocumentBuilder and uses it to parse the XML text read from the given reader, allowing
-     * parser validation and namespace awareness to be controlled. Documents are not allowed to contain 
+     * parser validation and namespace awareness to be controlled. Documents are not allowed to contain
      * DOCYTYPE declarations.
      *
      * @param reader         the reader to read the XML text from
@@ -154,8 +154,7 @@ public class DOMBuilder extends BuilderSupport {
         if (document == null) {
             document = createDocument();
         }
-        if (name instanceof QName) {
-            QName qname = (QName) name;
+        if (name instanceof QName qname) {
             return document.createElementNS(qname.getNamespaceURI(), qname.getQualifiedName());
         } else {
             return document.createElement(name.toString());
@@ -218,8 +217,7 @@ public class DOMBuilder extends BuilderSupport {
             }
             if (key instanceof String) {
                 setStringNS(element, key, value);
-            } else if (key instanceof QName) {
-                QName qname = (QName) key;
+            } else if (key instanceof QName qname) {
                 element.setAttributeNS(qname.getNamespaceURI(), qname.getQualifiedName(), value.toString());
             } else {
                 throw new IllegalArgumentException("The key: " + key + " should be an instance of " + QName.class);
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/SAXBuilder.java b/subprojects/groovy-xml/src/main/java/groovy/xml/SAXBuilder.java
index 4e86dc97c3..823accdbdb 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/SAXBuilder.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/SAXBuilder.java
@@ -134,8 +134,7 @@ public class SAXBuilder extends BuilderSupport {
         String localName;
         String qualifiedName;
 
-        if (name instanceof QName) {
-            QName qname = (QName) name;
+        if (name instanceof QName qname) {
             uri = qname.getNamespaceURI();
             localName = qname.getLocalPart();
             qualifiedName = qname.getQualifiedName();
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlNodePrinter.java b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlNodePrinter.java
index 9225a2fcab..5814596640 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlNodePrinter.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlNodePrinter.java
@@ -294,8 +294,7 @@ public class XmlNodePrinter {
         if (namespaceAware) {
             if (object instanceof Node) {
                 printNamespace(((Node) object).name(), ctx);
-            } else if (object instanceof QName) {
-                QName qname = (QName) object;
+            } else if (object instanceof QName qname) {
                 String namespaceUri = qname.getNamespaceURI();
                 if (namespaceUri != null) {
                     String prefix = qname.getPrefix();
@@ -350,8 +349,7 @@ public class XmlNodePrinter {
     protected String getName(Object object) {
         if (object instanceof String) {
             return (String) object;
-        } else if (object instanceof QName) {
-            QName qname = (QName) object;
+        } else if (object instanceof QName qname) {
             if (!namespaceAware) {
                 return qname.getLocalPart();
             }
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java b/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
index fe44186178..1a6608d621 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
@@ -327,8 +327,7 @@ public class DOMCategory {
     public static Element appendNode(Element self, Object name, String value) {
         Document doc = self.getOwnerDocument();
         Element newChild;
-        if (name instanceof QName) {
-            QName qn = (QName) name;
+        if (name instanceof QName qn) {
             newChild = doc.createElementNS(qn.getNamespaceURI(), qn.getQualifiedName());
         } else {
             newChild = doc.createElement(name.toString());
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/streamingmarkupsupport/BaseMarkupBuilder.java b/subprojects/groovy-xml/src/main/java/groovy/xml/streamingmarkupsupport/BaseMarkupBuilder.java
index 7375f93dfb..f6e46b1540 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/streamingmarkupsupport/BaseMarkupBuilder.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/streamingmarkupsupport/BaseMarkupBuilder.java
@@ -123,8 +123,7 @@ public class BaseMarkupBuilder extends Builder {
 
                 if (arg instanceof Map) {
                     attrs = (Map) arg;
-                } else if (arg instanceof Closure) {
-                    final Closure c = ((Closure) arg);
+                } else if (arg instanceof Closure c) {
 
                     c.setDelegate(this);
                     body = c.asWritable();
diff --git a/subprojects/groovy-xml/src/main/java/org/apache/groovy/xml/tools/DomToGroovy.java b/subprojects/groovy-xml/src/main/java/org/apache/groovy/xml/tools/DomToGroovy.java
index 5e5017ce55..3abe115afd 100644
--- a/subprojects/groovy-xml/src/main/java/org/apache/groovy/xml/tools/DomToGroovy.java
+++ b/subprojects/groovy-xml/src/main/java/org/apache/groovy/xml/tools/DomToGroovy.java
@@ -178,8 +178,7 @@ public class DomToGroovy {
 
     private void printChildren(Element element, Map namespaces, boolean endWithComma, boolean hasAttributes, NodeList list, int length) {
         Node node = list.item(0);
-        if (length == 1 && node instanceof Text) {
-            Text textNode = (Text) node;
+        if (length == 1 && node instanceof Text textNode) {
             String text = getTextNodeData(textNode);
             if (hasAttributes) print(", ");
             printQuoted(text);