From dc2f5136197d2d2fd35a8020b0c39be53ea962ca Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 21 Jun 2023 17:17:03 +0200 Subject: [PATCH] Correct supportsEventType checks for payload events See gh-30712 --- ...ApplicationListenerMethodAdapterTests.java | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/spring-context/src/test/java/org/springframework/context/event/ApplicationListenerMethodAdapterTests.java b/spring-context/src/test/java/org/springframework/context/event/ApplicationListenerMethodAdapterTests.java index 858009aabfb..8b9e6d4b947 100644 --- a/spring-context/src/test/java/org/springframework/context/event/ApplicationListenerMethodAdapterTests.java +++ b/spring-context/src/test/java/org/springframework/context/event/ApplicationListenerMethodAdapterTests.java @@ -93,13 +93,13 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv @Test public void listenerWithPayloadAndGenericInformation() { Method method = ReflectionUtils.findMethod(SampleEvents.class, "handleString", String.class); - supportsEventType(true, method, createGenericEventType(String.class)); + supportsEventType(true, method, createPayloadEventType(String.class)); } @Test public void listenerWithInvalidPayloadAndGenericInformation() { Method method = ReflectionUtils.findMethod(SampleEvents.class, "handleString", String.class); - supportsEventType(false, method, createGenericEventType(Integer.class)); + supportsEventType(false, method, createPayloadEventType(Integer.class)); } @Test @@ -123,28 +123,28 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv @Test public void listenerWithAnnotationValue() { Method method = ReflectionUtils.findMethod(SampleEvents.class, "handleStringAnnotationValue"); - supportsEventType(true, method, createGenericEventType(String.class)); + supportsEventType(true, method, createPayloadEventType(String.class)); } @Test public void listenerWithAnnotationClasses() { Method method = ReflectionUtils.findMethod(SampleEvents.class, "handleStringAnnotationClasses"); - supportsEventType(true, method, createGenericEventType(String.class)); + supportsEventType(true, method, createPayloadEventType(String.class)); } @Test public void listenerWithAnnotationValueAndParameter() { Method method = ReflectionUtils.findMethod( SampleEvents.class, "handleStringAnnotationValueAndParameter", String.class); - supportsEventType(true, method, createGenericEventType(String.class)); + supportsEventType(true, method, createPayloadEventType(String.class)); } @Test public void listenerWithSeveralTypes() { Method method = ReflectionUtils.findMethod(SampleEvents.class, "handleStringOrInteger"); - supportsEventType(true, method, createGenericEventType(String.class)); - supportsEventType(true, method, createGenericEventType(Integer.class)); - supportsEventType(false, method, createGenericEventType(Double.class)); + supportsEventType(true, method, createPayloadEventType(String.class)); + supportsEventType(true, method, createPayloadEventType(Integer.class)); + supportsEventType(false, method, createPayloadEventType(Double.class)); } @Test @@ -341,11 +341,11 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv var method = SampleEvents.class.getDeclaredMethod("handleString", String.class); var adapter = new ApplicationListenerMethodAdapter(null, ApplicationListenerMethodAdapterTests.class, method); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class)))) .as("handleString(String) with EntityWrapper").isFalse(); - assertThat(adapter.supportsEventType(ResolvableType.forClass(EntityWrapper.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClass(EntityWrapper.class)))) .as("handleString(String) with EntityWrapper").isFalse(); - assertThat(adapter.supportsEventType(ResolvableType.forClass(String.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClass(String.class)))) .as("handleString(String) with String").isTrue(); } @@ -355,11 +355,11 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv var method = SampleEvents.class.getDeclaredMethod("handleGenericStringPayload", EntityWrapper.class); var adapter = new ApplicationListenerMethodAdapter(null, ApplicationListenerMethodAdapterTests.class, method); - assertThat(adapter.supportsEventType(ResolvableType.forClass(EntityWrapper.class))) - .as("handleGenericStringPayload(EntityWrapper) with EntityWrapper").isTrue(); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClass(EntityWrapper.class)))) + .as("handleGenericStringPayload(EntityWrapper) with EntityWrapper").isFalse(); + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class)))) .as("handleGenericStringPayload(EntityWrapper) with EntityWrapper").isFalse(); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, String.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, String.class)))) .as("handleGenericStringPayload(EntityWrapper) with EntityWrapper").isTrue(); } @@ -369,15 +369,15 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv var method = SampleEvents.class.getDeclaredMethod("handleGenericAnyPayload", EntityWrapper.class); var adapter = new ApplicationListenerMethodAdapter(null, ApplicationListenerMethodAdapterTests.class, method); - assertThat(adapter.supportsEventType(ResolvableType.forClass(EntityWrapper.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClass(EntityWrapper.class)))) .as("handleGenericAnyPayload(EntityWrapper) with EntityWrapper").isTrue(); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, Integer.class)))) .as("handleGenericAnyPayload(EntityWrapper) with EntityWrapper").isTrue(); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, String.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(EntityWrapper.class, String.class)))) .as("handleGenericAnyPayload(EntityWrapper) with EntityWrapper").isTrue(); - assertThat(adapter.supportsEventType(ResolvableType.forClass(List.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClass(List.class)))) .as("handleGenericAnyPayload(EntityWrapper) with List").isFalse(); - assertThat(adapter.supportsEventType(ResolvableType.forClassWithGenerics(List.class, String.class))) + assertThat(adapter.supportsEventType(createPayloadEventType(ResolvableType.forClassWithGenerics(List.class, String.class)))) .as("handleGenericAnyPayload(EntityWrapper) with List").isFalse(); } @@ -422,7 +422,11 @@ public class ApplicationListenerMethodAdapterTests extends AbstractApplicationEv return new StaticApplicationListenerMethodAdapter(method, this.sampleEvents); } - private ResolvableType createGenericEventType(Class payloadType) { + private ResolvableType createPayloadEventType(Class payloadType) { + return ResolvableType.forClassWithGenerics(PayloadApplicationEvent.class, payloadType); + } + + private ResolvableType createPayloadEventType(ResolvableType payloadType) { return ResolvableType.forClassWithGenerics(PayloadApplicationEvent.class, payloadType); }