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;
+            }
+        }
+    }
 }

Reply via email to