You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2025/02/10 23:18:38 UTC
(maven) 01/02: [MNG-8571] Sisu @Priority annotation is not honoured
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 <gn...@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;
+ }
+ }
+ }
}