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 @@ -24,7 +24,6 @@
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -53,6 +52,8 @@
import org.eclipse.sisu.BeanEntry;
import org.eclipse.sisu.inject.BeanLocator;

import static org.apache.maven.di.impl.Binding.getPriorityComparator;

@Named
public class SisuDiBridgeModule extends AbstractModule {

Expand Down Expand Up @@ -185,7 +186,7 @@ private <Q> Supplier<Q> getBeanSupplier(Dependency<Q> dep, Key<Q> key) {
}
}
if (!list.isEmpty()) {
list.sort(getBindingComparator());
list.sort(getPriorityComparator());
//noinspection unchecked
return () -> (Q) getInstance(list.iterator().next());
} else if (dep.optional()) {
Expand Down Expand Up @@ -215,7 +216,7 @@ private <Q> Supplier<Q> getListSupplier(Key<Q> key) {
}
}
//noinspection unchecked
return (Q) list(list.stream().sorted(getBindingComparator()).toList(), this::getInstance);
return (Q) list(list.stream().sorted(getPriorityComparator()).toList(), this::getInstance);
};
}

Expand All @@ -226,7 +227,7 @@ private <Q> Supplier<Q> getMapSupplier(Key<Q> key) {
throw new DIException("Only String keys are supported for maps: " + key);
}
return () -> {
var comparator = getBindingComparator();
var comparator = getPriorityComparator();
Map<String, Binding<?>> map = new HashMap<>();
for (Binding<?> b : getBindings().getOrDefault(valueType, Set.of())) {
String name =
Expand All @@ -253,11 +254,6 @@ private <Q> Q getInstance(Binding<Q> binding) {
return compile(binding).get();
}

private static Comparator<Binding<?>> getBindingComparator() {
Comparator<Binding<?>> comparing = Comparator.comparing(Binding::getPriority);
return comparing.reversed();
}

private <T> boolean isPlexusBean(BeanEntry<Annotation, T> entry) {
try {
if ("org.eclipse.sisu.inject.LazyBeanEntry"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Consumer;
Expand Down Expand Up @@ -150,6 +151,10 @@ public interface TupleConstructorN<R> {
R create(Object... args);
}

public static Comparator<Binding<?>> getPriorityComparator() {
return Comparator.<Binding<?>>comparingInt(Binding::getPriority).reversed();
}

public static class BindingToInstance<T> extends Binding<T> {
final T instance;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import java.util.AbstractSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
Expand All @@ -56,6 +55,8 @@
import org.apache.maven.di.Key;
import org.apache.maven.di.Scope;

import static org.apache.maven.di.impl.Binding.getPriorityComparator;

public class InjectorImpl implements Injector {

private final Map<Key<?>, Set<Binding<?>>> bindings = new HashMap<>();
Expand Down Expand Up @@ -212,8 +213,7 @@ public <Q> Supplier<Q> doGetCompiledBinding(Dependency<Q> dep) {
Set<Binding<Q>> res = getBindings(key);
if (res != null && !res.isEmpty()) {
List<Binding<Q>> bindingList = new ArrayList<>(res);
Comparator<Binding<Q>> comparing = Comparator.comparing(Binding::getPriority);
bindingList.sort(comparing.reversed());
bindingList.sort(getPriorityComparator());
Binding<Q> binding = bindingList.get(0);
return compile(binding);
}
Expand All @@ -222,8 +222,7 @@ public <Q> Supplier<Q> doGetCompiledBinding(Dependency<Q> dep) {
if (res2 != null) {
// Sort bindings by priority (highest first) for deterministic ordering
List<Binding<Object>> sortedBindings = new ArrayList<>(res2);
Comparator<Binding<Object>> comparing = Comparator.comparing(Binding::getPriority);
sortedBindings.sort(comparing.reversed());
sortedBindings.sort(getPriorityComparator());

List<Supplier<Object>> list =
sortedBindings.stream().map(this::compile).collect(Collectors.toList());
Expand Down