From 2ba9f520eb6f3e317556082306bfa87eabd4ce6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vav=C5=99=C3=ADk?= Date: Sat, 6 Jul 2024 10:22:02 +0200 Subject: [PATCH] Fix REST concurrent modif. ex. for abstract res --- .../server/test/resource/basic/InheritanceTest.java | 13 +++++++++++++ .../InheritanceAbstractParentImplResource.java | 10 ++++++++++ .../resource/InheritanceAbstractParentResource.java | 12 ++++++++++++ .../processor/scanning/ResteasyReactiveScanner.java | 3 ++- 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentImplResource.java create mode 100644 extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentResource.java diff --git a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/InheritanceTest.java b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/InheritanceTest.java index cda6508920086..2e7b03c59807b 100644 --- a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/InheritanceTest.java +++ b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/InheritanceTest.java @@ -16,6 +16,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; +import io.quarkus.resteasy.reactive.server.test.resource.basic.resource.InheritanceAbstractParentImplResource; +import io.quarkus.resteasy.reactive.server.test.resource.basic.resource.InheritanceAbstractParentResource; import io.quarkus.resteasy.reactive.server.test.resource.basic.resource.InheritanceParentResource; import io.quarkus.resteasy.reactive.server.test.resource.basic.resource.InheritanceParentResourceImpl; import io.quarkus.resteasy.reactive.server.test.simple.PortProviderUtil; @@ -39,6 +41,8 @@ public class InheritanceTest { public JavaArchive get() { JavaArchive war = ShrinkWrap.create(JavaArchive.class); war.addClass(InheritanceParentResource.class); + war.addClass(InheritanceAbstractParentResource.class); + war.addClass(InheritanceAbstractParentImplResource.class); war.addClasses(PortProviderUtil.class, InheritanceParentResourceImpl.class); return war; } @@ -67,4 +71,13 @@ public void Test1() throws Exception { Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); Assertions.assertEquals(response.readEntity(String.class), "First"); } + + @Test + public void testAbstractParent() { + Builder builder = client.target(generateURL("/inheritance-abstract-parent-test")).request(); + builder.header("Accept", "text/plain"); + Response response = builder.get(); + Assertions.assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + Assertions.assertEquals(response.readEntity(String.class), "works"); + } } diff --git a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentImplResource.java b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentImplResource.java new file mode 100644 index 0000000000000..4b740f37a38fc --- /dev/null +++ b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentImplResource.java @@ -0,0 +1,10 @@ +package io.quarkus.resteasy.reactive.server.test.resource.basic.resource; + +public class InheritanceAbstractParentImplResource extends InheritanceAbstractParentResource { + + @Override + public String get() { + return "works"; + } + +} diff --git a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentResource.java b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentResource.java new file mode 100644 index 0000000000000..26560c777eb26 --- /dev/null +++ b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/resource/basic/resource/InheritanceAbstractParentResource.java @@ -0,0 +1,12 @@ +package io.quarkus.resteasy.reactive.server.test.resource.basic.resource; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; + +@Path("/inheritance-abstract-parent-test") +public abstract class InheritanceAbstractParentResource { + + @GET + public abstract String get(); + +} diff --git a/independent-projects/resteasy-reactive/common/processor/src/main/java/org/jboss/resteasy/reactive/common/processor/scanning/ResteasyReactiveScanner.java b/independent-projects/resteasy-reactive/common/processor/src/main/java/org/jboss/resteasy/reactive/common/processor/scanning/ResteasyReactiveScanner.java index 7de89735072ba..e97bacc60b9a9 100644 --- a/independent-projects/resteasy-reactive/common/processor/src/main/java/org/jboss/resteasy/reactive/common/processor/scanning/ResteasyReactiveScanner.java +++ b/independent-projects/resteasy-reactive/common/processor/src/main/java/org/jboss/resteasy/reactive/common/processor/scanning/ResteasyReactiveScanner.java @@ -263,7 +263,8 @@ public static ResourceScanningResult scanResources( } // handle abstract classes - scannedResources.values().stream().filter(ClassInfo::isAbstract).forEach(abstractScannedResource -> { + var abstractClasses = scannedResources.values().stream().filter(ClassInfo::isAbstract).toList(); + abstractClasses.forEach(abstractScannedResource -> { Collection allSubclasses = index.getAllKnownSubclasses(abstractScannedResource.name()); if (allSubclasses.size() != 1) { return; // don't do anything with this case as it's not evident how it's supposed to be handled