This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
commit fdd883a21cb24baa2ad3b8f401256e116cdff22e Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon Feb 10 08:44:32 2025 +0100 [MNG-8571] Sisu @Priority annotation is not honoured --- .../maven/internal/impl/SisuDiBridgeModule.java | 4 +- .../src/test/java/org/apache/maven/di/DiTest.java | 93 ++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java index 6cc9b49733..f96ec4829d 100644 --- a/impl/maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java +++ b/impl/maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java @@ -181,7 +181,9 @@ private <Q> Supplier<Q> getBeanSupplier(Dependency<Q> dep, Key<Q> key) { // Add Plexus bindings for (var bean : locator.get().locate(toGuiceKey(key))) { if (isPlexusBean(bean)) { - list.add(new BindingToBeanEntry<>(key).toBeanEntry(bean)); + list.add(new BindingToBeanEntry<>(key) + .toBeanEntry(bean) + .prioritize(bean.getRank())); } } if (!list.isEmpty()) { diff --git a/impl/maven-core/src/test/java/org/apache/maven/di/DiTest.java b/impl/maven-core/src/test/java/org/apache/maven/di/DiTest.java index 62b84bca3b..7df09b9e72 100644 --- a/impl/maven-core/src/test/java/org/apache/maven/di/DiTest.java +++ b/impl/maven-core/src/test/java/org/apache/maven/di/DiTest.java @@ -44,6 +44,7 @@ import org.junit.jupiter.api.condition.EnabledIf; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; public class DiTest { @@ -268,4 +269,96 @@ public Model parse(Source source, Map<String, ?> options) throws ModelParserExce } } } + + @Nested + class DiTest4 { + + PlexusContainer container; + + @BeforeEach + void setup() throws Exception { + container = new DefaultPlexusContainer(new DefaultContainerConfiguration(), + new AbstractModule() { + @Override + protected void configure() { + bind(ModelParser.class).to(DiTest4.TestModelParserSisu.class); + } + }, + new SisuDiBridgeModule(false) { + @Override + protected void configure() { + super.configure(); + injector.bindImplicit(TestModelParserDi.class); + } + }); + } + + @Test + void testPlexus() throws Exception { + List<ModelParser> parsers = container.lookupList(ModelParser.class); + assertNotNull(parsers); + assertEquals(1, parsers.size()); + Map<String, ModelParser> parsersMap = container.lookupMap(ModelParser.class); + assertNotNull(parsersMap); + assertEquals(1, parsersMap.size()); + } + + @Test + void testGuice() throws Exception { + List<Binding<ModelParser>> parsers = + container.lookup(Injector.class).findBindingsByType(TypeLiteral.get(ModelParser.class)); + assertNotNull(parsers); + assertEquals(1, parsers.size()); + } + + @Test + void testDI() throws Exception { + DiInjected diInjected = new DiInjected(); + container.lookup(org.apache.maven.di.Injector.class).injectInstance(diInjected); + assertNotNull(diInjected.parser); + assertInstanceOf(TestModelParserSisu.class, diInjected.parser); + assertNotNull(diInjected.parsers); + assertEquals(2, diInjected.parsers.size()); + assertNotNull(diInjected.parsersMap); + assertEquals(2, diInjected.parsersMap.size()); + } + + static class DiInjected { + @org.apache.maven.api.di.Inject + ModelParser parser; + + @org.apache.maven.api.di.Inject + List<ModelParser> parsers; + + @org.apache.maven.api.di.Inject + Map<String, ModelParser> parsersMap; + } + + @javax.inject.Named("sisu") + @org.eclipse.sisu.Priority(100) + static class TestModelParserSisu implements ModelParser { + @Override + public Optional<Source> locate(Path dir) { + return Optional.empty(); + } + + @Override + public Model parse(Source source, Map<String, ?> options) throws ModelParserException { + return null; + } + } + + //@org.apache.maven.api.di.Named("di") + static class TestModelParserDi implements ModelParser { + @Override + public Optional<Source> locate(Path dir) { + return Optional.empty(); + } + + @Override + public Model parse(Source source, Map<String, ?> options) throws ModelParserException { + return null; + } + } + } }