Skip to content

Commit f7b1a2e

Browse files
Pankraz76Vincent Potucek
andauthored
[MNG-8764] centralize domain comparison logic Binding#getPriorityComparator (#2428)
Co-authored-by: Vincent Potucek <[email protected]>
1 parent e885d05 commit f7b1a2e

File tree

3 files changed

+14
-14
lines changed

3 files changed

+14
-14
lines changed

impl/maven-core/src/main/java/org/apache/maven/internal/impl/SisuDiBridgeModule.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.lang.annotation.Annotation;
2525
import java.lang.reflect.Field;
2626
import java.util.ArrayList;
27-
import java.util.Comparator;
2827
import java.util.HashMap;
2928
import java.util.List;
3029
import java.util.Map;
@@ -53,6 +52,8 @@
5352
import org.eclipse.sisu.BeanEntry;
5453
import org.eclipse.sisu.inject.BeanLocator;
5554

55+
import static org.apache.maven.di.impl.Binding.getPriorityComparator;
56+
5657
@Named
5758
public class SisuDiBridgeModule extends AbstractModule {
5859

@@ -185,7 +186,7 @@ private <Q> Supplier<Q> getBeanSupplier(Dependency<Q> dep, Key<Q> key) {
185186
}
186187
}
187188
if (!list.isEmpty()) {
188-
list.sort(getBindingComparator());
189+
list.sort(getPriorityComparator());
189190
//noinspection unchecked
190191
return () -> (Q) getInstance(list.iterator().next());
191192
} else if (dep.optional()) {
@@ -215,7 +216,7 @@ private <Q> Supplier<Q> getListSupplier(Key<Q> key) {
215216
}
216217
}
217218
//noinspection unchecked
218-
return (Q) list(list.stream().sorted(getBindingComparator()).toList(), this::getInstance);
219+
return (Q) list(list.stream().sorted(getPriorityComparator()).toList(), this::getInstance);
219220
};
220221
}
221222

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

256-
private static Comparator<Binding<?>> getBindingComparator() {
257-
Comparator<Binding<?>> comparing = Comparator.comparing(Binding::getPriority);
258-
return comparing.reversed();
259-
}
260-
261257
private <T> boolean isPlexusBean(BeanEntry<Annotation, T> entry) {
262258
try {
263259
if ("org.eclipse.sisu.inject.LazyBeanEntry"

impl/maven-di/src/main/java/org/apache/maven/di/impl/Binding.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.lang.annotation.Annotation;
2222
import java.util.Arrays;
2323
import java.util.Collections;
24+
import java.util.Comparator;
2425
import java.util.HashSet;
2526
import java.util.Set;
2627
import java.util.function.Consumer;
@@ -144,6 +145,10 @@ public interface TupleConstructorN<R> {
144145
R create(Object... args);
145146
}
146147

148+
public static Comparator<Binding<?>> getPriorityComparator() {
149+
return Comparator.<Binding<?>>comparingInt(Binding::getPriority).reversed();
150+
}
151+
147152
public static class BindingToInstance<T> extends Binding<T> {
148153
final T instance;
149154

impl/maven-di/src/main/java/org/apache/maven/di/impl/InjectorImpl.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import java.util.AbstractSet;
3232
import java.util.ArrayList;
3333
import java.util.Arrays;
34-
import java.util.Comparator;
3534
import java.util.Enumeration;
3635
import java.util.HashMap;
3736
import java.util.HashSet;
@@ -56,6 +55,8 @@
5655
import org.apache.maven.di.Key;
5756
import org.apache.maven.di.Scope;
5857

58+
import static org.apache.maven.di.impl.Binding.getPriorityComparator;
59+
5960
public class InjectorImpl implements Injector {
6061

6162
private final Map<Key<?>, Set<Binding<?>>> bindings = new HashMap<>();
@@ -212,8 +213,7 @@ public <Q> Supplier<Q> doGetCompiledBinding(Dependency<Q> dep) {
212213
Set<Binding<Q>> res = getBindings(key);
213214
if (res != null && !res.isEmpty()) {
214215
List<Binding<Q>> bindingList = new ArrayList<>(res);
215-
Comparator<Binding<Q>> comparing = Comparator.comparing(Binding::getPriority);
216-
bindingList.sort(comparing.reversed());
216+
bindingList.sort(getPriorityComparator());
217217
Binding<Q> binding = bindingList.get(0);
218218
return compile(binding);
219219
}
@@ -222,8 +222,7 @@ public <Q> Supplier<Q> doGetCompiledBinding(Dependency<Q> dep) {
222222
if (res2 != null) {
223223
// Sort bindings by priority (highest first) for deterministic ordering
224224
List<Binding<Object>> sortedBindings = new ArrayList<>(res2);
225-
Comparator<Binding<Object>> comparing = Comparator.comparing(Binding::getPriority);
226-
sortedBindings.sort(comparing.reversed());
225+
sortedBindings.sort(getPriorityComparator());
227226

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

0 commit comments

Comments
 (0)