Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ 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()) {
Expand Down
94 changes: 94 additions & 0 deletions impl/maven-core/src/test/java/org/apache/maven/di/DiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -268,4 +269,97 @@ 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;
}
}
}
}