From 6f8aab62a2719a132ae4234d0b515cf95b2b5e63 Mon Sep 17 00:00:00 2001 From: Yanming Zhou Date: Thu, 11 Jun 2026 09:47:35 +0800 Subject: [PATCH] Replace isAssignableFrom with isInstance where feasible Signed-off-by: Yanming Zhou --- .../modules/ROOT/pages/integration/jmx/notifications.adoc | 2 +- .../aop/aspectj/AspectJAfterThrowingAdvice.java | 2 +- .../beans/factory/support/SimpleInstantiationStrategy.java | 2 +- .../context/annotation/ComponentScanBeanDefinitionParser.java | 2 +- .../main/java/org/springframework/util/ReflectionUtils.java | 2 +- .../expression/spel/ast/OperatorInstanceof.java | 2 +- .../org/springframework/jdbc/support/GeneratedKeyHolder.java | 2 +- .../support/CustomSQLExceptionTranslatorRegistrarTests.java | 4 ++-- .../java/org/springframework/messaging/MessageHeaders.java | 2 +- .../messaging/handler/CompositeMessageCondition.java | 2 +- .../annotation/reactive/HeadersMethodArgumentResolver.java | 2 +- .../annotation/support/HeadersMethodArgumentResolver.java | 2 +- .../annotation/support/MessageMethodArgumentResolver.java | 2 +- .../messaging/support/AbstractHeaderMapper.java | 2 +- .../reactive/PayloadMethodArgumentResolverTests.java | 3 +-- .../messaging/simp/SimpMessagingTemplateTests.java | 2 +- .../java/org/springframework/test/web/ModelAndViewAssert.java | 2 +- .../src/main/java/org/springframework/web/util/TagUtils.java | 2 +- .../web/reactive/result/SimpleHandlerAdapter.java | 2 +- .../method/annotation/ErrorsMethodArgumentResolver.java | 4 ++-- .../annotation/RequestAttributeMethodArgumentResolver.java | 2 +- .../socket/server/support/WebSocketHandlerAdapter.java | 2 +- .../annotation/HttpEntityMethodArgumentResolverTests.java | 2 +- .../method/annotation/MessageReaderArgumentResolverTests.java | 2 +- .../annotation/RequestBodyMethodArgumentResolverTests.java | 4 ++-- .../annotation/RequestPartMethodArgumentResolverTests.java | 2 +- .../annotation/WebSessionMethodArgumentResolverTests.java | 4 ++-- .../servlet/mvc/method/annotation/ReactiveTypeHandler.java | 4 ++-- .../mvc/method/annotation/RequestResponseBodyAdviceChain.java | 2 +- .../web/servlet/ComplexWebApplicationContext.java | 4 ++-- .../org/springframework/web/socket/WebSocketExtension.java | 2 +- 31 files changed, 37 insertions(+), 38 deletions(-) diff --git a/framework-docs/modules/ROOT/pages/integration/jmx/notifications.adoc b/framework-docs/modules/ROOT/pages/integration/jmx/notifications.adoc index 43c7371671f1..cad52356181d 100644 --- a/framework-docs/modules/ROOT/pages/integration/jmx/notifications.adoc +++ b/framework-docs/modules/ROOT/pages/integration/jmx/notifications.adoc @@ -32,7 +32,7 @@ example writes notifications to the console: } public boolean isNotificationEnabled(Notification notification) { - return AttributeChangeNotification.class.isAssignableFrom(notification.getClass()); + return notification instanceof AttributeChangeNotification; } } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterThrowingAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterThrowingAdvice.java index e43a9d25709e..42a5467d9fc5 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterThrowingAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterThrowingAdvice.java @@ -75,7 +75,7 @@ public void setThrowingName(String name) { * is only invoked if the thrown exception is a subtype of the given throwing type. */ private boolean shouldInvokeOnThrowing(Throwable ex) { - return getDiscoveredThrowingType().isAssignableFrom(ex.getClass()); + return getDiscoveredThrowingType().isInstance(ex); } } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java index 1a0c0cbabd51..c3a8d21088b9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java @@ -159,7 +159,7 @@ public Object instantiate(RootBeanDefinition bd, @Nullable String beanName, Bean return result; } catch (IllegalArgumentException ex) { - if (factoryBean != null && !factoryMethod.getDeclaringClass().isAssignableFrom(factoryBean.getClass())) { + if (factoryBean != null && !factoryMethod.getDeclaringClass().isInstance(factoryBean)) { throw new BeanInstantiationException(factoryMethod, "Illegal factory instance for factory method '" + factoryMethod.getName() + "'; " + "instance: " + factoryBean.getClass().getName(), ex); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java index 9baba919be03..e0cede612972 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java @@ -276,7 +276,7 @@ private Object instantiateUserDefinedStrategy( strategyType.getName() + "]: a zero-argument constructor is required", ex); } - if (!strategyType.isAssignableFrom(result.getClass())) { + if (!strategyType.isInstance(result)) { throw new IllegalArgumentException("Provided class name must be an implementation of " + strategyType); } return result; diff --git a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java index 022357a041f3..0b618354e3e5 100644 --- a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -768,7 +768,7 @@ private static Field[] getDeclaredFields(Class clazz) { public static void shallowCopyFieldState(final Object src, final Object dest) { Assert.notNull(src, "Source for field copy cannot be null"); Assert.notNull(dest, "Destination for field copy cannot be null"); - if (!src.getClass().isAssignableFrom(dest.getClass())) { + if (!src.getClass().isInstance(dest)) { throw new IllegalArgumentException("Destination class [" + dest.getClass().getName() + "] must be same or subclass as source class [" + src.getClass().getName() + "]"); } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OperatorInstanceof.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OperatorInstanceof.java index 72303465ce59..841d2c9f20f7 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/OperatorInstanceof.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/OperatorInstanceof.java @@ -72,7 +72,7 @@ public BooleanTypedValue getValueInternal(ExpressionState state) throws Evaluati result = BooleanTypedValue.FALSE; // null is not an instanceof anything } else { - result = BooleanTypedValue.forValue(rightClass.isAssignableFrom(leftValue.getClass())); + result = BooleanTypedValue.forValue(rightClass.isInstance(leftValue)); } this.type = rightClass; if (rightOperand instanceof TypeReference) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/GeneratedKeyHolder.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/GeneratedKeyHolder.java index dc8caf396067..be4bcf9d3259 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/GeneratedKeyHolder.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/GeneratedKeyHolder.java @@ -78,7 +78,7 @@ public GeneratedKeyHolder(List> keyList) { Iterator keyIter = this.keyList.get(0).values().iterator(); if (keyIter.hasNext()) { Object key = keyIter.next(); - if (key == null || !(keyType.isAssignableFrom(key.getClass()))) { + if (key == null || !(keyType.isInstance(key))) { throw new DataRetrievalFailureException( "The generated key type is not supported. " + "Unable to cast [" + (key != null ? key.getClass().getName() : null) + diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistrarTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistrarTests.java index 5ef6ce4fadf1..32da46a6b362 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistrarTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSQLExceptionTranslatorRegistrarTests.java @@ -45,11 +45,11 @@ void customErrorCodeTranslation() { DataAccessException exFor4200 = sext.doTranslate("", "", new SQLException("Ouch", "42000", 42000)); assertThat(exFor4200).as("Should have been translated").isNotNull(); - assertThat(BadSqlGrammarException.class.isAssignableFrom(exFor4200.getClass())).as("Should have been instance of BadSqlGrammarException").isTrue(); + assertThat(exFor4200).isInstanceOf(BadSqlGrammarException.class); DataAccessException exFor2 = sext.doTranslate("", "", new SQLException("Ouch", "42000", 2)); assertThat(exFor2).as("Should have been translated").isNotNull(); - assertThat(TransientDataAccessResourceException.class.isAssignableFrom(exFor2.getClass())).as("Should have been instance of TransientDataAccessResourceException").isTrue(); + assertThat(exFor2).isInstanceOf(TransientDataAccessResourceException.class); DataAccessException exFor3 = sext.doTranslate("", "", new SQLException("Ouch", "42000", 3)); assertThat(exFor3).as("Should not have been translated").isNull(); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java index 5d6e9be42b11..cf650644ce23 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java @@ -205,7 +205,7 @@ protected static IdGenerator getIdGenerator() { if (value == null) { return null; } - if (!type.isAssignableFrom(value.getClass())) { + if (!type.isInstance(value)) { throw new IllegalArgumentException("Incorrect type specified for header '" + key + "'. Expected [" + type + "] but actual type is [" + value.getClass() + "]"); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/CompositeMessageCondition.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/CompositeMessageCondition.java index 5cd8ed31f5af..0ce9dfb8e21c 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/CompositeMessageCondition.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/CompositeMessageCondition.java @@ -57,7 +57,7 @@ public List> getMessageConditions() { @SuppressWarnings("unchecked") public > T getCondition(Class messageConditionType) { for (MessageCondition condition : this.messageConditions) { - if (messageConditionType.isAssignableFrom(condition.getClass())) { + if (messageConditionType.isInstance(condition)) { return (T) condition; } } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/HeadersMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/HeadersMethodArgumentResolver.java index 5cf74d26e3cb..a4a641434fe5 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/HeadersMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/HeadersMethodArgumentResolver.java @@ -61,7 +61,7 @@ else if (MessageHeaderAccessor.class == paramType) { } else if (MessageHeaderAccessor.class.isAssignableFrom(paramType)) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class); - if (accessor != null && paramType.isAssignableFrom(accessor.getClass())) { + if (accessor != null && paramType.isInstance(accessor)) { return accessor; } else { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/HeadersMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/HeadersMethodArgumentResolver.java index a992b6e88c20..7d674bdd99c4 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/HeadersMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/HeadersMethodArgumentResolver.java @@ -61,7 +61,7 @@ else if (MessageHeaderAccessor.class == paramType) { } else if (MessageHeaderAccessor.class.isAssignableFrom(paramType)) { MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class); - if (accessor != null && paramType.isAssignableFrom(accessor.getClass())) { + if (accessor != null && paramType.isInstance(accessor)) { return accessor; } else { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageMethodArgumentResolver.java index cbd2f7f990fa..29cdc6889e41 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/MessageMethodArgumentResolver.java @@ -74,7 +74,7 @@ public Object resolveArgument(MethodParameter parameter, Message message) thr Class targetMessageType = parameter.getParameterType(); Class targetPayloadType = getPayloadType(parameter, message); - if (!targetMessageType.isAssignableFrom(message.getClass())) { + if (!targetMessageType.isInstance(message)) { throw new MethodArgumentTypeMismatchException(message, parameter, "Actual message type '" + ClassUtils.getDescriptiveType(message) + "' does not match expected type '" + ClassUtils.getQualifiedName(targetMessageType) + "'"); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractHeaderMapper.java b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractHeaderMapper.java index b55945938015..10338ea5e4cd 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractHeaderMapper.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractHeaderMapper.java @@ -95,7 +95,7 @@ protected String toHeaderName(String propertyName) { if (value == null) { return null; } - if (!type.isAssignableFrom(value.getClass())) { + if (!type.isInstance(value)) { if (logger.isDebugEnabled()) { logger.debug("Skipping header '" + name + "': expected type [" + type + "], but got [" + value.getClass() + "]"); diff --git a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java index b6668600cb33..e944fd3fcb46 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/reactive/PayloadMethodArgumentResolverTests.java @@ -169,8 +169,7 @@ private DataBuffer toDataBuffer(String value) { Object value = result.block(Duration.ofSeconds(5)); if (value != null) { - Class expectedType = param.getParameterType(); - assertThat(expectedType.isAssignableFrom(value.getClass())).as("Unexpected return value type: " + value).isTrue(); + assertThat(value).isInstanceOf(param.getParameterType()); } return (T) value; } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java index e5c1fa771b21..c33e647e6abc 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/SimpMessagingTemplateTests.java @@ -164,7 +164,7 @@ void processHeadersToSend() { Map map = this.messagingTemplate.processHeadersToSend(null); assertThat(map).isNotNull(); - assertThat(MessageHeaders.class.isAssignableFrom(map.getClass())).as("Actual: " + map.getClass()).isTrue(); + assertThat(map instanceof MessageHeaders).as("Actual: " + map.getClass()).isTrue(); SimpMessageHeaderAccessor headerAccessor = MessageHeaderAccessor.getAccessor((MessageHeaders) map, SimpMessageHeaderAccessor.class); diff --git a/spring-test/src/main/java/org/springframework/test/web/ModelAndViewAssert.java b/spring-test/src/main/java/org/springframework/test/web/ModelAndViewAssert.java index e8c3fbf1f35d..175fd119b494 100644 --- a/spring-test/src/main/java/org/springframework/test/web/ModelAndViewAssert.java +++ b/spring-test/src/main/java/org/springframework/test/web/ModelAndViewAssert.java @@ -61,7 +61,7 @@ public static T assertAndReturnModelAttributeOfType(ModelAndView mav, String fail("Model attribute with name '" + modelName + "' is null"); } assertTrue("Model attribute is not of expected type '" + expectedType.getName() + "' but rather of type '" + - obj.getClass().getName() + "'", expectedType.isAssignableFrom(obj.getClass())); + obj.getClass().getName() + "'", expectedType.isInstance(obj)); return (T) obj; } diff --git a/spring-web/src/main/java/org/springframework/web/util/TagUtils.java b/spring-web/src/main/java/org/springframework/web/util/TagUtils.java index a7522b982fe4..aa7a495d3f38 100644 --- a/spring-web/src/main/java/org/springframework/web/util/TagUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/TagUtils.java @@ -95,7 +95,7 @@ public static boolean hasAncestorOfType(Tag tag, Class ancestorTagClass) { } Tag ancestor = tag.getParent(); while (ancestor != null) { - if (ancestorTagClass.isAssignableFrom(ancestor.getClass())) { + if (ancestorTagClass.isInstance(ancestor)) { return true; } ancestor = ancestor.getParent(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/SimpleHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/SimpleHandlerAdapter.java index 4204609779d8..22ff5bc308aa 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/SimpleHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/SimpleHandlerAdapter.java @@ -36,7 +36,7 @@ public class SimpleHandlerAdapter implements HandlerAdapter { @Override public boolean supports(Object handler) { - return WebHandler.class.isAssignableFrom(handler.getClass()); + return handler instanceof WebHandler; } @Override diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolver.java index 2214f567bcf8..e66418fcbddb 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ErrorsMethodArgumentResolver.java @@ -65,10 +65,10 @@ public Mono resolveArgument( // This is done to enable early argument resolution here. When the Mono actually // completes it is replaced in the model with the actual value. - if (Mono.class.isAssignableFrom(errors.getClass())) { + if (errors instanceof Mono) { return ((Mono) errors).cast(Object.class); } - else if (Errors.class.isAssignableFrom(errors.getClass())) { + else if (errors instanceof Errors) { return Mono.just(errors); } else { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolver.java index 045b3cf6cd41..d6a73cfa07ee 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/RequestAttributeMethodArgumentResolver.java @@ -76,7 +76,7 @@ protected NamedValueInfo createNamedValueInfo(MethodParameter parameter) { parameter.getGenericParameterType() + " doesn't support empty values."); return toAdapter.fromPublisher(Mono.empty()); } - if (parameter.getParameterType().isAssignableFrom(value.getClass())) { + if (parameter.getParameterType().isInstance(value)) { return value; } ReactiveAdapter fromAdapter = getAdapterRegistry().getAdapter(value.getClass()); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java index 45ad18d4d2a1..09027dc15e20 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/WebSocketHandlerAdapter.java @@ -99,7 +99,7 @@ public WebSocketService getWebSocketService() { @Override public boolean supports(Object handler) { - return WebSocketHandler.class.isAssignableFrom(handler.getClass()); + return handler instanceof WebSocketHandler; } @Override diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityMethodArgumentResolverTests.java index c0892f1b8a7e..52289b89dfce 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/HttpEntityMethodArgumentResolverTests.java @@ -275,7 +275,7 @@ private T resolveValue(ServerWebExchange exchange, ResolvableType type) { Object value = result.block(Duration.ofSeconds(5)); assertThat(value).isNotNull(); - assertThat(param.getParameterType().isAssignableFrom(value.getClass())).as("Unexpected return value type: " + value.getClass()).isTrue(); + assertThat(param.getParameterType().isInstance(value)).as("Unexpected return value type: " + value.getClass()).isTrue(); return (T) value; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java index 16025392f4de..e1bdd2ff2b26 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java @@ -295,7 +295,7 @@ private T resolveValue(MethodParameter param, String body) { Object value = result.block(Duration.ofSeconds(5)); assertThat(value).isNotNull(); - assertThat(param.getParameterType().isAssignableFrom(value.getClass())).as("Unexpected return value type: " + value).isTrue(); + assertThat(param.getParameterType().isInstance(value)).as("Unexpected return value type: " + value).isTrue(); return (T) value; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolverTests.java index 88564e9ace7f..12ea97949e79 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestBodyMethodArgumentResolverTests.java @@ -234,7 +234,7 @@ private T resolveValue(MethodParameter param, String body) { Object value = result.block(Duration.ofSeconds(5)); assertThat(value).isNotNull(); - assertThat(param.getParameterType().isAssignableFrom(value.getClass())) + assertThat(param.getParameterType().isInstance(value)) .as("Unexpected return value type: " + value).isTrue(); //no inspection unchecked @@ -248,7 +248,7 @@ private T resolveValueWithEmptyBody(MethodParameter param) { Object value = result.block(Duration.ofSeconds(5)); if (value != null) { - assertThat(param.getParameterType().isAssignableFrom(value.getClass())) + assertThat(param.getParameterType().isInstance(value)) .as("Unexpected parameter type: " + value).isTrue(); } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestPartMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestPartMethodArgumentResolverTests.java index 5d372db2892a..7d6a53395f54 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestPartMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/RequestPartMethodArgumentResolverTests.java @@ -300,7 +300,7 @@ private T resolveArgument(MethodParameter param, MultipartBodyBuilder builde Object value = result.block(Duration.ofSeconds(5)); assertThat(value).isNotNull(); - assertThat(param.getParameterType().isAssignableFrom(value.getClass())).isTrue(); + assertThat(param.getParameterType().isInstance(value)).isTrue(); return (T) value; } diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionMethodArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionMethodArgumentResolverTests.java index 3c4be1b090eb..d11172b8ea1c 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionMethodArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/WebSessionMethodArgumentResolverTests.java @@ -68,13 +68,13 @@ void resolverArgument() { param = this.testMethod.arg(Mono.class, WebSession.class); actual = this.resolver.resolveArgument(param, context, exchange).block(); assertThat(actual).isNotNull(); - assertThat(Mono.class.isAssignableFrom(actual.getClass())).isTrue(); + assertThat(actual instanceof Mono).isTrue(); assertThat(((Mono) actual).block()).isSameAs(session); param = this.testMethod.arg(Single.class, WebSession.class); actual = this.resolver.resolveArgument(param, context, exchange).block(); assertThat(actual).isNotNull(); - assertThat(Single.class.isAssignableFrom(actual.getClass())).isTrue(); + assertThat(actual instanceof Single).isTrue(); assertThat(((Single) actual).blockingGet()).isSameAs(session); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java index 1833702d3711..5bd707a6edee 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ReactiveTypeHandler.java @@ -579,11 +579,11 @@ private ContextSnapshotHelper(@Nullable ContextSnapshotFactory factory) { @SuppressWarnings("ReactiveStreamsUnusedPublisher") public Object writeReactorContext(Object returnValue) { - if (Mono.class.isAssignableFrom(returnValue.getClass())) { + if (returnValue instanceof Mono) { ContextSnapshot snapshot = this.snapshotFactory.captureAll(); return ((Mono) returnValue).contextWrite(snapshot::updateContext); } - else if (Flux.class.isAssignableFrom(returnValue.getClass())) { + else if (returnValue instanceof Flux) { ContextSnapshot snapshot = this.snapshotFactory.captureAll(); return ((Flux) returnValue).contextWrite(snapshot::updateContext); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java index 30d5cb28ef79..cc5b550c9050 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java @@ -160,7 +160,7 @@ private List getMatchingAdvice(MethodParameter parameter, Class