Skip to content

Commit fad4061

Browse files
committed
Keep ordering of classes and instances retrieved from ComponentBag
Signed-off-by: Jan Supol <[email protected]>
1 parent 95c08d3 commit fad4061

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

core-common/src/main/java/org/glassfish/jersey/model/internal/ComponentBag.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -588,7 +588,7 @@ public Set<Class<?>> getClasses(final Predicate<ContractProvider> filter) {
588588
final ContractProvider model = getModel(input);
589589
return filter.test(model);
590590
})
591-
.collect(Collectors.toSet());
591+
.collect(Collectors.toCollection(LinkedHashSet::new));
592592
}
593593

594594
/**
@@ -607,7 +607,7 @@ public Set<Object> getInstances(final Predicate<ContractProvider> filter) {
607607
final ContractProvider model = getModel(input.getClass());
608608
return filter.test(model);
609609
})
610-
.collect(Collectors.toSet());
610+
.collect(Collectors.toCollection(LinkedHashSet::new));
611611
}
612612

613613
/**

tests/e2e-core-common/src/test/java/org/glassfish/jersey/tests/e2e/common/model/internal/CommonConfigTest.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
import org.glassfish.jersey.model.internal.ManagedObjectsFinalizer;
5353
import org.glassfish.jersey.model.internal.RankedComparator;
5454

55+
import org.junit.Assert;
5556
import org.junit.Assume;
5657
import org.junit.Before;
5758
import org.junit.Ignore;
@@ -1066,4 +1067,40 @@ private PriorityFeature3() {
10661067
}
10671068
}
10681069

1070+
// Binder ordering -------------------------------------------------------------------------
1071+
1072+
@Test
1073+
public void testBinderOrderingInGetClasses() {
1074+
config.register(ContractBinderOne.class).register(ContractBinderTwo.class).register(ContractBinder.class);
1075+
1076+
InjectionManager injectionManager = Injections.createInjectionManager();
1077+
ManagedObjectsFinalizer finalizer = new ManagedObjectsFinalizer(injectionManager);
1078+
config.configureMetaProviders(injectionManager, finalizer);
1079+
1080+
Object[] classes = config.getComponentBag().getClasses(contractProvider -> true).toArray();
1081+
Assert.assertEquals(classes[0], ContractBinderOne.class);
1082+
Assert.assertEquals(classes[1], ContractBinderTwo.class);
1083+
Assert.assertEquals(classes[2], ContractBinder.class);
1084+
}
1085+
1086+
@Test
1087+
public void testBinderOrderingInGetInstances() {
1088+
ContractBinder[] binders = {new ContractBinderOne(), new ContractBinderTwo(), new ContractBinder()};
1089+
config.register(binders[2]).register(binders[1]).register(binders[0]);
1090+
1091+
InjectionManager injectionManager = Injections.createInjectionManager();
1092+
ManagedObjectsFinalizer finalizer = new ManagedObjectsFinalizer(injectionManager);
1093+
config.configureMetaProviders(injectionManager, finalizer);
1094+
1095+
Object[] instances = config.getComponentBag().getInstances(contractProvider -> true).toArray();
1096+
Assert.assertEquals(instances[0], binders[2]);
1097+
Assert.assertEquals(instances[1], binders[1]);
1098+
Assert.assertEquals(instances[2], binders[0]);
1099+
}
1100+
1101+
public static class ContractBinderOne extends ContractBinder {
1102+
}
1103+
1104+
public static class ContractBinderTwo extends ContractBinder {
1105+
}
10691106
}

0 commit comments

Comments
 (0)