Skip to content

Commit 6fa32d7

Browse files
committed
Reduce code duplication
Signed-off-by: yongjunhong <[email protected]>
1 parent 6e64284 commit 6fa32d7

File tree

3 files changed

+42
-61
lines changed

3 files changed

+42
-61
lines changed

fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkey.java

+27-27
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.HashMap;
2626
import java.util.List;
2727
import java.util.Map;
28+
import java.util.SortedMap;
2829
import java.util.TreeMap;
2930
import java.util.stream.Collectors;
3031
import java.util.stream.Stream;
@@ -60,26 +61,25 @@ public final class FixtureMonkey {
6061
private final MonkeyContext monkeyContext;
6162
private final List<MatcherOperator<? extends ArbitraryBuilder<?>>> registeredArbitraryBuilders = new ArrayList<>();
6263
private final MonkeyManipulatorFactory monkeyManipulatorFactory;
63-
private final Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>>
64-
priorityGroupedMatchers = new HashMap<>();
6564

6665
public FixtureMonkey(
6766
FixtureMonkeyOptions fixtureMonkeyOptions,
6867
ArbitraryTraverser traverser,
6968
ManipulatorOptimizer manipulatorOptimizer,
7069
MonkeyContext monkeyContext,
71-
List<PriorityMatcherOperator> registeredArbitraryBuilders,
70+
List<PriorityMatcherOperator> registeredArbitraryBuildersWithPriority,
7271
MonkeyManipulatorFactory monkeyManipulatorFactory,
73-
Map<String, PriorityMatcherOperator> mapsByRegisteredName
72+
Map<String, PriorityMatcherOperator> registeredPriorityMatchersByName
7473
) {
7574
this.fixtureMonkeyOptions = fixtureMonkeyOptions;
7675
this.traverser = traverser;
7776
this.manipulatorOptimizer = manipulatorOptimizer;
7877
this.monkeyContext = monkeyContext;
7978
this.monkeyManipulatorFactory = monkeyManipulatorFactory;
80-
groupMatchersByPriorityFromList(registeredArbitraryBuilders);
81-
groupMatchersByPriorityFromNamedMap(mapsByRegisteredName);
82-
shuffleAndRegisterByPriority(priorityGroupedMatchers);
79+
Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> registeredGroupMatchersListByPriority =
80+
groupMatchersByPriority(registeredArbitraryBuildersWithPriority);
81+
groupMatchersByPriorityFromNamedMap(registeredPriorityMatchersByName, registeredGroupMatchersListByPriority);
82+
shuffleAndRegisterByPriority(registeredGroupMatchersListByPriority);
8383
}
8484

8585
public static FixtureMonkeyBuilder builder() {
@@ -196,29 +196,29 @@ public <T> Arbitrary<T> giveMeArbitrary(TypeReference<T> typeReference) {
196196
return this.giveMeBuilder(typeReference).build();
197197
}
198198

199-
private void groupMatchersByPriorityFromList(
200-
List<PriorityMatcherOperator> registeredArbitraryBuilders
199+
private Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> groupMatchersByPriority(
200+
List<PriorityMatcherOperator> registeredArbitraryBuildersWithPriority
201201
) {
202-
priorityGroupedMatchers.putAll(
203-
registeredArbitraryBuilders
204-
.stream()
205-
.collect(Collectors.groupingBy(
206-
PriorityMatcherOperator::getPriority,
207-
Collectors.mapping(
208-
it -> new MatcherOperator<>(
209-
it.getMatcherOperator(), it.getMatcherOperator().getOperator().apply(this)
210-
),
211-
Collectors.toList()
212-
)
213-
))
202+
return new HashMap<>(registeredArbitraryBuildersWithPriority
203+
.stream()
204+
.collect(Collectors.groupingBy(
205+
PriorityMatcherOperator::getPriority,
206+
Collectors.mapping(
207+
it -> new MatcherOperator<>(
208+
it.getMatcherOperator(), it.getMatcherOperator().getOperator().apply(this)
209+
),
210+
Collectors.toList()
211+
)
212+
))
214213
);
215214
}
216215

217216
private void groupMatchersByPriorityFromNamedMap(
218-
Map<String, PriorityMatcherOperator> mapsByRegisteredName
217+
Map<String, PriorityMatcherOperator> registeredPriorityMatchersByName,
218+
Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> registeredGroupMatchersListByPriority
219219
) {
220-
priorityGroupedMatchers.putAll(
221-
mapsByRegisteredName.entrySet().stream()
220+
registeredGroupMatchersListByPriority.putAll(
221+
registeredPriorityMatchersByName.entrySet().stream()
222222
.collect(Collectors.groupingBy(
223223
entry -> entry.getValue().getPriority(),
224224
Collectors.mapping(
@@ -233,10 +233,10 @@ private void groupMatchersByPriorityFromNamedMap(
233233
}
234234

235235
private void shuffleAndRegisterByPriority(
236-
Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> groupedByPriority
236+
Map<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> registeredGroupMatchersListByPriority
237237
) {
238-
TreeMap<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> sortedGroupedByPriority =
239-
new TreeMap<>(groupedByPriority);
238+
SortedMap<Integer, List<MatcherOperator<? extends ArbitraryBuilder<?>>>> sortedGroupedByPriority =
239+
new TreeMap<>(registeredGroupMatchersListByPriority);
240240

241241
sortedGroupedByPriority.forEach((priority, matcherOperators) -> {
242242
Collections.shuffle(matcherOperators, Randoms.current());

fixture-monkey/src/main/java/com/navercorp/fixturemonkey/FixtureMonkeyBuilder.java

+15-27
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,14 @@
7474
@SuppressWarnings("unused")
7575
@API(since = "0.4.0", status = Status.MAINTAINED)
7676
public final class FixtureMonkeyBuilder {
77+
private static final int DEFAULT_PRIORITY = Integer.MAX_VALUE;
78+
7779
private final FixtureMonkeyOptionsBuilder fixtureMonkeyOptionsBuilder = FixtureMonkeyOptions.builder();
78-
private final List<PriorityMatcherOperator> registeredArbitraryBuilders = new ArrayList<>();
80+
private final List<PriorityMatcherOperator> registeredArbitraryBuildersWithPriority = new ArrayList<>();
7981
private ManipulatorOptimizer manipulatorOptimizer = new NoneManipulatorOptimizer();
8082
private MonkeyExpressionFactory monkeyExpressionFactory = new ArbitraryExpressionFactory();
8183
private final MonkeyContextBuilder monkeyContextBuilder = MonkeyContext.builder();
82-
private final Map<String, PriorityMatcherOperator> registeredArbitraryListByRegisteredName = new HashMap<>();
84+
private final Map<String, PriorityMatcherOperator> registeredPriorityMatchersByName = new HashMap<>();
8385
private long seed = System.nanoTime();
8486

8587
// The default plugins are listed below.
@@ -314,7 +316,7 @@ public FixtureMonkeyBuilder register(
314316
Class<?> type,
315317
Function<FixtureMonkey, ? extends ArbitraryBuilder<?>> registeredArbitraryBuilder
316318
) {
317-
return this.register(MatcherOperator.assignableTypeMatchOperator(type, registeredArbitraryBuilder));
319+
return this.register(type, registeredArbitraryBuilder, DEFAULT_PRIORITY);
318320
}
319321

320322
public FixtureMonkeyBuilder register(
@@ -342,15 +344,16 @@ public FixtureMonkeyBuilder registerAssignableType(
342344
public FixtureMonkeyBuilder register(
343345
MatcherOperator<Function<FixtureMonkey, ? extends ArbitraryBuilder<?>>> registeredArbitraryBuilder
344346
) {
345-
this.registeredArbitraryBuilders.add(new PriorityMatcherOperator(registeredArbitraryBuilder));
346-
return this;
347+
return this.register(registeredArbitraryBuilder, DEFAULT_PRIORITY);
347348
}
348349

349350
public FixtureMonkeyBuilder register(
350351
MatcherOperator<Function<FixtureMonkey, ? extends ArbitraryBuilder<?>>> registeredArbitraryBuilder,
351352
int priority
352353
) {
353-
this.registeredArbitraryBuilders.add(new PriorityMatcherOperator(registeredArbitraryBuilder, priority));
354+
this.registeredArbitraryBuildersWithPriority.add(
355+
new PriorityMatcherOperator(registeredArbitraryBuilder, priority)
356+
);
354357
return this;
355358
}
356359

@@ -393,15 +396,7 @@ public FixtureMonkeyBuilder registerGroup(Class<?>... arbitraryBuilderGroups) {
393396

394397
public FixtureMonkeyBuilder registerGroup(ArbitraryBuilderGroup... arbitraryBuilderGroups) {
395398
for (ArbitraryBuilderGroup arbitraryBuilderGroup : arbitraryBuilderGroups) {
396-
List<ArbitraryBuilderCandidate<?>> candidates = arbitraryBuilderGroup.generateCandidateList()
397-
.getCandidates();
398-
399-
for (ArbitraryBuilderCandidate<?> candidate : candidates) {
400-
this.register(
401-
candidate.getClassType(),
402-
candidate.getArbitraryBuilderRegisterer()
403-
);
404-
}
399+
this.registerGroup(arbitraryBuilderGroup, DEFAULT_PRIORITY);
405400
}
406401
return this;
407402
}
@@ -428,14 +423,7 @@ public FixtureMonkeyBuilder registeredName(
428423
Class<?> type,
429424
Function<FixtureMonkey, ? extends ArbitraryBuilder<?>> arbitraryBuilder
430425
) {
431-
if (registeredArbitraryListByRegisteredName.containsKey(registeredName)) {
432-
throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + registeredName);
433-
}
434-
MatcherOperator<Function<FixtureMonkey, ? extends ArbitraryBuilder<?>>> matcherOperator =
435-
MatcherOperator.assignableTypeMatchOperator(type, arbitraryBuilder);
436-
437-
this.registeredArbitraryListByRegisteredName.put(registeredName, new PriorityMatcherOperator(matcherOperator));
438-
return this;
426+
return this.registeredName(registeredName, type, arbitraryBuilder, DEFAULT_PRIORITY);
439427
}
440428

441429
public FixtureMonkeyBuilder registeredName(
@@ -444,13 +432,13 @@ public FixtureMonkeyBuilder registeredName(
444432
Function<FixtureMonkey, ? extends ArbitraryBuilder<?>> arbitraryBuilder,
445433
int priority
446434
) {
447-
if (registeredArbitraryListByRegisteredName.containsKey(registeredName)) {
435+
if (registeredPriorityMatchersByName.containsKey(registeredName)) {
448436
throw new IllegalArgumentException("Duplicated ArbitraryBuilder name: " + registeredName);
449437
}
450438
MatcherOperator<Function<FixtureMonkey, ? extends ArbitraryBuilder<?>>> matcherOperator =
451439
MatcherOperator.assignableTypeMatchOperator(type, arbitraryBuilder);
452440

453-
this.registeredArbitraryListByRegisteredName.put(
441+
this.registeredPriorityMatchersByName.put(
454442
registeredName, new PriorityMatcherOperator(matcherOperator, priority)
455443
);
456444
return this;
@@ -626,9 +614,9 @@ public FixtureMonkey build() {
626614
traverser,
627615
manipulatorOptimizer,
628616
monkeyContext,
629-
registeredArbitraryBuilders,
617+
registeredArbitraryBuildersWithPriority,
630618
monkeyManipulatorFactory,
631-
registeredArbitraryListByRegisteredName
619+
registeredPriorityMatchersByName
632620
);
633621
}
634622
}

fixture-monkey/src/main/java/com/navercorp/fixturemonkey/customizer/PriorityMatcherOperator.java

-7
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@ public PriorityMatcherOperator(
3737
this.priority = priority;
3838
}
3939

40-
public PriorityMatcherOperator(
41-
final MatcherOperator<Function<FixtureMonkey, ? extends ArbitraryBuilder<?>>> matcherOperator
42-
) {
43-
this.priority = Integer.MAX_VALUE;
44-
this.matcherOperator = matcherOperator;
45-
}
46-
4740
public int getPriority() {
4841
return priority;
4942
}

0 commit comments

Comments
 (0)