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 ee285e5e95 Trivial refactor: simplify code with switch expression
ee285e5e95 is described below

commit ee285e5e955f18052cb62fe6c09f0c977f4e30be
Author: Daniel Sun <[email protected]>
AuthorDate: Sun Feb 1 12:08:26 2026 +0900

    Trivial refactor: simplify code with switch expression
---
 src/main/java/groovy/lang/ExpandoMetaClass.java    |  14 +-
 src/main/java/groovy/lang/GroovyClassLoader.java   |  13 +-
 src/main/java/groovy/util/ObservableList.java      |  26 +--
 src/main/java/groovy/util/ObservableMap.java       |  23 +--
 .../apache/groovy/ast/tools/ExpressionUtils.java   |  50 ++---
 .../org/codehaus/groovy/ast/AnnotationNode.java    |  40 ++--
 .../codehaus/groovy/ast/tools/ClosureUtils.java    |  18 +-
 .../groovy/classgen/FinalVariableAnalyzer.java     |  10 +-
 .../groovy/runtime/ArrayGroovyMethods.java         |  24 ++-
 .../org/codehaus/groovy/runtime/MethodClosure.java |  13 +-
 .../java/org/codehaus/groovy/syntax/TokenUtil.java |  56 +++---
 .../java/org/codehaus/groovy/syntax/Types.java     |  77 +++-----
 .../transform/OperatorRenameASTTransformation.java |  71 ++-----
 .../transform/stc/SignatureCodecVersion1.java      |  23 +--
 .../transform/stc/StaticTypeCheckingSupport.java   | 206 ++++++---------------
 .../transform/stc/StaticTypeCheckingVisitor.java   |  10 +-
 .../vmplugin/v8/PluginDefaultGroovyMethods.java    |  11 +-
 .../org/codehaus/groovy/vmplugin/v8/Selector.java  |  29 ++-
 .../datetime/extensions/DateTimeExtensions.java    |  16 +-
 .../groovy/groovysh/jline/GroovyPosixCommands.java |  52 ++----
 .../src/main/java/groovy/json/JsonSlurper.java     |  24 +--
 .../src/main/java/groovy/json/JsonTokenType.java   |  42 ++---
 .../groovy/json/internal/BaseJsonParser.java       |  13 +-
 .../apache/groovy/json/internal/ByteScanner.java   |  29 +--
 .../apache/groovy/json/internal/CharScanner.java   |  13 +-
 .../groovy/json/internal/JsonFastParser.java       |  52 ++----
 .../groovy/json/internal/JsonParserCharArray.java  |  57 ++----
 .../internal/JsonParserUsingCharacterSource.java   |  58 ++----
 .../src/main/java/groovy/sql/SqlWhereVisitor.java  |  16 +-
 .../src/main/java/groovy/xml/XmlUtil.java          |  21 +--
 .../markupsupport/StandardXmlAttributeFilter.java  |  17 +-
 .../xml/markupsupport/StandardXmlFilter.java       |  17 +-
 32 files changed, 354 insertions(+), 787 deletions(-)

