diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectMetadata.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectMetadata.java index 048cc603ccc1..64bb2fe1d0a8 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectMetadata.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/AspectMetadata.java @@ -101,24 +101,22 @@ public AspectMetadata(Class aspectClass, String aspectName) { this.ajType = ajType; switch (this.ajType.getPerClause().getKind()) { - case SINGLETON: + case SINGLETON -> { this.perClausePointcut = Pointcut.TRUE; - return; - case PERTARGET: - case PERTHIS: + } + case PERTARGET, PERTHIS -> { AspectJExpressionPointcut ajexp = new AspectJExpressionPointcut(); ajexp.setLocation(aspectClass.getName()); ajexp.setExpression(findPerClause(aspectClass)); ajexp.setPointcutDeclarationScope(aspectClass); this.perClausePointcut = ajexp; - return; - case PERTYPEWITHIN: + } + case PERTYPEWITHIN -> { // Works with a type pattern this.perClausePointcut = new ComposablePointcut(new TypePatternClassFilter(findPerClause(aspectClass))); - return; - default: - throw new AopConfigException( - "PerClause " + ajType.getPerClause().getKind() + " not supported by Spring AOP for " + aspectClass); + } + default -> throw new AopConfigException( + "PerClause " + ajType.getPerClause().getKind() + " not supported by Spring AOP for " + aspectClass); } } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java index 7d89175c8c2d..ea5705cf8e4b 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java @@ -220,21 +220,18 @@ private void determineAdviceType() { } else { switch (aspectJAnnotation.getAnnotationType()) { - case AtPointcut: - case AtAround: + case AtPointcut, AtAround -> { this.isBeforeAdvice = false; this.isAfterAdvice = false; - break; - case AtBefore: + } + case AtBefore -> { this.isBeforeAdvice = true; this.isAfterAdvice = false; - break; - case AtAfter: - case AtAfterReturning: - case AtAfterThrowing: + } + case AtAfter, AtAfterReturning, AtAfterThrowing -> { this.isBeforeAdvice = false; this.isAfterAdvice = true; - break; + } } } } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java index c1c10c946ed6..f24e2ac7a0a3 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java @@ -261,42 +261,36 @@ public Advice getAdvice(Method candidateAdviceMethod, AspectJExpressionPointcut AbstractAspectJAdvice springAdvice; switch (aspectJAnnotation.getAnnotationType()) { - case AtPointcut: + case AtPointcut -> { if (logger.isDebugEnabled()) { logger.debug("Processing pointcut '" + candidateAdviceMethod.getName() + "'"); } return null; - case AtAround: - springAdvice = new AspectJAroundAdvice( - candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); - break; - case AtBefore: - springAdvice = new AspectJMethodBeforeAdvice( - candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); - break; - case AtAfter: - springAdvice = new AspectJAfterAdvice( - candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); - break; - case AtAfterReturning: + } + case AtAround -> springAdvice = new AspectJAroundAdvice( + candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); + case AtBefore -> springAdvice = new AspectJMethodBeforeAdvice( + candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); + case AtAfter -> springAdvice = new AspectJAfterAdvice( + candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); + case AtAfterReturning -> { springAdvice = new AspectJAfterReturningAdvice( candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); AfterReturning afterReturningAnnotation = (AfterReturning) aspectJAnnotation.getAnnotation(); if (StringUtils.hasText(afterReturningAnnotation.returning())) { springAdvice.setReturningName(afterReturningAnnotation.returning()); } - break; - case AtAfterThrowing: + } + case AtAfterThrowing -> { springAdvice = new AspectJAfterThrowingAdvice( candidateAdviceMethod, expressionPointcut, aspectInstanceFactory); AfterThrowing afterThrowingAnnotation = (AfterThrowing) aspectJAnnotation.getAnnotation(); if (StringUtils.hasText(afterThrowingAnnotation.throwing())) { springAdvice.setThrowingName(afterThrowingAnnotation.throwing()); } - break; - default: - throw new UnsupportedOperationException( - "Unsupported advice type on method: " + candidateAdviceMethod); + } + default -> throw new UnsupportedOperationException( + "Unsupported advice type on method: " + candidateAdviceMethod); } // Now to configure the advice... diff --git a/spring-beans/src/jmh/java/org/springframework/beans/AbstractPropertyAccessorBenchmark.java b/spring-beans/src/jmh/java/org/springframework/beans/AbstractPropertyAccessorBenchmark.java index d407318f103c..d71837d6b75b 100644 --- a/spring-beans/src/jmh/java/org/springframework/beans/AbstractPropertyAccessorBenchmark.java +++ b/spring-beans/src/jmh/java/org/springframework/beans/AbstractPropertyAccessorBenchmark.java @@ -61,18 +61,14 @@ public void setup() { this.propertyAccessor = new BeanWrapperImpl(this.target); } switch (this.customEditor) { - case "stringTrimmer": - this.propertyAccessor.registerCustomEditor(String.class, new StringTrimmerEditor(false)); - break; - case "numberOnPath": - this.propertyAccessor.registerCustomEditor(int.class, "array.somePath", new CustomNumberEditor(Integer.class, false)); - break; - case "numberOnNestedPath": - this.propertyAccessor.registerCustomEditor(int.class, "array[0].somePath", new CustomNumberEditor(Integer.class, false)); - break; - case "numberOnType": - this.propertyAccessor.registerCustomEditor(int.class, new CustomNumberEditor(Integer.class, false)); - break; + case "stringTrimmer" -> this.propertyAccessor.registerCustomEditor(String.class, + new StringTrimmerEditor(false)); + case "numberOnPath" -> this.propertyAccessor.registerCustomEditor(int.class, "array.somePath", + new CustomNumberEditor(Integer.class, false)); + case "numberOnNestedPath" -> this.propertyAccessor.registerCustomEditor(int.class, "array[0].somePath", + new CustomNumberEditor(Integer.class, false)); + case "numberOnType" -> this.propertyAccessor.registerCustomEditor(int.class, + new CustomNumberEditor(Integer.class, false)); } } diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java index 3d7bf4c7b0dc..23eaee1dd207 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java @@ -333,20 +333,18 @@ public final MimeMessage getMimeMessage() { */ protected void createMimeMultiparts(MimeMessage mimeMessage, int multipartMode) throws MessagingException { switch (multipartMode) { - case MULTIPART_MODE_NO: - setMimeMultiparts(null, null); - break; - case MULTIPART_MODE_MIXED: + case MULTIPART_MODE_NO -> setMimeMultiparts(null, null); + case MULTIPART_MODE_MIXED -> { MimeMultipart mixedMultipart = new MimeMultipart(MULTIPART_SUBTYPE_MIXED); mimeMessage.setContent(mixedMultipart); setMimeMultiparts(mixedMultipart, mixedMultipart); - break; - case MULTIPART_MODE_RELATED: + } + case MULTIPART_MODE_RELATED -> { MimeMultipart relatedMultipart = new MimeMultipart(MULTIPART_SUBTYPE_RELATED); mimeMessage.setContent(relatedMultipart); setMimeMultiparts(relatedMultipart, relatedMultipart); - break; - case MULTIPART_MODE_MIXED_RELATED: + } + case MULTIPART_MODE_MIXED_RELATED -> { MimeMultipart rootMixedMultipart = new MimeMultipart(MULTIPART_SUBTYPE_MIXED); mimeMessage.setContent(rootMixedMultipart); MimeMultipart nestedRelatedMultipart = new MimeMultipart(MULTIPART_SUBTYPE_RELATED); @@ -354,9 +352,9 @@ protected void createMimeMultiparts(MimeMessage mimeMessage, int multipartMode) relatedBodyPart.setContent(nestedRelatedMultipart); rootMixedMultipart.addBodyPart(relatedBodyPart); setMimeMultiparts(rootMixedMultipart, nestedRelatedMultipart); - break; - default: - throw new IllegalArgumentException("Only multipart modes MIXED_RELATED, RELATED and NO supported"); + } + default -> throw new IllegalArgumentException( + "Only multipart modes MIXED_RELATED, RELATED and NO supported"); } } diff --git a/spring-context/src/main/java/org/springframework/cache/annotation/CachingConfigurationSelector.java b/spring-context/src/main/java/org/springframework/cache/annotation/CachingConfigurationSelector.java index 3c55c95d5992..1af81080ebb8 100644 --- a/spring-context/src/main/java/org/springframework/cache/annotation/CachingConfigurationSelector.java +++ b/spring-context/src/main/java/org/springframework/cache/annotation/CachingConfigurationSelector.java @@ -68,14 +68,10 @@ public class CachingConfigurationSelector extends AdviceModeImportSelector getProxyImports(); + case ASPECTJ -> getAspectJImports(); + }; } /** diff --git a/spring-context/src/main/java/org/springframework/context/annotation/TypeFilterUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/TypeFilterUtils.java index 340c232f60f1..4f02a7ebb129 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/TypeFilterUtils.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/TypeFilterUtils.java @@ -78,38 +78,32 @@ public static List createTypeFiltersFor(AnnotationAttributes filterA for (Class filterClass : filterAttributes.getClassArray("classes")) { switch (filterType) { - case ANNOTATION: + case ANNOTATION -> { Assert.isAssignable(Annotation.class, filterClass, "@ComponentScan ANNOTATION type filter requires an annotation type"); @SuppressWarnings("unchecked") Class annotationType = (Class) filterClass; typeFilters.add(new AnnotationTypeFilter(annotationType)); - break; - case ASSIGNABLE_TYPE: - typeFilters.add(new AssignableTypeFilter(filterClass)); - break; - case CUSTOM: + } + case ASSIGNABLE_TYPE -> typeFilters.add(new AssignableTypeFilter(filterClass)); + case CUSTOM -> { Assert.isAssignable(TypeFilter.class, filterClass, "@ComponentScan CUSTOM type filter requires a TypeFilter implementation"); TypeFilter filter = ParserStrategyUtils.instantiateClass(filterClass, TypeFilter.class, environment, resourceLoader, registry); typeFilters.add(filter); - break; - default: - throw new IllegalArgumentException("Filter type not supported with Class value: " + filterType); + } + default -> throw new IllegalArgumentException( + "Filter type not supported with Class value: " + filterType); } } for (String expression : filterAttributes.getStringArray("pattern")) { switch (filterType) { - case ASPECTJ: - typeFilters.add(new AspectJTypeFilter(expression, resourceLoader.getClassLoader())); - break; - case REGEX: - typeFilters.add(new RegexPatternTypeFilter(Pattern.compile(expression))); - break; - default: - throw new IllegalArgumentException("Filter type not supported with String pattern: " + filterType); + case ASPECTJ -> typeFilters.add(new AspectJTypeFilter(expression, resourceLoader.getClassLoader())); + case REGEX -> typeFilters.add(new RegexPatternTypeFilter(Pattern.compile(expression))); + default -> throw new IllegalArgumentException( + "Filter type not supported with String pattern: " + filterType); } } diff --git a/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeFormatterRegistrar.java b/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeFormatterRegistrar.java index ec4964b0e149..0d35e95cd4ca 100644 --- a/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeFormatterRegistrar.java +++ b/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeFormatterRegistrar.java @@ -209,11 +209,11 @@ private DateTimeFormatter getFormatter(Type type) { } private DateTimeFormatter getFallbackFormatter(Type type) { - switch (type) { - case DATE: return DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); - case TIME: return DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT); - default: return DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); - } + return switch (type) { + case DATE -> DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT); + case TIME -> DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT); + case DATE_TIME -> DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT); + }; } } diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurationSelector.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurationSelector.java index 76c338090feb..0acc985d3ea0 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurationSelector.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurationSelector.java @@ -18,7 +18,7 @@ import org.springframework.context.annotation.AdviceMode; import org.springframework.context.annotation.AdviceModeImportSelector; -import org.springframework.lang.Nullable; +import org.springframework.lang.NonNull; /** * Selects which implementation of {@link AbstractAsyncConfiguration} should @@ -43,16 +43,12 @@ public class AsyncConfigurationSelector extends AdviceModeImportSelector new String[]{ProxyAsyncConfiguration.class.getName()}; + case ASPECTJ -> new String[]{ASYNC_EXECUTION_ASPECT_CONFIGURATION_CLASS_NAME}; + }; } } diff --git a/spring-core/src/main/java/org/springframework/asm/TypePath.java b/spring-core/src/main/java/org/springframework/asm/TypePath.java index b7cf845e7a4d..be95d3a55fac 100644 --- a/spring-core/src/main/java/org/springframework/asm/TypePath.java +++ b/spring-core/src/main/java/org/springframework/asm/TypePath.java @@ -163,22 +163,13 @@ public String toString() { int length = getLength(); StringBuilder result = new StringBuilder(length * 2); for (int i = 0; i < length; ++i) { - switch (getStep(i)) { - case ARRAY_ELEMENT: - result.append('['); - break; - case INNER_TYPE: - result.append('.'); - break; - case WILDCARD_BOUND: - result.append('*'); - break; - case TYPE_ARGUMENT: - result.append(getStepArgument(i)).append(';'); - break; - default: - throw new AssertionError(); - } + switch (getStep(i)) { + case ARRAY_ELEMENT -> result.append('['); + case INNER_TYPE -> result.append('.'); + case WILDCARD_BOUND -> result.append('*'); + case TYPE_ARGUMENT -> result.append(getStepArgument(i)).append(';'); + default -> throw new AssertionError(); + } } return result.toString(); } diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationsScanner.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationsScanner.java index 19d520c3c14a..88e65703a0e4 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotationsScanner.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotationsScanner.java @@ -95,19 +95,13 @@ private static R process(C context, AnnotatedElement source, private static R processClass(C context, Class source, SearchStrategy searchStrategy, AnnotationsProcessor processor) { - switch (searchStrategy) { - case DIRECT: - return processElement(context, source, processor); - case INHERITED_ANNOTATIONS: - return processClassInheritedAnnotations(context, source, searchStrategy, processor); - case SUPERCLASS: - return processClassHierarchy(context, source, processor, false, false); - case TYPE_HIERARCHY: - return processClassHierarchy(context, source, processor, true, false); - case TYPE_HIERARCHY_AND_ENCLOSING_CLASSES: - return processClassHierarchy(context, source, processor, true, true); - } - throw new IllegalStateException("Unsupported search strategy " + searchStrategy); + return switch (searchStrategy) { + case DIRECT -> processElement(context, source, processor); + case INHERITED_ANNOTATIONS -> processClassInheritedAnnotations(context, source, searchStrategy, processor); + case SUPERCLASS -> processClassHierarchy(context, source, processor, false, false); + case TYPE_HIERARCHY -> processClassHierarchy(context, source, processor, true, false); + case TYPE_HIERARCHY_AND_ENCLOSING_CLASSES -> processClassHierarchy(context, source, processor, true, true); + }; } @Nullable @@ -238,19 +232,14 @@ private static R processClassHierarchy(C context, int[] aggregateIndex, C private static R processMethod(C context, Method source, SearchStrategy searchStrategy, AnnotationsProcessor processor) { - switch (searchStrategy) { - case DIRECT: - case INHERITED_ANNOTATIONS: - return processMethodInheritedAnnotations(context, source, processor); - case SUPERCLASS: - return processMethodHierarchy(context, new int[] {0}, source.getDeclaringClass(), - processor, source, false); - case TYPE_HIERARCHY: - case TYPE_HIERARCHY_AND_ENCLOSING_CLASSES: - return processMethodHierarchy(context, new int[] {0}, source.getDeclaringClass(), - processor, source, true); - } - throw new IllegalStateException("Unsupported search strategy " + searchStrategy); + return switch (searchStrategy) { + case DIRECT, INHERITED_ANNOTATIONS -> processMethodInheritedAnnotations(context, source, processor); + case SUPERCLASS -> processMethodHierarchy(context, new int[]{0}, source.getDeclaringClass(), + processor, source, false); + case TYPE_HIERARCHY, TYPE_HIERARCHY_AND_ENCLOSING_CLASSES -> processMethodHierarchy(context, new int[]{0}, + source.getDeclaringClass(), + processor, source, true); + }; } @Nullable diff --git a/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java b/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java index 5d4dd0c86b41..b8f030dd52a4 100644 --- a/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java +++ b/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java @@ -70,25 +70,23 @@ private static Profiles parseTokens(String expression, StringTokenizer tokens, C continue; } switch (token) { - case "(": + case "(" -> { Profiles contents = parseTokens(expression, tokens, Context.BRACKET); if (context == Context.INVERT) { return contents; } elements.add(contents); - break; - case "&": + } + case "&" -> { assertWellFormed(expression, operator == null || operator == Operator.AND); operator = Operator.AND; - break; - case "|": + } + case "|" -> { assertWellFormed(expression, operator == null || operator == Operator.OR); operator = Operator.OR; - break; - case "!": - elements.add(not(parseTokens(expression, tokens, Context.INVERT))); - break; - case ")": + } + case "!" -> elements.add(not(parseTokens(expression, tokens, Context.INVERT))); + case ")" -> { Profiles merged = merge(expression, elements, operator); if (context == Context.BRACKET) { return merged; @@ -96,13 +94,14 @@ private static Profiles parseTokens(String expression, StringTokenizer tokens, C elements.clear(); elements.add(merged); operator = null; - break; - default: + } + default -> { Profiles value = equals(token); if (context == Context.INVERT) { return value; } elements.add(value); + } } } return merge(expression, elements, operator); diff --git a/spring-core/src/main/java/org/springframework/core/io/buffer/DataBufferUtils.java b/spring-core/src/main/java/org/springframework/core/io/buffer/DataBufferUtils.java index d97a59fe45e0..73f4579c1a84 100644 --- a/spring-core/src/main/java/org/springframework/core/io/buffer/DataBufferUtils.java +++ b/spring-core/src/main/java/org/springframework/core/io/buffer/DataBufferUtils.java @@ -608,14 +608,11 @@ public static Matcher matcher(byte[]... delimiters) { private static NestedMatcher createMatcher(byte[] delimiter) { Assert.isTrue(delimiter.length > 0, "Delimiter must not be empty"); - switch (delimiter.length) { - case 1: - return (delimiter[0] == 10 ? SingleByteMatcher.NEWLINE_MATCHER : new SingleByteMatcher(delimiter)); - case 2: - return new TwoByteMatcher(delimiter); - default: - return new KnuthMorrisPrattMatcher(delimiter); - } + return switch (delimiter.length) { + case 1 -> (delimiter[0] == 10 ? SingleByteMatcher.NEWLINE_MATCHER : new SingleByteMatcher(delimiter)); + case 2 -> new TwoByteMatcher(delimiter); + default -> new KnuthMorrisPrattMatcher(delimiter); + }; } diff --git a/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureCallbackRegistry.java b/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureCallbackRegistry.java index d3be92bbcd56..343e81c07164 100644 --- a/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureCallbackRegistry.java +++ b/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureCallbackRegistry.java @@ -56,16 +56,12 @@ public void addCallback(ListenableFutureCallback callback) { Assert.notNull(callback, "'callback' must not be null"); synchronized (this.mutex) { switch (this.state) { - case NEW: + case NEW -> { this.successCallbacks.add(callback); this.failureCallbacks.add(callback); - break; - case SUCCESS: - notifySuccess(callback); - break; - case FAILURE: - notifyFailure(callback); - break; + } + case SUCCESS -> notifySuccess(callback); + case FAILURE -> notifyFailure(callback); } } } @@ -99,12 +95,8 @@ public void addSuccessCallback(SuccessCallback callback) { Assert.notNull(callback, "'callback' must not be null"); synchronized (this.mutex) { switch (this.state) { - case NEW: - this.successCallbacks.add(callback); - break; - case SUCCESS: - notifySuccess(callback); - break; + case NEW -> this.successCallbacks.add(callback); + case SUCCESS -> notifySuccess(callback); } } } @@ -118,12 +110,8 @@ public void addFailureCallback(FailureCallback callback) { Assert.notNull(callback, "'callback' must not be null"); synchronized (this.mutex) { switch (this.state) { - case NEW: - this.failureCallbacks.add(callback); - break; - case FAILURE: - notifyFailure(callback); - break; + case NEW -> this.failureCallbacks.add(callback); + case FAILURE -> notifyFailure(callback); } } } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java b/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java index 3a03cfd9a1a4..b1afbedc2efd 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/SpelMessage.java @@ -282,10 +282,8 @@ public enum SpelMessage { public String formatMessage(Object... inserts) { StringBuilder formattedMessage = new StringBuilder(); formattedMessage.append("EL").append(this.code); - switch (this.kind) { - case ERROR: - formattedMessage.append('E'); - break; + if (this.kind == Kind.ERROR) { + formattedMessage.append('E'); } formattedMessage.append(": "); formattedMessage.append(MessageFormat.format(this.message, inserts)); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpDivide.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpDivide.java index f555d75f3209..7ade8deaee24 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpDivide.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpDivide.java @@ -115,21 +115,12 @@ public void generateCode(MethodVisitor mv, CodeFlow cf) { cf.exitCompilationScope(); CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(mv, rightDesc, targetDesc); switch (targetDesc) { - case 'I': - mv.visitInsn(IDIV); - break; - case 'J': - mv.visitInsn(LDIV); - break; - case 'F': - mv.visitInsn(FDIV); - break; - case 'D': - mv.visitInsn(DDIV); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(IDIV); + case 'J' -> mv.visitInsn(LDIV); + case 'F' -> mv.visitInsn(FDIV); + case 'D' -> mv.visitInsn(DDIV); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } cf.pushDescriptor(this.exitTypeDescriptor); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMinus.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMinus.java index ddbc9c7d6f67..9d69f0a6fa0c 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMinus.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMinus.java @@ -184,40 +184,22 @@ public void generateCode(MethodVisitor mv, CodeFlow cf) { cf.exitCompilationScope(); CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(mv, rightDesc, targetDesc); switch (targetDesc) { - case 'I': - mv.visitInsn(ISUB); - break; - case 'J': - mv.visitInsn(LSUB); - break; - case 'F': - mv.visitInsn(FSUB); - break; - case 'D': - mv.visitInsn(DSUB); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(ISUB); + case 'J' -> mv.visitInsn(LSUB); + case 'F' -> mv.visitInsn(FSUB); + case 'D' -> mv.visitInsn(DSUB); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } else { switch (targetDesc) { - case 'I': - mv.visitInsn(INEG); - break; - case 'J': - mv.visitInsn(LNEG); - break; - case 'F': - mv.visitInsn(FNEG); - break; - case 'D': - mv.visitInsn(DNEG); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(INEG); + case 'J' -> mv.visitInsn(LNEG); + case 'F' -> mv.visitInsn(FNEG); + case 'D' -> mv.visitInsn(DNEG); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } cf.pushDescriptor(this.exitTypeDescriptor); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpModulus.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpModulus.java index 51385a3603ea..3d229cedd68a 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpModulus.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpModulus.java @@ -112,21 +112,12 @@ public void generateCode(MethodVisitor mv, CodeFlow cf) { cf.exitCompilationScope(); CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(mv, rightDesc, targetDesc); switch (targetDesc) { - case 'I': - mv.visitInsn(IREM); - break; - case 'J': - mv.visitInsn(LREM); - break; - case 'F': - mv.visitInsn(FREM); - break; - case 'D': - mv.visitInsn(DREM); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(IREM); + case 'J' -> mv.visitInsn(LREM); + case 'F' -> mv.visitInsn(FREM); + case 'D' -> mv.visitInsn(DREM); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } cf.pushDescriptor(this.exitTypeDescriptor); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMultiply.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMultiply.java index 83c406e01d09..3db753c15a64 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMultiply.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpMultiply.java @@ -140,21 +140,12 @@ public void generateCode(MethodVisitor mv, CodeFlow cf) { cf.exitCompilationScope(); CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(mv, rightDesc, targetDesc); switch (targetDesc) { - case 'I': - mv.visitInsn(IMUL); - break; - case 'J': - mv.visitInsn(LMUL); - break; - case 'F': - mv.visitInsn(FMUL); - break; - case 'D': - mv.visitInsn(DMUL); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(IMUL); + case 'J' -> mv.visitInsn(LMUL); + case 'F' -> mv.visitInsn(FMUL); + case 'D' -> mv.visitInsn(DMUL); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } cf.pushDescriptor(this.exitTypeDescriptor); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpPlus.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpPlus.java index 098f96dca123..f4ff34235f72 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpPlus.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OpPlus.java @@ -226,21 +226,12 @@ public void generateCode(MethodVisitor mv, CodeFlow cf) { cf.exitCompilationScope(); CodeFlow.insertNumericUnboxOrPrimitiveTypeCoercion(mv, rightDesc, targetDesc); switch (targetDesc) { - case 'I': - mv.visitInsn(IADD); - break; - case 'J': - mv.visitInsn(LADD); - break; - case 'F': - mv.visitInsn(FADD); - break; - case 'D': - mv.visitInsn(DADD); - break; - default: - throw new IllegalStateException( - "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); + case 'I' -> mv.visitInsn(IADD); + case 'J' -> mv.visitInsn(LADD); + case 'F' -> mv.visitInsn(FADD); + case 'D' -> mv.visitInsn(DADD); + default -> throw new IllegalStateException( + "Unrecognized exit type descriptor: '" + this.exitTypeDescriptor + "'"); } } } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java index d2034ef761b8..63da77012cde 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/Selection.java @@ -209,12 +209,12 @@ public String toStringAST() { } private String prefix() { - switch (this.variant) { - case ALL: return "?["; - case FIRST: return "^["; - case LAST: return "$["; - } - return ""; + return switch (this.variant) { + case ALL -> "?["; + case FIRST -> "^["; + case LAST -> "$["; + default -> ""; + }; } } diff --git a/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java b/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java index 09ae22efe052..5ba97293f38c 100644 --- a/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java +++ b/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java @@ -84,22 +84,19 @@ private LogAdapter() { * @param name the logger name */ public static Log createLog(String name) { - switch (logApi) { - case LOG4J: - return Log4jAdapter.createLog(name); - case SLF4J_LAL: - return Slf4jAdapter.createLocationAwareLog(name); - case SLF4J: - return Slf4jAdapter.createLog(name); - default: - // Defensively use lazy-initializing adapter class here as well since the - // java.logging module is not present by default on JDK 9. We are requiring - // its presence if neither Log4j nor SLF4J is available; however, in the - // case of Log4j or SLF4J, we are trying to prevent early initialization - // of the JavaUtilLog adapter - e.g. by a JVM in debug mode - when eagerly - // trying to parse the bytecode for all the cases of this switch clause. - return JavaUtilAdapter.createLog(name); - } + return switch (logApi) { + case LOG4J -> Log4jAdapter.createLog(name); + case SLF4J_LAL -> Slf4jAdapter.createLocationAwareLog(name); + case SLF4J -> Slf4jAdapter.createLog(name); + default -> + // Defensively use lazy-initializing adapter class here as well since the + // java.logging module is not present by default on JDK 9. We are requiring + // its presence if neither Log4j nor SLF4J is available; however, in the + // case of Log4j or SLF4J, we are trying to prevent early initialization + // of the JavaUtilLog adapter - e.g. by a JVM in debug mode - when eagerly + // trying to parse the bytecode for all the cases of this switch clause. + JavaUtilAdapter.createLog(name); + }; } private static boolean isPresent(String className) { diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java index e8524239e9e4..a6cec5ce4ebc 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MarshallingMessageConverter.java @@ -155,14 +155,11 @@ public void afterPropertiesSet() { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { Assert.state(this.marshaller != null, "No Marshaller set"); try { - switch (this.targetType) { - case TEXT: - return marshalToTextMessage(object, session, this.marshaller); - case BYTES: - return marshalToBytesMessage(object, session, this.marshaller); - default: - return marshalToMessage(object, session, this.marshaller, this.targetType); - } + return switch (this.targetType) { + case TEXT -> marshalToTextMessage(object, session, this.marshaller); + case BYTES -> marshalToBytesMessage(object, session, this.marshaller); + default -> marshalToMessage(object, session, this.marshaller, this.targetType); + }; } catch (XmlMappingException | IOException ex) { throw new MessageConversionException("Could not marshal [" + object + "]", ex); diff --git a/spring-messaging/src/jmh/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryBenchmark.java b/spring-messaging/src/jmh/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryBenchmark.java index d33412bbab47..c80415c6fbbd 100644 --- a/spring-messaging/src/jmh/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryBenchmark.java +++ b/spring-messaging/src/jmh/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryBenchmark.java @@ -145,18 +145,15 @@ public static class FindRequest { @Setup(Level.Trial) public void doSetup(ServerState serverState) { switch (this.contention) { - case "noSubscribers": + case "noSubscribers" -> { this.destination = "someDestination_withNoSubscribers_" + serverState.uniqueIdGenerator.incrementAndGet(); - break; - case "sameDestination": - this.destination = serverState.destinationIds[0]; - break; - case "none": + } + case "sameDestination" -> this.destination = serverState.destinationIds[0]; + case "none" -> { int uniqueNumber = serverState.uniqueIdGenerator.getAndIncrement(); this.destination = serverState.destinationIds[uniqueNumber % serverState.destinationIds.length]; - break; - default: - throw new IllegalStateException(); + } + default -> throw new IllegalStateException(); } } } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketFrameTypeMessageCondition.java b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketFrameTypeMessageCondition.java index 12ab2ead21c2..fb09da86c146 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketFrameTypeMessageCondition.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/rsocket/annotation/support/RSocketFrameTypeMessageCondition.java @@ -192,20 +192,16 @@ public int compareTo(RSocketFrameTypeMessageCondition other, Message message) * @since 5.2.2 */ public static RSocketFrameTypeMessageCondition getCondition(int cardinalityIn, int cardinalityOut) { - switch (cardinalityIn) { - case 0: - case 1: - switch (cardinalityOut) { - case 0: return REQUEST_FNF_OR_RESPONSE_CONDITION; - case 1: return REQUEST_RESPONSE_CONDITION; - case 2: return REQUEST_STREAM_CONDITION; - default: throw new IllegalStateException("Invalid cardinality: " + cardinalityOut); - } - case 2: - return REQUEST_CHANNEL_CONDITION; - default: - throw new IllegalStateException("Invalid cardinality: " + cardinalityIn); - } + return switch (cardinalityIn) { + case 0, 1 -> switch (cardinalityOut) { + case 0 -> REQUEST_FNF_OR_RESPONSE_CONDITION; + case 1 -> REQUEST_RESPONSE_CONDITION; + case 2 -> REQUEST_STREAM_CONDITION; + default -> throw new IllegalStateException("Invalid cardinality: " + cardinalityOut); + }; + case 2 -> REQUEST_CHANNEL_CONDITION; + default -> throw new IllegalStateException("Invalid cardinality: " + cardinalityIn); + }; } } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java index 0fb6acc3bab5..977b71de1398 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java @@ -266,13 +266,14 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl this.targetFactory, this.properties, this.synchronizedWithTransaction); switch (method.getName()) { - case "getTargetEntityManager": + case "getTargetEntityManager" -> { // Handle EntityManagerProxy interface. if (target == null) { throw new IllegalStateException("No transactional EntityManager available"); } return target; - case "unwrap": + } + case "unwrap" -> { Class targetClass = (Class) args[0]; if (targetClass == null) { return (target != null ? target : proxy); @@ -281,8 +282,8 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl if (target == null) { throw new IllegalStateException("No transactional EntityManager available"); } - // Still perform unwrap call on target EntityManager. - break; + } + // Still perform unwrap call on target EntityManager. } if (transactionRequiringMethods.contains(method.getName())) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java index b64258d9dbf0..2ad8daaff308 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/EclipseLinkJpaVendorAdapter.java @@ -94,19 +94,19 @@ public Map getJpaPropertyMap() { */ @Nullable protected String determineTargetDatabaseName(Database database) { - switch (database) { - case DB2: return TargetDatabase.DB2; - case DERBY: return TargetDatabase.Derby; - case HANA: return TargetDatabase.HANA; - case HSQL: return TargetDatabase.HSQL; - case INFORMIX: return TargetDatabase.Informix; - case MYSQL: return TargetDatabase.MySQL; - case ORACLE: return TargetDatabase.Oracle; - case POSTGRESQL: return TargetDatabase.PostgreSQL; - case SQL_SERVER: return TargetDatabase.SQLServer; - case SYBASE: return TargetDatabase.Sybase; - default: return null; - } + return switch (database) { + case DB2 -> TargetDatabase.DB2; + case DERBY -> TargetDatabase.Derby; + case HANA -> TargetDatabase.HANA; + case HSQL -> TargetDatabase.HSQL; + case INFORMIX -> TargetDatabase.Informix; + case MYSQL -> TargetDatabase.MySQL; + case ORACLE -> TargetDatabase.Oracle; + case POSTGRESQL -> TargetDatabase.PostgreSQL; + case SQL_SERVER -> TargetDatabase.SQLServer; + case SYBASE -> TargetDatabase.Sybase; + default -> null; + }; } @Override diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java index 67d86d87e0bb..041f23da5fb3 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaVendorAdapter.java @@ -169,20 +169,20 @@ private Map buildJpaPropertyMap(boolean connectionReleaseOnClose */ @Nullable protected Class determineDatabaseDialectClass(Database database) { - switch (database) { - case DB2: return DB2Dialect.class; - case DERBY: return DerbyTenSevenDialect.class; - case H2: return H2Dialect.class; - case HANA: return HANAColumnStoreDialect.class; - case HSQL: return HSQLDialect.class; - case INFORMIX: return Informix10Dialect.class; - case MYSQL: return MySQL57Dialect.class; - case ORACLE: return Oracle12cDialect.class; - case POSTGRESQL: return PostgreSQL95Dialect.class; - case SQL_SERVER: return SQLServer2012Dialect.class; - case SYBASE: return SybaseDialect.class; - default: return null; - } + return switch (database) { + case DB2 -> DB2Dialect.class; + case DERBY -> DerbyTenSevenDialect.class; + case H2 -> H2Dialect.class; + case HANA -> HANAColumnStoreDialect.class; + case HSQL -> HSQLDialect.class; + case INFORMIX -> Informix10Dialect.class; + case MYSQL -> MySQL57Dialect.class; + case ORACLE -> Oracle12cDialect.class; + case POSTGRESQL -> PostgreSQL95Dialect.class; + case SQL_SERVER -> SQLServer2012Dialect.class; + case SYBASE -> SybaseDialect.class; + default -> null; + }; } @Override diff --git a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/R2dbcTransactionManager.java b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/R2dbcTransactionManager.java index e22c7a1dac9f..fdce9d94e4e8 100644 --- a/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/R2dbcTransactionManager.java +++ b/spring-r2dbc/src/main/java/org/springframework/r2dbc/connection/R2dbcTransactionManager.java @@ -415,17 +415,13 @@ protected Mono prepareTransactionalConnection( */ @Nullable protected IsolationLevel resolveIsolationLevel(int isolationLevel) { - switch (isolationLevel) { - case TransactionDefinition.ISOLATION_READ_COMMITTED: - return IsolationLevel.READ_COMMITTED; - case TransactionDefinition.ISOLATION_READ_UNCOMMITTED: - return IsolationLevel.READ_UNCOMMITTED; - case TransactionDefinition.ISOLATION_REPEATABLE_READ: - return IsolationLevel.REPEATABLE_READ; - case TransactionDefinition.ISOLATION_SERIALIZABLE: - return IsolationLevel.SERIALIZABLE; - } - return null; + return switch (isolationLevel) { + case TransactionDefinition.ISOLATION_READ_COMMITTED -> IsolationLevel.READ_COMMITTED; + case TransactionDefinition.ISOLATION_READ_UNCOMMITTED -> IsolationLevel.READ_UNCOMMITTED; + case TransactionDefinition.ISOLATION_REPEATABLE_READ -> IsolationLevel.REPEATABLE_READ; + case TransactionDefinition.ISOLATION_SERIALIZABLE -> IsolationLevel.SERIALIZABLE; + default -> null; + }; } /** diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java index 9911449917c9..a5feb9e78215 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockPageContext.java @@ -154,20 +154,11 @@ public void setAttribute(String name, @Nullable Object value) { public void setAttribute(String name, @Nullable Object value, int scope) { Assert.notNull(name, "Attribute name must not be null"); switch (scope) { - case PAGE_SCOPE: - setAttribute(name, value); - break; - case REQUEST_SCOPE: - this.request.setAttribute(name, value); - break; - case SESSION_SCOPE: - this.request.getSession().setAttribute(name, value); - break; - case APPLICATION_SCOPE: - this.servletContext.setAttribute(name, value); - break; - default: - throw new IllegalArgumentException("Invalid scope: " + scope); + case PAGE_SCOPE -> setAttribute(name, value); + case REQUEST_SCOPE -> this.request.setAttribute(name, value); + case SESSION_SCOPE -> this.request.getSession().setAttribute(name, value); + case APPLICATION_SCOPE -> this.servletContext.setAttribute(name, value); + default -> throw new IllegalArgumentException("Invalid scope: " + scope); } } @@ -226,20 +217,11 @@ public void removeAttribute(String name) { public void removeAttribute(String name, int scope) { Assert.notNull(name, "Attribute name must not be null"); switch (scope) { - case PAGE_SCOPE: - this.attributes.remove(name); - break; - case REQUEST_SCOPE: - this.request.removeAttribute(name); - break; - case SESSION_SCOPE: - this.request.getSession().removeAttribute(name); - break; - case APPLICATION_SCOPE: - this.servletContext.removeAttribute(name); - break; - default: - throw new IllegalArgumentException("Invalid scope: " + scope); + case PAGE_SCOPE -> this.attributes.remove(name); + case REQUEST_SCOPE -> this.request.removeAttribute(name); + case SESSION_SCOPE -> this.request.getSession().removeAttribute(name); + case APPLICATION_SCOPE -> this.servletContext.removeAttribute(name); + default -> throw new IllegalArgumentException("Invalid scope: " + scope); } } diff --git a/spring-tx/src/main/java/org/springframework/transaction/HeuristicCompletionException.java b/spring-tx/src/main/java/org/springframework/transaction/HeuristicCompletionException.java index c5b6b71f1853..1d661868df2c 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/HeuristicCompletionException.java +++ b/spring-tx/src/main/java/org/springframework/transaction/HeuristicCompletionException.java @@ -49,16 +49,12 @@ public class HeuristicCompletionException extends TransactionException { public static String getStateString(int state) { - switch (state) { - case STATE_COMMITTED: - return "committed"; - case STATE_ROLLED_BACK: - return "rolled back"; - case STATE_MIXED: - return "mixed"; - default: - return "unknown"; - } + return switch (state) { + case STATE_COMMITTED -> "committed"; + case STATE_ROLLED_BACK -> "rolled back"; + case STATE_MIXED -> "mixed"; + default -> "unknown"; + }; } diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java index aa718d7aed61..84f54c85a238 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SpringJtaSynchronizationAdapter.java @@ -171,14 +171,9 @@ public void afterCompletion(int status) { } // Call afterCompletion with the appropriate status indication. switch (status) { - case Status.STATUS_COMMITTED: - this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_COMMITTED); - break; - case Status.STATUS_ROLLEDBACK: - this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_ROLLED_BACK); - break; - default: - this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_UNKNOWN); + case Status.STATUS_COMMITTED -> this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_COMMITTED); + case Status.STATUS_ROLLEDBACK -> this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_ROLLED_BACK); + default -> this.springSynchronization.afterCompletion(TransactionSynchronization.STATUS_UNKNOWN); } } diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java index 43f380719a52..75458f488a67 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2Tokenizer.java @@ -154,18 +154,10 @@ else if (token == null ) { // !previousNull private void updateDepth(JsonToken token) { switch (token) { - case START_OBJECT: - this.objectDepth++; - break; - case END_OBJECT: - this.objectDepth--; - break; - case START_ARRAY: - this.arrayDepth++; - break; - case END_ARRAY: - this.arrayDepth--; - break; + case START_OBJECT -> this.objectDepth++; + case END_OBJECT -> this.objectDepth--; + case START_ARRAY -> this.arrayDepth++; + case END_ARRAY -> this.arrayDepth--; } } diff --git a/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java b/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java index 70664a2e4c27..2ac7fac2acb6 100644 --- a/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java +++ b/spring-web/src/main/java/org/springframework/web/client/DefaultResponseErrorHandler.java @@ -164,12 +164,9 @@ protected void handleError(ClientHttpResponse response, HttpStatus statusCode) t String message = getErrorMessage(statusCode.value(), statusText, body, charset); switch (statusCode.series()) { - case CLIENT_ERROR: - throw HttpClientErrorException.create(message, statusCode, statusText, headers, body, charset); - case SERVER_ERROR: - throw HttpServerErrorException.create(message, statusCode, statusText, headers, body, charset); - default: - throw new UnknownHttpStatusCodeException(message, statusCode.value(), statusText, headers, body, charset); + case CLIENT_ERROR -> throw HttpClientErrorException.create(message, statusCode, statusText, headers, body, charset); + case SERVER_ERROR -> throw HttpServerErrorException.create(message, statusCode, statusText, headers, body, charset); + default -> throw new UnknownHttpStatusCodeException(message, statusCode.value(), statusText, headers, body, charset); } } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java index f45973ef9d03..bab4b1939472 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockPageContext.java @@ -154,20 +154,11 @@ public void setAttribute(String name, @Nullable Object value) { public void setAttribute(String name, @Nullable Object value, int scope) { Assert.notNull(name, "Attribute name must not be null"); switch (scope) { - case PAGE_SCOPE: - setAttribute(name, value); - break; - case REQUEST_SCOPE: - this.request.setAttribute(name, value); - break; - case SESSION_SCOPE: - this.request.getSession().setAttribute(name, value); - break; - case APPLICATION_SCOPE: - this.servletContext.setAttribute(name, value); - break; - default: - throw new IllegalArgumentException("Invalid scope: " + scope); + case PAGE_SCOPE -> setAttribute(name, value); + case REQUEST_SCOPE -> this.request.setAttribute(name, value); + case SESSION_SCOPE -> this.request.getSession().setAttribute(name, value); + case APPLICATION_SCOPE -> this.servletContext.setAttribute(name, value); + default -> throw new IllegalArgumentException("Invalid scope: " + scope); } } @@ -226,20 +217,11 @@ public void removeAttribute(String name) { public void removeAttribute(String name, int scope) { Assert.notNull(name, "Attribute name must not be null"); switch (scope) { - case PAGE_SCOPE: - this.attributes.remove(name); - break; - case REQUEST_SCOPE: - this.request.removeAttribute(name); - break; - case SESSION_SCOPE: - this.request.getSession().removeAttribute(name); - break; - case APPLICATION_SCOPE: - this.servletContext.removeAttribute(name); - break; - default: - throw new IllegalArgumentException("Invalid scope: " + scope); + case PAGE_SCOPE -> this.attributes.remove(name); + case REQUEST_SCOPE -> this.request.removeAttribute(name); + case SESSION_SCOPE -> this.request.getSession().removeAttribute(name); + case APPLICATION_SCOPE -> this.servletContext.removeAttribute(name); + default -> throw new IllegalArgumentException("Invalid scope: " + scope); } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java index f08152d3f652..8660adf04c58 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/ViewControllerBeanDefinitionParser.java @@ -82,24 +82,23 @@ public BeanDefinition parse(Element element, ParserContext parserContext) { String name = element.getLocalName(); switch (name) { - case "view-controller": + case "view-controller" -> { if (element.hasAttribute("view-name")) { controller.getPropertyValues().add("viewName", element.getAttribute("view-name")); } if (statusCode != null) { controller.getPropertyValues().add("statusCode", statusCode); } - break; - case "redirect-view-controller": - controller.getPropertyValues().add("view", getRedirectView(element, statusCode, source)); - break; - case "status-controller": + } + case "redirect-view-controller" -> controller.getPropertyValues() + .add("view", getRedirectView(element, statusCode, source)); + case "status-controller" -> { controller.getPropertyValues().add("statusCode", statusCode); controller.getPropertyValues().add("statusOnly", true); - break; - default: - // Should never happen... - throw new IllegalStateException("Unexpected tag name: " + name); + } + default -> + // Should never happen... + throw new IllegalStateException("Unexpected tag name: " + name); } Map urlMap = (Map) hm.getPropertyValues().get("urlMap"); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java index 46f3149fe852..812b49d377b3 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ConcurrentWebSocketSessionDecorator.java @@ -210,12 +210,12 @@ private void checkSessionLimits() { } else if (getBufferSize() > getBufferSizeLimit()) { switch (this.overflowStrategy) { - case TERMINATE: + case TERMINATE -> { String format = "Buffer size %d bytes for session '%s' exceeds the allowed limit %d"; String reason = String.format(format, getBufferSize(), getId(), getBufferSizeLimit()); limitExceeded(reason); - break; - case DROP: + } + case DROP -> { int i = 0; while (getBufferSize() > getBufferSizeLimit()) { WebSocketMessage message = this.buffer.poll(); @@ -228,10 +228,7 @@ else if (getBufferSize() > getBufferSizeLimit()) { if (logger.isDebugEnabled()) { logger.debug("Dropped " + i + " messages, buffer size: " + getBufferSize()); } - break; - default: - // Should never happen.. - throw new IllegalStateException("Unexpected OverflowStrategy: " + this.overflowStrategy); + } } } } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java index 3f33a3de8960..889444609449 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java @@ -407,17 +407,14 @@ private void logUndeliveredMessages(int index, String[] messages) { } private static List getUndelivered(String[] messages, int i) { - switch (messages.length - i) { - case 0: - return Collections.emptyList(); - case 1: - return (messages[i].trim().isEmpty() ? - Collections.emptyList() : Collections.singletonList(messages[i])); - default: - return Arrays.stream(Arrays.copyOfRange(messages, i, messages.length)) - .filter(message -> !message.trim().isEmpty()) - .collect(Collectors.toList()); - } + return switch (messages.length - i) { + case 0 -> Collections.emptyList(); + case 1 -> (messages[i].trim().isEmpty() ? + Collections.emptyList() : Collections.singletonList(messages[i])); + default -> Arrays.stream(Arrays.copyOfRange(messages, i, messages.length)) + .filter(message -> !message.trim().isEmpty()) + .collect(Collectors.toList()); + }; } /**