|
7 | 7 | import java.util.Arrays;
|
8 | 8 | import java.util.HashMap;
|
9 | 9 | import java.util.Iterator;
|
| 10 | +import java.util.LinkedHashMap; |
10 | 11 | import java.util.List;
|
| 12 | +import java.util.Map; |
11 | 13 | import java.util.Optional;
|
12 | 14 | import java.util.concurrent.TimeUnit;
|
| 15 | +import java.util.stream.Collectors; |
| 16 | +import java.util.stream.Stream; |
13 | 17 |
|
14 | 18 | import static org.hamcrest.MatcherAssert.assertThat;
|
| 19 | +import static org.hamcrest.Matchers.contains; |
| 20 | +import static org.hamcrest.Matchers.containsInAnyOrder; |
15 | 21 | import static org.hamcrest.Matchers.empty;
|
16 | 22 | import static org.hamcrest.Matchers.equalTo;
|
17 | 23 | import static org.hamcrest.Matchers.greaterThanOrEqualTo;
|
@@ -68,7 +74,7 @@ void shouldReturnIfIsNonSyntheticStaticField() throws NoSuchFieldException {
|
68 | 74 | @Test
|
69 | 75 | void shouldGetFieldsIncludingParents() throws NoSuchFieldException {
|
70 | 76 | // given / when
|
71 |
| - List<Field> allFields = FieldUtils.getFieldsIncludingParents(Class3.class); |
| 77 | + List<Field> allFields = FieldUtils.getAllFields(Class3.class).collect(Collectors.toList()); |
72 | 78 |
|
73 | 79 | // then
|
74 | 80 | assertThat(allFields.size(), greaterThanOrEqualTo(6));
|
@@ -96,39 +102,28 @@ void shouldGetFieldsIncludingParents() throws NoSuchFieldException {
|
96 | 102 | }
|
97 | 103 | }
|
98 | 104 |
|
99 |
| - @Test |
100 |
| - void shouldGetAllFieldsSatisfyingFilter() throws NoSuchFieldException { |
101 |
| - // given / when |
102 |
| - List<Field> allFields = FieldUtils.getFieldsIncludingParents(Class3.class, |
103 |
| - field -> field.getType().isPrimitive()); |
104 |
| - |
105 |
| - // then |
106 |
| - assertThat(allFields, hasSize(4)); |
107 |
| - assertThat(allFields.get(0), equalTo(Class1.class.getDeclaredField("C1A"))); |
108 |
| - assertThat(allFields.get(1), equalTo(Class1.class.getDeclaredField("c1b"))); |
109 |
| - assertThat(allFields.get(2), equalTo(Class2.class.getDeclaredField("c2a"))); |
110 |
| - assertThat(allFields.get(3), equalTo(Class3.class.getDeclaredField("c3b"))); |
111 |
| - } |
112 |
| - |
113 | 105 | @Test
|
114 | 106 | void shouldGetAllFieldsWithFilterAndParentsLast() throws NoSuchFieldException {
|
115 | 107 | // given / when
|
116 |
| - List<Field> allFields = FieldUtils.getFieldsIncludingParents(Class3.class, |
117 |
| - field -> !field.getName().endsWith("a") && !field.isSynthetic(), false); |
| 108 | + List<Field> allFields = FieldUtils.getAllFields(Class3.class, false) |
| 109 | + .filter(f -> !f.isSynthetic()) |
| 110 | + .collect(Collectors.toList()); |
118 | 111 |
|
119 | 112 | // then
|
120 |
| - assertThat(allFields, hasSize(4)); |
121 |
| - assertThat(allFields.get(0), equalTo(Class3.class.getDeclaredField("c3b"))); |
122 |
| - assertThat(allFields.get(1), equalTo(Class2.class.getDeclaredField("c2b"))); |
123 |
| - assertThat(allFields.get(2), equalTo(Class1.class.getDeclaredField("C1A"))); |
124 |
| - assertThat(allFields.get(3), equalTo(Class1.class.getDeclaredField("c1b"))); |
| 113 | + assertThat(allFields, hasSize(6)); |
| 114 | + assertThat(allFields.get(0), equalTo(Class3.class.getDeclaredField("c3a"))); |
| 115 | + assertThat(allFields.get(1), equalTo(Class3.class.getDeclaredField("c3b"))); |
| 116 | + assertThat(allFields.get(2), equalTo(Class2.class.getDeclaredField("c2a"))); |
| 117 | + assertThat(allFields.get(3), equalTo(Class2.class.getDeclaredField("c2b"))); |
| 118 | + assertThat(allFields.get(4), equalTo(Class1.class.getDeclaredField("C1A"))); |
| 119 | + assertThat(allFields.get(5), equalTo(Class1.class.getDeclaredField("c1b"))); |
125 | 120 | }
|
126 | 121 |
|
127 | 122 | @Test
|
128 | 123 | void shouldGetAllRegularInstanceFieldsIncludingParents() throws NoSuchFieldException {
|
129 | 124 | // given / when
|
130 |
| - List<Field> allFields1 = FieldUtils.getRegularInstanceFieldsIncludingParents(Class3.class); |
131 |
| - List<Field> allFields2 = FieldUtils.getRegularInstanceFieldsIncludingParents(InnerClass.class); |
| 125 | + List<Field> allFields1 = FieldUtils.collectAllRegularInstanceFields(Class3.class); |
| 126 | + List<Field> allFields2 = FieldUtils.collectAllRegularInstanceFields(InnerClass.class); |
132 | 127 |
|
133 | 128 | // then
|
134 | 129 | assertThat(allFields1, hasSize(4));
|
@@ -165,6 +160,63 @@ void shouldReturnFieldFromClassOrParentIfExists() throws NoSuchFieldException {
|
165 | 160 | assertThat(FieldUtils.tryFindFieldInClassOrParent(Class3.class, ""), equalTo(Optional.empty()));
|
166 | 161 | }
|
167 | 162 |
|
| 163 | + @Test |
| 164 | + void shouldCollectFieldsByName() throws NoSuchFieldException { |
| 165 | + // given |
| 166 | + Field c1a = Class1.class.getDeclaredField("C1A"); |
| 167 | + Field c1b = Class1.class.getDeclaredField("c1b"); |
| 168 | + Field c2a = Class2.class.getDeclaredField("c2a"); |
| 169 | + Field c2b = Class2.class.getDeclaredField("c2b"); |
| 170 | + Field c3a = Class3.class.getDeclaredField("c3a"); |
| 171 | + Field c3b = Class3.class.getDeclaredField("c3b"); |
| 172 | + |
| 173 | + Field x1b = ClassWithSameFieldNames.class.getDeclaredField("c1b"); |
| 174 | + Field x2b = ClassWithSameFieldNames.class.getDeclaredField("c2b"); |
| 175 | + |
| 176 | + // when |
| 177 | + LinkedHashMap<String, Field> firstFieldsParentFirst = FieldUtils.getAllFields(ClassWithSameFieldNames.class, true) |
| 178 | + .filter(field -> !field.isSynthetic()) |
| 179 | + .collect(FieldUtils.collectByName(true)); |
| 180 | + LinkedHashMap<String, Field> firstFieldsParentLast = FieldUtils.getAllFields(ClassWithSameFieldNames.class, false) |
| 181 | + .filter(field -> !field.isSynthetic()) |
| 182 | + .collect(FieldUtils.collectByName(true)); |
| 183 | + LinkedHashMap<String, Field> lastFieldsParentFirst = FieldUtils.getAllFields(ClassWithSameFieldNames.class, true) |
| 184 | + .filter(field -> !field.isSynthetic()) |
| 185 | + .collect(FieldUtils.collectByName(false)); |
| 186 | + LinkedHashMap<String, Field> lastFieldsParentLast = FieldUtils.getAllFields(ClassWithSameFieldNames.class, false) |
| 187 | + .filter(field -> !field.isSynthetic()) |
| 188 | + .collect(FieldUtils.collectByName(false)); |
| 189 | + |
| 190 | + // then |
| 191 | + assertThat(firstFieldsParentFirst.keySet(), contains("C1A", "c1b", "c2a", "c2b", "c3a", "c3b")); |
| 192 | + assertThat(firstFieldsParentFirst.values(), contains( c1a, c1b, c2a, c2b, c3a, c3b)); |
| 193 | + assertThat(firstFieldsParentLast.keySet(), contains("c1b", "c2b", "c3a", "c3b", "c2a", "C1A")); |
| 194 | + assertThat(firstFieldsParentLast.values(), contains( x1b, x2b, c3a, c3b, c2a, c1a )); |
| 195 | + assertThat(lastFieldsParentFirst.keySet(), contains("C1A", "c1b", "c2a", "c2b", "c3a", "c3b")); |
| 196 | + assertThat(lastFieldsParentFirst.values(), contains( c1a, x1b, c2a, x2b, c3a, c3b )); |
| 197 | + assertThat(lastFieldsParentLast.keySet(), contains("c1b", "c2b", "c3a", "c3b", "c2a", "C1A")); |
| 198 | + assertThat(lastFieldsParentLast.values(), contains( c1b, c2b, c3a, c3b, c2a, c1a )); |
| 199 | + } |
| 200 | + |
| 201 | + @Test |
| 202 | + void shouldHaveValidJavadoc_collectByName() throws NoSuchFieldException { |
| 203 | + // given |
| 204 | + Field x2b = ClassWithSameFieldNames.class.getDeclaredField("c2b"); |
| 205 | + Field c2a = Class2.class.getDeclaredField("c2a"); |
| 206 | + Field c2b = Class2.class.getDeclaredField("c2b"); |
| 207 | + |
| 208 | + |
| 209 | + Stream<Field> stream = Stream.of(x2b, c2a, c2b); |
| 210 | + |
| 211 | + // when |
| 212 | + Map<String, List<Field>> result = stream.collect(Collectors.groupingBy(Field::getName)); |
| 213 | + |
| 214 | + // then |
| 215 | + assertThat(result.keySet(), containsInAnyOrder("c2a", "c2b")); |
| 216 | + assertThat(result.get("c2a"), contains(c2a)); |
| 217 | + assertThat(result.get("c2b"), contains(x2b, c2b)); |
| 218 | + } |
| 219 | + |
168 | 220 | private class InnerClass {
|
169 | 221 | }
|
170 | 222 |
|
|
0 commit comments