diff --git a/src/main/java/groovy/lang/ExpandoMetaClass.java 
b/src/main/java/groovy/lang/ExpandoMetaClass.java
index d60b5d12d7..4ceee629b7 100644
--- a/src/main/java/groovy/lang/ExpandoMetaClass.java
+++ b/src/main/java/groovy/lang/ExpandoMetaClass.java
@@ -720,16 +720,10 @@ public class ExpandoMetaClass extends MetaClassImpl 
implements GroovyObject {
     }
 
     public static boolean isValidExpandoProperty(String property) {
-        switch (property) {
-        case META_CLASS_PROPERTY:
-        case CLASS_PROPERTY:
-        case META_METHODS:
-        case METHODS:
-        case PROPERTIES:
-            return false;
-        default:
-            return true;
-        }
+        return switch (property) {
+            case META_CLASS_PROPERTY, CLASS_PROPERTY, META_METHODS, METHODS, 
PROPERTIES -> false;
+            default -> true;
+        };
     }
 
     /* (non-Javadoc)
diff --git a/src/main/java/groovy/lang/GroovyClassLoader.java 
b/src/main/java/groovy/lang/GroovyClassLoader.java
index 219c0a476d..45a9417e36 100644
--- a/src/main/java/groovy/lang/GroovyClassLoader.java
+++ b/src/main/java/groovy/lang/GroovyClassLoader.java
@@ -1240,14 +1240,11 @@ public class GroovyClassLoader extends URLClassLoader {
      */
     public String genEncodingString(CharSequence chars) {
         try {
-            switch(HASH_ALGORITHM) {
-                case "md5":
-                    return EncodingGroovyMethods.md5(chars);
-                case "sha256":
-                    return EncodingGroovyMethods.sha256(chars);
-                default:
-                    throw new IllegalStateException("Unknown hash algorithm");
-            }
+            return switch (HASH_ALGORITHM) {
+                case "md5" -> EncodingGroovyMethods.md5(chars);
+                case "sha256" -> EncodingGroovyMethods.sha256(chars);
+                default -> throw new IllegalStateException("Unknown hash 
algorithm");
+            };
         } catch (NoSuchAlgorithmException e) {
             throw new GroovyRuntimeException(e);
         }
diff --git a/src/main/java/groovy/util/ObservableList.java 
b/src/main/java/groovy/util/ObservableList.java
index e710c65333..f93773e75e 100644
--- a/src/main/java/groovy/util/ObservableList.java
+++ b/src/main/java/groovy/util/ObservableList.java
@@ -488,23 +488,15 @@ public class ObservableList implements List {
         public static final Object newValue = new Object[0];
 
         public static ChangeType resolve(int ordinal) {
-            switch (ordinal) {
-                case 0:
-                    return ADDED;
-                case 2:
-                    return REMOVED;
-                case 3:
-                    return CLEARED;
-                case 4:
-                    return MULTI_ADD;
-                case 5:
-                    return MULTI_REMOVE;
-                case 6:
-                    return NONE;
-                case 1:
-                default:
-                    return UPDATED;
-            }
+            return switch (ordinal) {
+                case 0 -> ADDED;
+                case 2 -> REMOVED;
+                case 3 -> CLEARED;
+                case 4 -> MULTI_ADD;
+                case 5 -> MULTI_REMOVE;
+                case 6 -> NONE;
+                default -> UPDATED;
+            };
         }
     }
 
diff --git a/src/main/java/groovy/util/ObservableMap.java 
b/src/main/java/groovy/util/ObservableMap.java
index 2d5780a198..bdfc0653de 100644
--- a/src/main/java/groovy/util/ObservableMap.java
+++ b/src/main/java/groovy/util/ObservableMap.java
@@ -325,21 +325,14 @@ public class ObservableMap implements Map {
         public static final Object newValue = new Object[0];
 
         public static ChangeType resolve(int ordinal) {
-            switch (ordinal) {
-                case 0:
-                    return ADDED;
-                case 2:
-                    return REMOVED;
-                case 3:
-                    return CLEARED;
-                case 4:
-                    return MULTI;
-                case 5:
-                    return NONE;
-                case 1:
-                default:
-                    return UPDATED;
-            }
+            return switch (ordinal) {
+                case 0 -> ADDED;
+                case 2 -> REMOVED;
+                case 3 -> CLEARED;
+                case 4 -> MULTI;
+                case 5 -> NONE;
+                default -> UPDATED;
+            };
         }
     }
 
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 b6f29a893b..b4e894847d 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ExpressionUtils.java
@@ -138,42 +138,20 @@ public final class ExpressionUtils {
                     Number left  = safeNumber((ConstantExpression) leftX);
                     Number right = safeNumber((ConstantExpression) rightX);
                     if (left == null || right == null) return null;
-                    Number result = null;
-                    switch (opType) {
-                      case PLUS:
-                        result = NumberMath.add(left, right);
-                        break;
-                      case MINUS:
-                        result = NumberMath.subtract(left, right);
-                        break;
-                      case MULTIPLY:
-                        result = NumberMath.multiply(left, right);
-                        break;
-                      case DIVIDE:
-                        result = NumberMath.divide(left, right);
-                        break;
-                      case LEFT_SHIFT:
-                        result = NumberMath.leftShift(left, right);
-                        break;
-                      case RIGHT_SHIFT:
-                        result = NumberMath.rightShift(left, right);
-                        break;
-                      case RIGHT_SHIFT_UNSIGNED:
-                        result = NumberMath.rightShiftUnsigned(left, right);
-                        break;
-                      case BITWISE_AND:
-                        result = NumberMath.and(left, right);
-                        break;
-                      case BITWISE_OR:
-                        result = NumberMath.or(left, right);
-                        break;
-                      case BITWISE_XOR:
-                        result = NumberMath.xor(left, right);
-                        break;
-                      case POWER:
-                        result = DefaultGroovyMethods.power(left, right);
-                        break;
-                    }
+                    Number result = switch (opType) {
+                        case PLUS -> NumberMath.add(left, right);
+                        case MINUS -> NumberMath.subtract(left, right);
+                        case MULTIPLY -> NumberMath.multiply(left, right);
+                        case DIVIDE -> NumberMath.divide(left, right);
+                        case LEFT_SHIFT -> NumberMath.leftShift(left, right);
+                        case RIGHT_SHIFT -> NumberMath.rightShift(left, right);
+                        case RIGHT_SHIFT_UNSIGNED -> 
NumberMath.rightShiftUnsigned(left, right);
+                        case BITWISE_AND -> NumberMath.and(left, right);
+                        case BITWISE_OR -> NumberMath.or(left, right);
+                        case BITWISE_XOR -> NumberMath.xor(left, right);
+                        case POWER -> DefaultGroovyMethods.power(left, right);
+                        default -> null;
+                    };
                     if (result != null) {
                         ConstantExpression constantExpression = 
transformNumberConstantExpression(be, wrapperType, result);
                         if (constantExpression != null) return 
constantExpression;
diff --git a/src/main/java/org/codehaus/groovy/ast/AnnotationNode.java 
b/src/main/java/org/codehaus/groovy/ast/AnnotationNode.java
index f91724e94c..cadb2e9a6c 100644
--- a/src/main/java/org/codehaus/groovy/ast/AnnotationNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/AnnotationNode.java
@@ -173,32 +173,20 @@ public class AnnotationNode extends ASTNode {
     }
 
     public static String targetToName(int target) {
-        switch(target) {
-            case TYPE_TARGET:
-                return "TYPE";
-            case CONSTRUCTOR_TARGET:
-                return "CONSTRUCTOR";
-            case METHOD_TARGET:
-                return "METHOD";
-            case FIELD_TARGET:
-                return "FIELD";
-            case PARAMETER_TARGET:
-                return "PARAMETER";
-            case LOCAL_VARIABLE_TARGET:
-                return "LOCAL_VARIABLE";
-            case ANNOTATION_TARGET:
-                return "ANNOTATION";
-            case PACKAGE_TARGET:
-                return "PACKAGE";
-            case TYPE_PARAMETER_TARGET:
-                return "TYPE_PARAMETER";
-            case TYPE_USE_TARGET:
-                return "TYPE_USE";
-            case RECORD_COMPONENT_TARGET:
-                return "RECORD_COMPONENT";
-            default:
-                return "unknown target";
-        }
+        return switch (target) {
+            case TYPE_TARGET -> "TYPE";
+            case CONSTRUCTOR_TARGET -> "CONSTRUCTOR";
+            case METHOD_TARGET -> "METHOD";
+            case FIELD_TARGET -> "FIELD";
+            case PARAMETER_TARGET -> "PARAMETER";
+            case LOCAL_VARIABLE_TARGET -> "LOCAL_VARIABLE";
+            case ANNOTATION_TARGET -> "ANNOTATION";
+            case PACKAGE_TARGET -> "PACKAGE";
+            case TYPE_PARAMETER_TARGET -> "TYPE_PARAMETER";
+            case TYPE_USE_TARGET -> "TYPE_USE";
+            case RECORD_COMPONENT_TARGET -> "RECORD_COMPONENT";
+            default -> "unknown target";
+        };
     }
 
     @Override
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java 
b/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
index d0788f6fa4..d1fe25837c 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/ClosureUtils.java
@@ -89,16 +89,12 @@ public class ClosureUtils {
      * @since 3.0.5
      */
     public static String getResolveStrategyName(final int resolveStrategy) {
-        switch (resolveStrategy) {
-            case Closure.DELEGATE_FIRST:
-                return "DELEGATE_FIRST";
-            case Closure.DELEGATE_ONLY:
-                return "DELEGATE_ONLY";
-            case Closure.OWNER_ONLY:
-                return "OWNER_ONLY";
-            case Closure.TO_SELF:
-                return "TO_SELF";
-        }
-        return "OWNER_FIRST";
+        return switch (resolveStrategy) {
+            case Closure.DELEGATE_FIRST -> "DELEGATE_FIRST";
+            case Closure.DELEGATE_ONLY -> "DELEGATE_ONLY";
+            case Closure.OWNER_ONLY -> "OWNER_ONLY";
+            case Closure.TO_SELF -> "TO_SELF";
+            default -> "OWNER_FIRST";
+        };
     }
 }
diff --git 
a/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java 
b/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
index 5276c23a00..abbe60156d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
+++ b/src/main/java/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
@@ -80,12 +80,10 @@ public class FinalVariableAnalyzer extends 
ClassCodeVisitorSupport {
         }
 
         public VariableState getNext() {
-            switch (this) {
-                case is_uninitialized:
-                    return is_final;
-                default:
-                    return is_var;
-            }
+            return switch (this) {
+                case is_uninitialized -> is_final;
+                default -> is_var;
+            };
         }
 
         public boolean isFinal() {
diff --git a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
index 5fb9754270..e2cecd6e6c 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ArrayGroovyMethods.java
@@ -68,7 +68,6 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -82,16 +81,16 @@ import java.util.SortedSet;
 import java.util.TreeSet;
 import java.util.function.Consumer;
 import java.util.function.DoubleConsumer;
+import java.util.function.DoublePredicate;
 import java.util.function.DoubleUnaryOperator;
 import java.util.function.Function;
 import java.util.function.IntConsumer;
+import java.util.function.IntPredicate;
 import java.util.function.IntUnaryOperator;
 import java.util.function.LongConsumer;
+import java.util.function.LongPredicate;
 import java.util.function.LongUnaryOperator;
 import java.util.function.Predicate;
-import java.util.function.IntPredicate;
-import java.util.function.LongPredicate;
-import java.util.function.DoublePredicate;
 
 /**
  * Defines new groovy methods which appear on arrays inside the Groovy 
environment.
@@ -6612,15 +6611,14 @@ public class ArrayGroovyMethods extends 
DefaultGroovyMethodsSupport {
      * @since 1.5.5
      */
     public static <T> T[] minus(T[] self, Object[] removeMe) {
-        switch (removeMe.length) {
-          case 0:
-            return self.clone();
-          case 1:
-            return ArrayGroovyMethods.minus(self, removeMe[0]);
-          default:
-            Collection<T> temp = DefaultGroovyMethods.minus((Collection<T>) 
toList(self), Arrays.asList(removeMe));
-            return temp.toArray(createSimilarArray(self, temp.size()));
-        }
+        return switch (removeMe.length) {
+            case 0 -> self.clone();
+            case 1 -> ArrayGroovyMethods.minus(self, removeMe[0]);
+            default -> {
+                Collection<T> temp = 
DefaultGroovyMethods.minus((Collection<T>) toList(self), 
Arrays.asList(removeMe));
+                yield temp.toArray(createSimilarArray(self, temp.size()));
+            }
+        };
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/runtime/MethodClosure.java 
b/src/main/java/org/codehaus/groovy/runtime/MethodClosure.java
index 5f0efb60ff..98e2d3b929 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MethodClosure.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MethodClosure.java
@@ -133,14 +133,11 @@ public class MethodClosure extends Closure {
 
     @Override
     public Object getProperty(final String property) {
-        switch (property) {
-          case "method":
-            return getMethod();
-          case ANY_INSTANCE_METHOD_EXISTS:
-            return anyInstanceMethodExists;
-          default:
-            return super.getProperty(property);
-        }
+        return switch (property) {
+            case "method" -> getMethod();
+            case ANY_INSTANCE_METHOD_EXISTS -> anyInstanceMethodExists;
+            default -> super.getProperty(property);
+        };
     }
 
     // TODO: This method seems to be never called..., because 
MetaClassImpl.invokeMethod will intercept calls and return the result.
diff --git a/src/main/java/org/codehaus/groovy/syntax/TokenUtil.java 
b/src/main/java/org/codehaus/groovy/syntax/TokenUtil.java
index de75acbd42..49491bd9cd 100644
--- a/src/main/java/org/codehaus/groovy/syntax/TokenUtil.java
+++ b/src/main/java/org/codehaus/groovy/syntax/TokenUtil.java
@@ -29,17 +29,13 @@ public class TokenUtil {
     }
 
     public static Optional<Token> asAssignment(int op) {
-        switch (op) {
-            case Types.PLUS_PLUS:
-            case Types.PREFIX_PLUS_PLUS:
-            case Types.POSTFIX_PLUS_PLUS:
-                return Optional.of(Token.newSymbol(Types.PLUS_EQUAL, -1, -1));
-            case Types.MINUS_MINUS:
-            case Types.PREFIX_MINUS_MINUS:
-            case Types.POSTFIX_MINUS_MINUS:
-                return Optional.of(Token.newSymbol(Types.MINUS_EQUAL, -1, -1));
-        }
-        return Optional.empty();
+        return switch (op) {
+            case Types.PLUS_PLUS, Types.PREFIX_PLUS_PLUS, 
Types.POSTFIX_PLUS_PLUS ->
+                Optional.of(Token.newSymbol(Types.PLUS_EQUAL, -1, -1));
+            case Types.MINUS_MINUS, Types.PREFIX_MINUS_MINUS, 
Types.POSTFIX_MINUS_MINUS ->
+                Optional.of(Token.newSymbol(Types.MINUS_EQUAL, -1, -1));
+            default -> Optional.empty();
+        };
     }
 
     /**
@@ -51,24 +47,24 @@ public class TokenUtil {
      *          if it was not an assignment operator
      */
     public static int removeAssignment(int op) {
-        switch (op) {
-            case Types.PLUS_EQUAL: return Types.PLUS;
-            case Types.MINUS_EQUAL: return Types.MINUS;
-            case Types.MULTIPLY_EQUAL: return Types.MULTIPLY;
-            case Types.LEFT_SHIFT_EQUAL: return Types.LEFT_SHIFT;
-            case Types.RIGHT_SHIFT_EQUAL: return Types.RIGHT_SHIFT;
-            case Types.RIGHT_SHIFT_UNSIGNED_EQUAL: return 
Types.RIGHT_SHIFT_UNSIGNED;
-            case Types.LOGICAL_OR_EQUAL: return Types.LOGICAL_OR;
-            case Types.LOGICAL_AND_EQUAL: return Types.LOGICAL_AND;
-            case Types.MOD_EQUAL: return Types.MOD;
-            case Types.DIVIDE_EQUAL: return Types.DIVIDE;
-            case Types.INTDIV_EQUAL: return Types.INTDIV;
-            case Types.POWER_EQUAL: return Types.POWER;
-            case Types.BITWISE_OR_EQUAL: return Types.BITWISE_OR;
-            case Types.BITWISE_AND_EQUAL: return Types.BITWISE_AND;
-            case Types.BITWISE_XOR_EQUAL: return Types.BITWISE_XOR;
-            case Types.REMAINDER_EQUAL: return Types.REMAINDER;
-            default: return op;
-        }
+        return switch (op) {
+            case Types.PLUS_EQUAL -> Types.PLUS;
+            case Types.MINUS_EQUAL -> Types.MINUS;
+            case Types.MULTIPLY_EQUAL -> Types.MULTIPLY;
+            case Types.LEFT_SHIFT_EQUAL -> Types.LEFT_SHIFT;
+            case Types.RIGHT_SHIFT_EQUAL -> Types.RIGHT_SHIFT;
+            case Types.RIGHT_SHIFT_UNSIGNED_EQUAL -> 
Types.RIGHT_SHIFT_UNSIGNED;
+            case Types.LOGICAL_OR_EQUAL -> Types.LOGICAL_OR;
+            case Types.LOGICAL_AND_EQUAL -> Types.LOGICAL_AND;
+            case Types.MOD_EQUAL -> Types.MOD;
+            case Types.DIVIDE_EQUAL -> Types.DIVIDE;
+            case Types.INTDIV_EQUAL -> Types.INTDIV;
+            case Types.POWER_EQUAL -> Types.POWER;
+            case Types.BITWISE_OR_EQUAL -> Types.BITWISE_OR;
+            case Types.BITWISE_AND_EQUAL -> Types.BITWISE_AND;
+            case Types.BITWISE_XOR_EQUAL -> Types.BITWISE_XOR;
+            case Types.REMAINDER_EQUAL -> Types.REMAINDER;
+            default -> op;
+        };
     }
 }
diff --git a/src/main/java/org/codehaus/groovy/syntax/Types.java 
b/src/main/java/org/codehaus/groovy/syntax/Types.java
index a24a6aa6ee..12597e37b4 100644
--- a/src/main/java/org/codehaus/groovy/syntax/Types.java
+++ b/src/main/java/org/codehaus/groovy/syntax/Types.java
@@ -476,27 +476,14 @@ public class Types {
                 break;
 
             case INFIX_OPERATOR:
-                switch (specific) {
-                    case DOT:
-                    case NAVIGATE:
-                    case LOGICAL_OR:
-                    case LOGICAL_AND:
-                    case BITWISE_OR:
-                    case BITWISE_AND:
-                    case BITWISE_XOR:
-                    case LEFT_SHIFT:
-                    case RIGHT_SHIFT:
-                    case RIGHT_SHIFT_UNSIGNED:
-                    case FIND_REGEX:
-                    case MATCH_REGEX:
-                    case DOT_DOT:
-                    case DOT_DOT_DOT:
-                    case KEYWORD_INSTANCEOF:
-                        return true;
-                }
-
-                return (specific >= COMPARE_NOT_EQUAL && specific <= 
COMPARE_TO) || (specific >= PLUS && specific <= MOD_EQUAL) || specific == EQUAL 
|| (specific >= PLUS_EQUAL && specific <= ELVIS_EQUAL) || (specific >= 
LOGICAL_OR_EQUAL && specific <= LOGICAL_AND_EQUAL)
-                        || (specific >= LEFT_SHIFT_EQUAL && specific <= 
RIGHT_SHIFT_UNSIGNED_EQUAL) || (specific >= BITWISE_OR_EQUAL && specific <= 
BITWISE_XOR_EQUAL);
+                return switch (specific) {
+                    case DOT, NAVIGATE, LOGICAL_OR, LOGICAL_AND, BITWISE_OR, 
BITWISE_AND, BITWISE_XOR, LEFT_SHIFT,
+                         RIGHT_SHIFT, RIGHT_SHIFT_UNSIGNED, FIND_REGEX, 
MATCH_REGEX, DOT_DOT, DOT_DOT_DOT,
+                         KEYWORD_INSTANCEOF -> true;
+                    default ->
+                        (specific >= COMPARE_NOT_EQUAL && specific <= 
COMPARE_TO) || (specific >= PLUS && specific <= MOD_EQUAL) || specific == EQUAL 
|| (specific >= PLUS_EQUAL && specific <= ELVIS_EQUAL) || (specific >= 
LOGICAL_OR_EQUAL && specific <= LOGICAL_AND_EQUAL)
+                            || (specific >= LEFT_SHIFT_EQUAL && specific <= 
RIGHT_SHIFT_UNSIGNED_EQUAL) || (specific >= BITWISE_OR_EQUAL && specific <= 
BITWISE_XOR_EQUAL);
+                };
 
             case PREFIX_OR_INFIX_OPERATOR:
                 switch (specific) {
@@ -670,45 +657,25 @@ public class Types {
 
             case UNSAFE_OVER_NEWLINES:
                 if (ofType(specific, SYMBOL)) {
-                    switch (specific) {
-                        case LEFT_CURLY_BRACE:
-                        case LEFT_PARENTHESIS:
-                        case LEFT_SQUARE_BRACKET:
-                        case PLUS:
-                        case PLUS_PLUS:
-                        case MINUS:
-                        case MINUS_MINUS:
-                        case REGEX_PATTERN:
-                        case NOT:
-                            return true;
-                    }
-
-                    return false;
-                }
+                    return switch (specific) {
+                        case LEFT_CURLY_BRACE, LEFT_PARENTHESIS, 
LEFT_SQUARE_BRACKET, PLUS, PLUS_PLUS, MINUS,
+                             MINUS_MINUS, REGEX_PATTERN, NOT -> true;
+                        default -> false;
+                    };
 
-                switch (specific) {
-                    case KEYWORD_INSTANCEOF:
-                    case GSTRING_EXPRESSION_START:
-                    case GSTRING_EXPRESSION_END:
-                    case GSTRING_END:
-                        return false;
                 }
 
-                return true;
+                return switch (specific) {
+                    case KEYWORD_INSTANCEOF, GSTRING_EXPRESSION_START, 
GSTRING_EXPRESSION_END, GSTRING_END -> false;
+                    default -> true;
+                };
 
             case PRECLUDES_CAST_OPERATOR:
-                switch (specific) {
-                    case PLUS:
-                    case MINUS:
-                    case PREFIX_MINUS:
-                    case PREFIX_MINUS_MINUS:
-                    case PREFIX_PLUS:
-                    case PREFIX_PLUS_PLUS:
-                    case LEFT_PARENTHESIS:
-                        return false;
-                }
-
-                return !ofType(specific, COMPLEX_EXPRESSION);
+                return switch (specific) {
+                    case PLUS, MINUS, PREFIX_MINUS, PREFIX_MINUS_MINUS, 
PREFIX_PLUS, PREFIX_PLUS_PLUS,
+                         LEFT_PARENTHESIS -> false;
+                    default -> !ofType(specific, COMPLEX_EXPRESSION);
+                };
 
 
             case OPERATOR_EXPRESSION:
diff --git 
a/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
 
b/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
index 16d58d93b7..03ade2e2b5 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/OperatorRenameASTTransformation.java
@@ -146,61 +146,22 @@ public class OperatorRenameASTTransformation extends 
ClassCodeExpressionTransfor
     }
 
     static String getOperationName(final int op) {
-        switch (op) {
-            case COMPARE_TO:
-                return "compareTo";
-
-            case BITWISE_AND:
-            case BITWISE_AND_EQUAL:
-                return "and";
-
-            case BITWISE_OR:
-            case BITWISE_OR_EQUAL:
-                return "or";
-
-            case BITWISE_XOR:
-            case BITWISE_XOR_EQUAL:
-                return "xor";
-
-            case PLUS:
-            case PLUS_EQUAL:
-                return "plus";
-
-            case MINUS:
-            case MINUS_EQUAL:
-                return "minus";
-
-            case MULTIPLY:
-            case MULTIPLY_EQUAL:
-                return "multiply";
-
-            case DIVIDE:
-            case DIVIDE_EQUAL:
-                return "div";
-
-            case REMAINDER:
-            case REMAINDER_EQUAL:
-                return "remainder";
-
-            case POWER:
-            case POWER_EQUAL:
-                return "power";
-
-            case LEFT_SHIFT:
-            case LEFT_SHIFT_EQUAL:
-                return "leftShift";
-
-            case RIGHT_SHIFT:
-            case RIGHT_SHIFT_EQUAL:
-                return "rightShift";
-
-            case RIGHT_SHIFT_UNSIGNED:
-            case RIGHT_SHIFT_UNSIGNED_EQUAL:
-                return "rightShiftUnsigned";
-
-            default:
-                return null;
-        }
+        return switch (op) {
+            case COMPARE_TO -> "compareTo";
+            case BITWISE_AND, BITWISE_AND_EQUAL -> "and";
+            case BITWISE_OR, BITWISE_OR_EQUAL -> "or";
+            case BITWISE_XOR, BITWISE_XOR_EQUAL -> "xor";
+            case PLUS, PLUS_EQUAL -> "plus";
+            case MINUS, MINUS_EQUAL -> "minus";
+            case MULTIPLY, MULTIPLY_EQUAL -> "multiply";
+            case DIVIDE, DIVIDE_EQUAL -> "div";
+            case REMAINDER, REMAINDER_EQUAL -> "remainder";
+            case POWER, POWER_EQUAL -> "power";
+            case LEFT_SHIFT, LEFT_SHIFT_EQUAL -> "leftShift";
+            case RIGHT_SHIFT, RIGHT_SHIFT_EQUAL -> "rightShift";
+            case RIGHT_SHIFT_UNSIGNED, RIGHT_SHIFT_UNSIGNED_EQUAL -> 
"rightShiftUnsigned";
+            default -> null;
+        };
     }
 
 }
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 c9f5236fab..e2753997cb 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/SignatureCodecVersion1.java
@@ -201,17 +201,18 @@ public class SignatureCodecVersion1 implements 
SignatureCodec {
             }
         } else {
             // primitive type
-            switch (typeCode) {
-                case 'I': result = int_TYPE; break;
-                case 'Z': result = boolean_TYPE; break;
-                case 'B': result = byte_TYPE; break;
-                case 'C': result = char_TYPE; break;
-                case 'S': result = short_TYPE; break;
-                case 'D': result = double_TYPE; break;
-                case 'F': result = float_TYPE; break;
-                case 'J': result = long_TYPE; break;
-                case 'V': result = VOID_TYPE; break;
-            }
+            result = switch (typeCode) {
+                case 'I' -> int_TYPE;
+                case 'Z' -> boolean_TYPE;
+                case 'B' -> byte_TYPE;
+                case 'C' -> char_TYPE;
+                case 'S' -> short_TYPE;
+                case 'D' -> double_TYPE;
+                case 'F' -> float_TYPE;
+                case 'J' -> long_TYPE;
+                case 'V' -> VOID_TYPE;
+                default -> result;
+            };
         }
         return result;
     }
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 bfa955c405..cb84c11b1c 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -484,19 +484,11 @@ public abstract class StaticTypeCheckingSupport {
     }
 
     static boolean isBoolIntrinsicOp(final int op) {
-        switch (op) {
-            case LOGICAL_AND:
-            case LOGICAL_OR:
-            case COMPARE_NOT_IDENTICAL:
-            case COMPARE_IDENTICAL:
-            case MATCH_REGEX:
-            case KEYWORD_INSTANCEOF:
-            case COMPARE_NOT_INSTANCEOF:
-            case IMPLIES:
-                return true;
-            default:
-                return false;
-        }
+        return switch (op) {
+            case LOGICAL_AND, LOGICAL_OR, COMPARE_NOT_IDENTICAL, 
COMPARE_IDENTICAL, MATCH_REGEX, KEYWORD_INSTANCEOF,
+                 COMPARE_NOT_INSTANCEOF, IMPLIES -> true;
+            default -> false;
+        };
     }
 
     static boolean isPowerOperator(final int op) {
@@ -504,86 +496,32 @@ public abstract class StaticTypeCheckingSupport {
     }
 
     static String getOperationName(final int op) {
-        switch (op) {
-            case COMPARE_EQUAL:
-            case COMPARE_NOT_EQUAL:
+        return switch (op) {
+            case COMPARE_EQUAL, COMPARE_NOT_EQUAL ->
                 // this is only correct in this specific context; normally
                 // we would have to compile against compareTo if available
                 // but since we don't compile here, this one is enough
-                return "equals";
-
-            case COMPARE_TO:
-            case COMPARE_LESS_THAN:
-            case COMPARE_LESS_THAN_EQUAL:
-            case COMPARE_GREATER_THAN:
-            case COMPARE_GREATER_THAN_EQUAL:
-                return "compareTo";
-
-            case BITWISE_AND:
-            case BITWISE_AND_EQUAL:
-                return "and";
-
-            case BITWISE_OR:
-            case BITWISE_OR_EQUAL:
-                return "or";
-
-            case BITWISE_XOR:
-            case BITWISE_XOR_EQUAL:
-                return "xor";
-
-            case PLUS:
-            case PLUS_EQUAL:
-                return "plus";
-
-            case MINUS:
-            case MINUS_EQUAL:
-                return "minus";
-
-            case MULTIPLY:
-            case MULTIPLY_EQUAL:
-                return "multiply";
-
-            case DIVIDE:
-            case DIVIDE_EQUAL:
-                return "div";
-
-            case INTDIV:
-            case INTDIV_EQUAL:
-                return "intdiv";
-
-            case MOD:
-            case MOD_EQUAL:
-                return "mod";
-
-            case REMAINDER:
-            case REMAINDER_EQUAL:
-                return "remainder";
-
-            case POWER:
-            case POWER_EQUAL:
-                return "power";
-
-            case LEFT_SHIFT:
-            case LEFT_SHIFT_EQUAL:
-                return "leftShift";
-
-            case RIGHT_SHIFT:
-            case RIGHT_SHIFT_EQUAL:
-                return "rightShift";
-
-            case RIGHT_SHIFT_UNSIGNED:
-            case RIGHT_SHIFT_UNSIGNED_EQUAL:
-                return "rightShiftUnsigned";
-
-            case KEYWORD_IN:
-                return "isCase";
-
-            case COMPARE_NOT_IN:
-                return "isNotCase";
-
-            default:
-                return null;
-        }
+                "equals";
+            case COMPARE_TO, COMPARE_LESS_THAN, COMPARE_LESS_THAN_EQUAL, 
COMPARE_GREATER_THAN,
+                 COMPARE_GREATER_THAN_EQUAL -> "compareTo";
+            case BITWISE_AND, BITWISE_AND_EQUAL -> "and";
+            case BITWISE_OR, BITWISE_OR_EQUAL -> "or";
+            case BITWISE_XOR, BITWISE_XOR_EQUAL -> "xor";
+            case PLUS, PLUS_EQUAL -> "plus";
+            case MINUS, MINUS_EQUAL -> "minus";
+            case MULTIPLY, MULTIPLY_EQUAL -> "multiply";
+            case DIVIDE, DIVIDE_EQUAL -> "div";
+            case INTDIV, INTDIV_EQUAL -> "intdiv";
+            case MOD, MOD_EQUAL -> "mod";
+            case REMAINDER, REMAINDER_EQUAL -> "remainder";
+            case POWER, POWER_EQUAL -> "power";
+            case LEFT_SHIFT, LEFT_SHIFT_EQUAL -> "leftShift";
+            case RIGHT_SHIFT, RIGHT_SHIFT_EQUAL -> "rightShift";
+            case RIGHT_SHIFT_UNSIGNED, RIGHT_SHIFT_UNSIGNED_EQUAL -> 
"rightShiftUnsigned";
+            case KEYWORD_IN -> "isCase";
+            case COMPARE_NOT_IN -> "isNotCase";
+            default -> null;
+        };
     }
 
     static boolean isShiftOperation(final String name) {
@@ -596,31 +534,17 @@ public abstract class StaticTypeCheckingSupport {
      * their variants with equals.
      */
     static boolean isOperationInGroup(final int op) {
-        switch (op) {
-            case PLUS:
-            case PLUS_EQUAL:
-            case MINUS:
-            case MINUS_EQUAL:
-            case MULTIPLY:
-            case MULTIPLY_EQUAL:
-                return true;
-            default:
-                return false;
-        }
+        return switch (op) {
+            case PLUS, PLUS_EQUAL, MINUS, MINUS_EQUAL, MULTIPLY, 
MULTIPLY_EQUAL -> true;
+            default -> false;
+        };
     }
 
     static boolean isBitOperator(final int op) {
-        switch (op) {
-            case BITWISE_OR_EQUAL:
-            case BITWISE_OR:
-            case BITWISE_AND_EQUAL:
-            case BITWISE_AND:
-            case BITWISE_XOR_EQUAL:
-            case BITWISE_XOR:
-                return true;
-            default:
-                return false;
-        }
+        return switch (op) {
+            case BITWISE_OR_EQUAL, BITWISE_OR, BITWISE_AND_EQUAL, BITWISE_AND, 
BITWISE_XOR_EQUAL, BITWISE_XOR -> true;
+            default -> false;
+        };
     }
 
     public static boolean isAssignment(final int op) {
@@ -788,45 +712,31 @@ public abstract class StaticTypeCheckingSupport {
             if (!(value instanceof Number number)) return true; // null or ...
             switch (leftIndex) {
               case 0: // byte
-                switch (rightIndex) {
-                  case 1:
-                    return Short  .compare(number.byteValue(), number. 
shortValue()) != 0;
-                  case 2:
-                    return Integer.compare(number.byteValue(), number.   
intValue()) != 0;
-                  case 3:
-                    return Long   .compare(number.byteValue(), number.  
longValue()) != 0;
-                  case 4:
-                    return Float  .compare(number.byteValue(), number. 
floatValue()) != 0;
-                  default:
-                    return Double .compare(number.byteValue(), 
number.doubleValue()) != 0;
-                }
+                  return switch (rightIndex) {
+                      case 1 -> Short.compare(number.byteValue(), 
number.shortValue()) != 0;
+                      case 2 -> Integer.compare(number.byteValue(), 
number.intValue()) != 0;
+                      case 3 -> Long.compare(number.byteValue(), 
number.longValue()) != 0;
+                      case 4 -> Float.compare(number.byteValue(), 
number.floatValue()) != 0;
+                      default -> Double.compare(number.byteValue(), 
number.doubleValue()) != 0;
+                  };
               case 1: // short
-                switch (rightIndex) {
-                  case 2:
-                    return Integer.compare(number.shortValue(), number.   
intValue()) != 0;
-                  case 3:
-                    return Long   .compare(number.shortValue(), number.  
longValue()) != 0;
-                  case 4:
-                    return Float  .compare(number.shortValue(), number. 
floatValue()) != 0;
-                  default:
-                    return Double .compare(number.shortValue(), 
number.doubleValue()) != 0;
-                }
+                  return switch (rightIndex) {
+                      case 2 -> Integer.compare(number.shortValue(), 
number.intValue()) != 0;
+                      case 3 -> Long.compare(number.shortValue(), 
number.longValue()) != 0;
+                      case 4 -> Float.compare(number.shortValue(), 
number.floatValue()) != 0;
+                      default -> Double.compare(number.shortValue(), 
number.doubleValue()) != 0;
+                  };
               case 2: // int
-                switch (rightIndex) {
-                  case 3:
-                    return Long  .compare(number.intValue(), number.  
longValue()) != 0;
-                  case 4:
-                    return Float .compare(number.intValue(), number. 
floatValue()) != 0;
-                  default:
-                    return Double.compare(number.intValue(), 
number.doubleValue()) != 0;
-                }
+                  return switch (rightIndex) {
+                      case 3 -> Long.compare(number.intValue(), 
number.longValue()) != 0;
+                      case 4 -> Float.compare(number.intValue(), 
number.floatValue()) != 0;
+                      default -> Double.compare(number.intValue(), 
number.doubleValue()) != 0;
+                  };
               case 3: // long
-                switch (rightIndex) {
-                  case 4:
-                    return Float .compare(number.longValue(), number. 
floatValue()) != 0;
-                  default:
-                    return Double.compare(number.longValue(), 
number.doubleValue()) != 0;
-                }
+                  return switch (rightIndex) {
+                      case 4 -> Float.compare(number.longValue(), 
number.floatValue()) != 0;
+                      default -> Double.compare(number.longValue(), 
number.doubleValue()) != 0;
+                  };
               case 4: // float
                 return Double.compare(number.floatValue(), 
number.doubleValue()) != 0;
               default: // double
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 5ec9f6b4a2..7e48c881e5 100644
--- 
a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ 
b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -6331,12 +6331,10 @@ out:    for (ClassNode type : todo) {
 
     public static class SignatureCodecFactory {
         public static SignatureCodec getCodec(final int version, final 
ClassLoader classLoader) {
-            switch (version) {
-              case 1:
-                return new SignatureCodecVersion1(classLoader);
-              default:
-                return null;
-            }
+            return switch (version) {
+                case 1 -> new SignatureCodecVersion1(classLoader);
+                default -> null;
+            };
         }
     }
 
diff --git 
a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
index 987684c1cd..e9bf8ddcb1 100644
--- 
a/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
+++ 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/PluginDefaultGroovyMethods.java
@@ -274,13 +274,10 @@ public class PluginDefaultGroovyMethods extends 
DefaultGroovyMethodsSupport {
      * @since 5.0.0
      */
     public static <T> T getAt(final Optional<T> self, final int index) {
-        switch (index) {
-          case  0:
-          case -1:
-            return self.orElse(null);
-          default:
-            throw new IndexOutOfBoundsException("" + index);
-        }
+        return switch (index) {
+            case 0, -1 -> self.orElse(null);
+            default -> throw new IndexOutOfBoundsException("" + index);
+        };
     }
 
     /**
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 350b66d87a..5c24c16487 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
@@ -128,22 +128,19 @@ public abstract class Selector {
      */
     public static Selector getSelector(CacheableCallSite callSite, Class<?> 
sender, String methodName, int callID, boolean safeNavigation, boolean 
thisCall, boolean spreadCall, Object[] arguments) {
         CallType callType = CALL_TYPE_VALUES[callID];
-        switch (callType) {
-            case INIT:
-                return new InitSelector(callSite, sender, methodName, 
callType, safeNavigation, thisCall, spreadCall, arguments);
-            case METHOD:
-                return new MethodSelector(callSite, sender, methodName, 
callType, safeNavigation, thisCall, spreadCall, arguments);
-            case GET:
-                return new PropertySelector(callSite, sender, methodName, 
callType, safeNavigation, thisCall, spreadCall, arguments);
-            case SET:
-                throw new GroovyBugError("your call tried to do a property 
set, which is not supported.");
-            case CAST:
-                return new CastSelector(callSite, arguments);
-            case INTERFACE:
-                return new InterfaceSelector(callSite, sender, methodName, 
callType, safeNavigation, thisCall, spreadCall, arguments);
-            default:
-                throw new GroovyBugError("unexpected call type");
-        }
+        return switch (callType) {
+            case INIT ->
+                new InitSelector(callSite, sender, methodName, callType, 
safeNavigation, thisCall, spreadCall, arguments);
+            case METHOD ->
+                new MethodSelector(callSite, sender, methodName, callType, 
safeNavigation, thisCall, spreadCall, arguments);
+            case GET ->
+                new PropertySelector(callSite, sender, methodName, callType, 
safeNavigation, thisCall, spreadCall, arguments);
+            case SET -> throw new GroovyBugError("your call tried to do a 
property set, which is not supported.");
+            case CAST -> new CastSelector(callSite, arguments);
+            case INTERFACE ->
+                new InterfaceSelector(callSite, sender, methodName, callType, 
safeNavigation, thisCall, spreadCall, arguments);
+            default -> throw new GroovyBugError("unexpected call type");
+        };
     }
 
     /**
diff --git 
a/subprojects/groovy-datetime/src/main/java/org/apache/groovy/datetime/extensions/DateTimeExtensions.java
 
b/subprojects/groovy-datetime/src/main/java/org/apache/groovy/datetime/extensions/DateTimeExtensions.java
index deb96529dd..038db93bd1 100644
--- 
a/subprojects/groovy-datetime/src/main/java/org/apache/groovy/datetime/extensions/DateTimeExtensions.java
+++ 
b/subprojects/groovy-datetime/src/main/java/org/apache/groovy/datetime/extensions/DateTimeExtensions.java
@@ -268,16 +268,12 @@ public final class DateTimeExtensions {
         if (!self.getClass().equals(other.getClass())) {
             throw new GroovyRuntimeException("Temporal arguments must be of 
the same type.");
         }
-        switch ((ChronoUnit) defaultUnitFor(self)) {
-            case YEARS:
-                return DateTimeStaticExtensions.between(null, (Year) self, 
(Year) other);
-            case MONTHS:
-                return DateTimeStaticExtensions.between(null, (YearMonth) 
self, (YearMonth) other);
-            case DAYS:
-                return ChronoPeriod.between((ChronoLocalDate) self, 
(ChronoLocalDate) other);
-            default:
-                return Duration.between(self, other);
-        }
+        return switch ((ChronoUnit) defaultUnitFor(self)) {
+            case YEARS -> DateTimeStaticExtensions.between(null, (Year) self, 
(Year) other);
+            case MONTHS -> DateTimeStaticExtensions.between(null, (YearMonth) 
self, (YearMonth) other);
+            case DAYS -> ChronoPeriod.between((ChronoLocalDate) self, 
(ChronoLocalDate) other);
+            default -> Duration.between(self, other);
+        };
     }
 
     /* ******** java.time.temporal.TemporalAccessor extension methods ******** 
*/
diff --git 
a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyPosixCommands.java
 
b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyPosixCommands.java
index 7f6c3bc59e..c1ae385778 100644
--- 
a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyPosixCommands.java
+++ 
b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/jline/GroovyPosixCommands.java
@@ -399,26 +399,12 @@ public class GroovyPosixCommands extends PosixCommands {
         Map<String, String> colorMap = getLsColorMap(context);
 
         String color = opt.isSet("color") ? opt.get("color") : "auto";
-        boolean colored;
-        switch (color) {
-            case "always":
-            case "yes":
-            case "force":
-                colored = true;
-                break;
-            case "never":
-            case "no":
-            case "none":
-                colored = false;
-                break;
-            case "auto":
-            case "tty":
-            case "if-tty":
-                colored = context.isTty();
-                break;
-            default:
-                throw new IllegalArgumentException("invalid argument '" + 
color + "' for '--color'");
-        }
+        boolean colored = switch (color) {
+            case "always", "yes", "force" -> true;
+            case "never", "no", "none" -> false;
+            case "auto", "tty", "if-tty" -> context.isTty();
+            default -> throw new IllegalArgumentException("invalid argument '" 
+ color + "' for '--color'");
+        };
         Map<String, String> colors =
             colored ? (colorMap != null ? colorMap : 
getLsColorMap(DEFAULT_LS_COLORS)) : Collections.emptyMap();
 
@@ -772,26 +758,12 @@ public class GroovyPosixCommands extends PosixCommands {
         boolean invert = opt.isSet("invert-match");
         boolean lineNumber = opt.isSet("line-number");
         String color = opt.isSet("color") ? opt.get("color") : "auto";
-        boolean colored;
-        switch (color) {
-            case "always":
-            case "yes":
-            case "force":
-                colored = true;
-                break;
-            case "never":
-            case "no":
-            case "none":
-                colored = false;
-                break;
-            case "auto":
-            case "tty":
-            case "if-tty":
-                colored = context.isTty();
-                break;
-            default:
-                throw new IllegalArgumentException("invalid argument '" + 
color + "' for '--color'");
-        }
+        boolean colored = switch (color) {
+            case "always", "yes", "force" -> true;
+            case "never", "no", "none" -> false;
+            case "auto", "tty", "if-tty" -> context.isTty();
+            default -> throw new IllegalArgumentException("invalid argument '" 
+ color + "' for '--color'");
+        };
         Map<String, String> colors =
             colored ? (colorMap != null ? colorMap : 
getColorMap(DEFAULT_GREP_COLORS)) : Collections.emptyMap();
 
diff --git a/subprojects/groovy-json/src/main/java/groovy/json/JsonSlurper.java 
b/subprojects/groovy-json/src/main/java/groovy/json/JsonSlurper.java
index c325c8e9e2..58a62d1ec8 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/JsonSlurper.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/JsonSlurper.java
@@ -318,23 +318,13 @@ public class JsonSlurper {
     }
 
     private JsonParser createParser() {
-        switch (type) {
-            case LAX:
-                return new JsonParserLax(false, chop, lazyChop, checkDates);
-
-            case CHAR_BUFFER:
-                return new JsonParserCharArray();
-
-            case CHARACTER_SOURCE:
-                return new JsonParserUsingCharacterSource();
-
-
-            case INDEX_OVERLAY:
-                return new JsonFastParser(false, chop, lazyChop, checkDates);
-
-            default:
-                return new JsonParserCharArray();
-        }
+        return switch (type) {
+            case LAX -> new JsonParserLax(false, chop, lazyChop, checkDates);
+            case CHAR_BUFFER -> new JsonParserCharArray();
+            case CHARACTER_SOURCE -> new JsonParserUsingCharacterSource();
+            case INDEX_OVERLAY -> new JsonFastParser(false, chop, lazyChop, 
checkDates);
+            default -> new JsonParserCharArray();
+        };
     }
 
     /**
diff --git 
a/subprojects/groovy-json/src/main/java/groovy/json/JsonTokenType.java 
b/subprojects/groovy-json/src/main/java/groovy/json/JsonTokenType.java
index f1734ba1a1..9e33b7f8d5 100644
--- a/subprojects/groovy-json/src/main/java/groovy/json/JsonTokenType.java
+++ b/subprojects/groovy-json/src/main/java/groovy/json/JsonTokenType.java
@@ -108,34 +108,20 @@ public enum JsonTokenType {
      * @return the possible token type found
      */
     public static JsonTokenType startingWith(char c) {
-        switch (c) {
-            case '{': return OPEN_CURLY;
-            case '}': return CLOSE_CURLY;
-            case '[': return OPEN_BRACKET;
-            case ']': return CLOSE_BRACKET;
-            case ',': return COMMA;
-            case ':': return COLON;
-
-            case 't': return TRUE;
-            case 'f': return FALSE;
-            case 'n': return NULL;
-
-            case '"': return STRING;
-
-            case '-':
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-                return NUMBER;
-        }
-        return null;
+        return switch (c) {
+            case '{' -> OPEN_CURLY;
+            case '}' -> CLOSE_CURLY;
+            case '[' -> OPEN_BRACKET;
+            case ']' -> CLOSE_BRACKET;
+            case ',' -> COMMA;
+            case ':' -> COLON;
+            case 't' -> TRUE;
+            case 'f' -> FALSE;
+            case 'n' -> NULL;
+            case '"' -> STRING;
+            case '-', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> 
NUMBER;
+            default -> null;
+        };
     }
 
     public String getLabel() {
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/BaseJsonParser.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/BaseJsonParser.java
index 5744225308..6ecb486d2c 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/BaseJsonParser.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/BaseJsonParser.java
@@ -173,15 +173,10 @@ public abstract class BaseJsonParser implements 
JsonParser {
     }
 
     protected static boolean isDecimalChar(int currentChar) {
-        switch (currentChar) {
-            case MINUS:
-            case PLUS:
-            case LETTER_E:
-            case LETTER_BIG_E:
-            case DECIMAL_POINT:
-                return true;
-        }
-        return false;
+        return switch (currentChar) {
+            case MINUS, PLUS, LETTER_E, LETTER_BIG_E, DECIMAL_POINT -> true;
+            default -> false;
+        };
     }
 
     protected static boolean isDelimiter(int c) {
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ByteScanner.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ByteScanner.java
index e6186d9daa..d72d053aed 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ByteScanner.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/ByteScanner.java
@@ -29,29 +29,14 @@ public class ByteScanner {
      * @return the encoded nibble (1/2 byte).
      */
     protected static int encodeNibbleToHexAsciiCharByte(final int nibble) {
-        switch (nibble) {
-            case 0x00:
-            case 0x01:
-            case 0x02:
-            case 0x03:
-            case 0x04:
-            case 0x05:
-            case 0x06:
-            case 0x07:
-            case 0x08:
-            case 0x09:
-                return nibble + 0x30; // 0x30('0') - 0x39('9')
-            case 0x0A:
-            case 0x0B:
-            case 0x0C:
-            case 0x0D:
-            case 0x0E:
-            case 0x0F:
-                return nibble + 0x57; // 0x41('a') - 0x46('f')
-            default:
+        return switch (nibble) {
+            case 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 -> 
nibble + 0x30; // 0x30('0') - 0x39('9')
+            case 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F -> nibble + 0x57; // 
0x41('a') - 0x46('f')
+            default -> {
                 die("illegal nibble: " + nibble);
-                return -1;
-        }
+                yield -1;
+            }
+        };
     }
 
     /**
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/CharScanner.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/CharScanner.java
index d11ba7b45d..a784612369 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/CharScanner.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/CharScanner.java
@@ -72,15 +72,10 @@ public class CharScanner {
     }
 
     public static boolean isDecimalChar(int currentChar) {
-        switch (currentChar) {
-            case MINUS:
-            case PLUS:
-            case LETTER_E:
-            case LETTER_BIG_E:
-            case DECIMAL_POINT:
-                return true;
-        }
-        return false;
+        return switch (currentChar) {
+            case MINUS, PLUS, LETTER_E, LETTER_BIG_E, DECIMAL_POINT -> true;
+            default -> false;
+        };
     }
 
     public static boolean hasDecimalChar(char[] chars, boolean negative) {
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonFastParser.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonFastParser.java
index ee81767454..82cc91bd8a 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonFastParser.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonFastParser.java
@@ -113,45 +113,21 @@ public class JsonFastParser extends JsonParserCharArray {
     private Value decodeValueOverlay() {
         skipWhiteSpace();
 
-        switch (__currentChar) {
-            case '"':
-                return decodeStringOverlay();
-
-            case '{':
-                return decodeJsonObjectLazyFinalParse();
-
-            case 't':
-                return decodeTrue() ? ValueContainer.TRUE : 
ValueContainer.FALSE;
-
-            case 'f':
-                return !decodeFalse() ? ValueContainer.FALSE : 
ValueContainer.TRUE;
-
-            case 'n':
-                return decodeNull() == null ? ValueContainer.NULL : 
ValueContainer.NULL;
-
-            case '[':
-                return decodeJsonArrayOverlay();
-
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-            case '0':
-                return decodeNumberOverlay(false);
-
-            case '-':
-                return decodeNumberOverlay(true);
-
-            default:
+        return switch (__currentChar) {
+            case '"' -> decodeStringOverlay();
+            case '{' -> decodeJsonObjectLazyFinalParse();
+            case 't' -> decodeTrue() ? ValueContainer.TRUE : 
ValueContainer.FALSE;
+            case 'f' -> !decodeFalse() ? ValueContainer.FALSE : 
ValueContainer.TRUE;
+            case 'n' -> decodeNull() == null ? ValueContainer.NULL : 
ValueContainer.NULL;
+            case '[' -> decodeJsonArrayOverlay();
+            case '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' -> 
decodeNumberOverlay(false);
+            case '-' -> decodeNumberOverlay(true);
+            default -> {
                 complain("Unable to determine the " +
-                        "current character, it is not a string, number, array, 
or object");
-                return null;
-        }
+                    "current character, it is not a string, number, array, or 
object");
+                yield null;
+            }
+        };
     }
 
     private Value decodeNumberOverlay(final boolean minus) {
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserCharArray.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserCharArray.java
index d8dc31c9cb..d053eed545 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserCharArray.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserCharArray.java
@@ -169,51 +169,18 @@ public class JsonParserCharArray extends BaseJsonParser {
         Object value = null;
         skipWhiteSpace();
 
-        switch (__currentChar) {
-            case '"':
-                value = decodeString();
-                break;
-
-            case 't':
-                value = decodeTrue();
-                break;
-
-            case 'f':
-                value = decodeFalse();
-                break;
-
-            case 'n':
-                value = decodeNull();
-                break;
-
-            case '[':
-                value = decodeJsonArray();
-                break;
-
-            case '{':
-                value = decodeJsonObject();
-                break;
-
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-                value = decodeNumber();
-                break;
-            case '-':
-                value = decodeNumber();
-                break;
-
-            default:
-                throw new JsonException(exceptionDetails("Unable to determine 
the " +
-                        "current character, it is not a string, number, array, 
or object"));
-        }
+        value = switch (__currentChar) {
+            case '"' -> decodeString();
+            case 't' -> decodeTrue();
+            case 'f' -> decodeFalse();
+            case 'n' -> decodeNull();
+            case '[' -> decodeJsonArray();
+            case '{' -> decodeJsonObject();
+            case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> 
decodeNumber();
+            case '-' -> decodeNumber();
+            default -> throw new JsonException(exceptionDetails("Unable to 
determine the " +
+                "current character, it is not a string, number, array, or 
object"));
+        };
 
 
 
diff --git 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserUsingCharacterSource.java
 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserUsingCharacterSource.java
index 87d4886cc4..ebe71d56a4 100644
--- 
a/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserUsingCharacterSource.java
+++ 
b/subprojects/groovy-json/src/main/java/org/apache/groovy/json/internal/JsonParserUsingCharacterSource.java
@@ -110,52 +110,18 @@ public class JsonParserUsingCharacterSource extends 
BaseJsonParser {
         Object value = null;
         characterSource.skipWhiteSpace();
 
-        switch (characterSource.currentChar()) {
-            case '"':
-                value = decodeString();
-                break;
-
-            case 't':
-                value = decodeTrue();
-                break;
-
-            case 'f':
-                value = decodeFalse();
-                break;
-
-            case 'n':
-                value = decodeNull();
-                break;
-
-            case '[':
-                value = decodeJsonArray();
-                break;
-
-            case '{':
-                value = decodeJsonObject();
-                break;
-
-            case '0':
-            case '1':
-            case '2':
-            case '3':
-            case '4':
-            case '5':
-            case '6':
-            case '7':
-            case '8':
-            case '9':
-                value = decodeNumber(false);
-                break;
-
-            case '-':
-                value = decodeNumber(true);
-                break;
-
-            default:
-                throw new JsonException(exceptionDetails("Unable to determine 
the " +
-                        "current character, it is not a string, number, array, 
or object"));
-        }
+        value = switch (characterSource.currentChar()) {
+            case '"' -> decodeString();
+            case 't' -> decodeTrue();
+            case 'f' -> decodeFalse();
+            case 'n' -> decodeNull();
+            case '[' -> decodeJsonArray();
+            case '{' -> decodeJsonObject();
+            case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> 
decodeNumber(false);
+            case '-' -> decodeNumber(true);
+            default -> throw new JsonException(exceptionDetails("Unable to 
determine the " +
+                "current character, it is not a string, number, array, or 
object"));
+        };
 
         return value;
     }
diff --git 
a/subprojects/groovy-sql/src/main/java/groovy/sql/SqlWhereVisitor.java 
b/subprojects/groovy-sql/src/main/java/groovy/sql/SqlWhereVisitor.java
index 67320ca728..848926df78 100644
--- a/subprojects/groovy-sql/src/main/java/groovy/sql/SqlWhereVisitor.java
+++ b/subprojects/groovy-sql/src/main/java/groovy/sql/SqlWhereVisitor.java
@@ -91,15 +91,11 @@ public class SqlWhereVisitor extends CodeVisitorSupport {
     }
 
     protected String tokenAsSql(Token token) {
-        switch (token.getType()) {
-            case Types.COMPARE_EQUAL:
-                return "=";
-            case Types.LOGICAL_AND:
-                return "and";
-            case Types.LOGICAL_OR:
-                return "or";
-            default:
-                return token.getText();
-        }
+        return switch (token.getType()) {
+            case Types.COMPARE_EQUAL -> "=";
+            case Types.LOGICAL_AND -> "and";
+            case Types.LOGICAL_OR -> "or";
+            default -> token.getText();
+        };
     }
 }
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlUtil.java 
b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlUtil.java
index 93e77396e1..f8530d957c 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/XmlUtil.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/XmlUtil.java
@@ -442,19 +442,14 @@ public class XmlUtil {
     public static String escapeXml(String orig) {
         return StringGroovyMethods.collectReplacements(orig, new 
Closure<String>(null) {
             public String doCall(Character arg) {
-                switch (arg) {
-                    case '&':
-                        return "&amp;";
-                    case '<':
-                        return "&lt;";
-                    case '>':
-                        return "&gt;";
-                    case '"':
-                        return "&quot;";
-                    case '\'':
-                        return "&apos;";
-                }
-                return null;
+                return switch (arg) {
+                    case '&' -> "&amp;";
+                    case '<' -> "&lt;";
+                    case '>' -> "&gt;";
+                    case '"' -> "&quot;";
+                    case '\'' -> "&apos;";
+                    default -> null;
+                };
             }
         });
     }
diff --git 
a/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlAttributeFilter.java
 
b/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlAttributeFilter.java
index 3fdbcdd218..b67cfa6685 100644
--- 
a/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlAttributeFilter.java
+++ 
b/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlAttributeFilter.java
@@ -24,17 +24,12 @@ import java.util.function.Function;
 public class StandardXmlAttributeFilter implements Function<Character, 
Optional<String>> {
     @Override
     public Optional<String> apply(Character ch) {
-        String result = null;
-        switch (ch) {
-            case '\n':
-                result = "&#10;";
-                break;
-            case '\r':
-                result = "&#13;";
-                break;
-            case '\t':
-                result = "&#09;";
-        }
+        String result = switch (ch) {
+            case '\n' -> "&#10;";
+            case '\r' -> "&#13;";
+            case '\t' -> "&#09;";
+            default -> null;
+        };
         return Optional.ofNullable(result);
     }
 }
diff --git 
a/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlFilter.java
 
b/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlFilter.java
index c1e8151e1b..a8ef1bf670 100644
--- 
a/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlFilter.java
+++ 
b/subprojects/groovy-xml/src/main/java/groovy/xml/markupsupport/StandardXmlFilter.java
@@ -24,17 +24,12 @@ import java.util.function.Function;
 public class StandardXmlFilter implements Function<Character, 
Optional<String>> {
     @Override
     public Optional<String> apply(Character ch) {
-        String result = null;
-        switch (ch) {
-            case '&':
-                result = "&amp;";
-                break;
-            case '<':
-                result = "&lt;";
-                break;
-            case '>':
-                result = "&gt;";
-        }
+        String result = switch (ch) {
+            case '&' -> "&amp;";
+            case '<' -> "&lt;";
+            case '>' -> "&gt;";
+            default -> null;
+        };
         return Optional.ofNullable(result);
     }
 }

Reply via email to