From afba547caa66cf04b5db9c91216fc93320ff3ecf Mon Sep 17 00:00:00 2001 From: "ah.jo" Date: Fri, 21 Mar 2025 14:54:57 +0900 Subject: [PATCH] Refactor the structure of ArbitraryGenerator --- .../IntrospectedArbitraryGenerator.java | 1 + .../JavaDefaultArbitraryGeneratorBuilder.java | 64 ++--- .../api/option/FixtureMonkeyOptions.java | 4 +- .../option/FixtureMonkeyOptionsBuilder.java | 223 +++++++++++++----- .../api/plugin/InterfacePlugin.java | 9 +- .../mockito/plugin/MockitoPlugin.java | 7 +- 6 files changed, 191 insertions(+), 117 deletions(-) diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/IntrospectedArbitraryGenerator.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/IntrospectedArbitraryGenerator.java index 1c54f96518..271c80bb49 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/IntrospectedArbitraryGenerator.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/IntrospectedArbitraryGenerator.java @@ -34,6 +34,7 @@ /** * Generates a {@link CombinableArbitrary} by {@link ArbitraryIntrospector}. + * It uses the {@link PropertyGenerator} for the given {@link ArbitraryIntrospector}. */ @API(since = "0.6.2", status = Status.MAINTAINED) public final class IntrospectedArbitraryGenerator implements ArbitraryGenerator { diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/JavaDefaultArbitraryGeneratorBuilder.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/JavaDefaultArbitraryGeneratorBuilder.java index 3763daa4f5..4afeceb3f9 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/JavaDefaultArbitraryGeneratorBuilder.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/generator/JavaDefaultArbitraryGeneratorBuilder.java @@ -32,9 +32,7 @@ import com.navercorp.fixturemonkey.api.arbitrary.JavaTimeArbitraryGeneratorSet; import com.navercorp.fixturemonkey.api.arbitrary.JavaTypeArbitraryGeneratorSet; import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospector; -import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospectorResult; import com.navercorp.fixturemonkey.api.introspector.ArrayIntrospector; -import com.navercorp.fixturemonkey.api.introspector.BeanArbitraryIntrospector; import com.navercorp.fixturemonkey.api.introspector.BooleanIntrospector; import com.navercorp.fixturemonkey.api.introspector.EnumIntrospector; import com.navercorp.fixturemonkey.api.introspector.FunctionalInterfaceArbitraryIntrospector; @@ -56,10 +54,15 @@ import com.navercorp.fixturemonkey.api.matcher.AssignableTypeMatcher; import com.navercorp.fixturemonkey.api.matcher.MatcherOperator; +/** + * This is a builder to generate the default {@link ArbitraryGenerator}. + * It is for Java types. For example, primitives, collections, maps, etc. + */ @SuppressWarnings("UnusedReturnValue") -@API(since = "0.4.0", status = Status.MAINTAINED) +@API(since = "0.4.0", status = Status.INTERNAL) public final class JavaDefaultArbitraryGeneratorBuilder { - public static final ArbitraryIntrospector JAVA_INTROSPECTOR = new MatchArbitraryIntrospector( + @Deprecated + public static final ArbitraryIntrospector UNCONSTRAINT_JAVA_INTROSPECTOR = new MatchArbitraryIntrospector( Arrays.asList( new BooleanIntrospector(), new EnumIntrospector(), @@ -88,30 +91,27 @@ public final class JavaDefaultArbitraryGeneratorBuilder { new SingleGenericCollectionIntrospector() ) ); - public static final ArbitraryIntrospector DEFAULT_FALLBACK_INTROSPECTOR = - (context) -> ArbitraryIntrospectorResult.NOT_INTROSPECTED; - private ArbitraryIntrospector priorityIntrospector = JavaDefaultArbitraryGeneratorBuilder.JAVA_INTROSPECTOR; + /** + * It contains the Java type, which cannot be constrained programmatically. + * It may vary from time to time. + */ + private ArbitraryIntrospector unconstraintJavaIntrospector = + JavaDefaultArbitraryGeneratorBuilder.UNCONSTRAINT_JAVA_INTROSPECTOR; private ArbitraryIntrospector containerIntrospector = JavaDefaultArbitraryGeneratorBuilder.JAVA_CONTAINER_INTROSPECTOR; - private ArbitraryIntrospector objectIntrospector = BeanArbitraryIntrospector.INSTANCE; - private ArbitraryIntrospector fallbackIntrospector = DEFAULT_FALLBACK_INTROSPECTOR; private JavaTypeArbitraryGeneratorSet javaTypeArbitraryGeneratorSet = null; private JavaTimeArbitraryGeneratorSet javaTimeArbitraryGeneratorSet = null; JavaDefaultArbitraryGeneratorBuilder() { } - public JavaDefaultArbitraryGeneratorBuilder priorityIntrospector(ArbitraryIntrospector priorityIntrospector) { - this.priorityIntrospector = priorityIntrospector; - return this; - } - - public JavaDefaultArbitraryGeneratorBuilder priorityIntrospector( - UnaryOperator priorityIntrospector + @Deprecated + public JavaDefaultArbitraryGeneratorBuilder unconstraintJavaIntrospector( + UnaryOperator unconstraintJavaIntrospectorOperator ) { - this.priorityIntrospector = priorityIntrospector.apply(this.priorityIntrospector); + this.unconstraintJavaIntrospector = unconstraintJavaIntrospectorOperator.apply(unconstraintJavaIntrospector); return this; } @@ -127,30 +127,6 @@ public JavaDefaultArbitraryGeneratorBuilder containerIntrospector( return this; } - public JavaDefaultArbitraryGeneratorBuilder objectIntrospector(ArbitraryIntrospector objectIntrospector) { - this.objectIntrospector = objectIntrospector; - return this; - } - - public JavaDefaultArbitraryGeneratorBuilder objectIntrospector( - UnaryOperator objectIntrospector - ) { - this.objectIntrospector = objectIntrospector.apply(this.objectIntrospector); - return this; - } - - public JavaDefaultArbitraryGeneratorBuilder fallbackIntrospector(ArbitraryIntrospector fallbackIntrospector) { - this.fallbackIntrospector = fallbackIntrospector; - return this; - } - - public JavaDefaultArbitraryGeneratorBuilder fallbackIntrospector( - UnaryOperator fallbackIntrospector - ) { - this.fallbackIntrospector = fallbackIntrospector.apply(this.fallbackIntrospector); - return this; - } - public JavaDefaultArbitraryGeneratorBuilder javaTypeArbitraryGeneratorSet( JavaTypeArbitraryGeneratorSet javaTypeArbitraryGeneratorSet ) { @@ -171,10 +147,8 @@ public IntrospectedArbitraryGenerator build() { Arrays.asList( new JavaArbitraryIntrospector(this.javaTypeArbitraryGeneratorSet), new JavaTimeArbitraryIntrospector(this.javaTimeArbitraryGeneratorSet), - this.priorityIntrospector, - this.containerIntrospector, - this.objectIntrospector, - this.fallbackIntrospector + this.unconstraintJavaIntrospector, + this.containerIntrospector ) ) ); diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptions.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptions.java index be8cc0518d..deafde8233 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptions.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptions.java @@ -105,7 +105,7 @@ public final class FixtureMonkeyOptions { ), MatcherOperator.exactTypeMatchOperator( GeneratingWildcardType.class, - context -> new ArbitraryIntrospectorResult(CombinableArbitrary.from(new Object())) + context -> ArbitraryIntrospectorResult.NOT_INTROSPECTED ) ); public static final ObjectPropertyGenerator DEFAULT_OBJECT_PROPERTY_GENERATOR = @@ -133,6 +133,8 @@ public final class FixtureMonkeyOptions { context -> NOT_NULL_INJECT ) ); + public static final ArbitraryIntrospector DEFAULT_FALLBACK_INTROSPECTOR = + (context) -> new ArbitraryIntrospectorResult(CombinableArbitrary.from((Object)null)); static { List defaultJavaPackages = new ArrayList<>(); diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptionsBuilder.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptionsBuilder.java index bca7d533f7..36cab5d795 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptionsBuilder.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/option/FixtureMonkeyOptionsBuilder.java @@ -23,6 +23,7 @@ import static com.navercorp.fixturemonkey.api.generator.DefaultNullInjectGenerator.DEFAULT_NULLABLE_ANNOTATION_TYPES; import static com.navercorp.fixturemonkey.api.generator.DefaultNullInjectGenerator.DEFAULT_NULL_INJECT; import static com.navercorp.fixturemonkey.api.option.FixtureMonkeyOptions.DEFAULT_ARBITRARY_INTROSPECTORS; +import static com.navercorp.fixturemonkey.api.option.FixtureMonkeyOptions.DEFAULT_FALLBACK_INTROSPECTOR; import static com.navercorp.fixturemonkey.api.option.FixtureMonkeyOptions.DEFAULT_MAX_UNIQUE_GENERATION_COUNT; import java.util.ArrayList; @@ -51,6 +52,7 @@ import com.navercorp.fixturemonkey.api.generator.ArbitraryContainerInfo; import com.navercorp.fixturemonkey.api.generator.ArbitraryContainerInfoGenerator; import com.navercorp.fixturemonkey.api.generator.ArbitraryGenerator; +import com.navercorp.fixturemonkey.api.generator.ArbitraryGeneratorContext; import com.navercorp.fixturemonkey.api.generator.ContainerPropertyGenerator; import com.navercorp.fixturemonkey.api.generator.DefaultNullInjectGenerator; import com.navercorp.fixturemonkey.api.generator.IntrospectedArbitraryGenerator; @@ -61,6 +63,7 @@ import com.navercorp.fixturemonkey.api.instantiator.InstantiatorProcessor; import com.navercorp.fixturemonkey.api.instantiator.JavaInstantiatorProcessor; import com.navercorp.fixturemonkey.api.introspector.ArbitraryIntrospector; +import com.navercorp.fixturemonkey.api.introspector.BeanArbitraryIntrospector; import com.navercorp.fixturemonkey.api.introspector.MatchArbitraryIntrospector; import com.navercorp.fixturemonkey.api.introspector.TypedArbitraryIntrospector; import com.navercorp.fixturemonkey.api.jqwik.JavaArbitraryResolver; @@ -77,6 +80,7 @@ import com.navercorp.fixturemonkey.api.plugin.Plugin; import com.navercorp.fixturemonkey.api.property.CandidateConcretePropertyResolver; import com.navercorp.fixturemonkey.api.property.DefaultPropertyGenerator; +import com.navercorp.fixturemonkey.api.property.Property; import com.navercorp.fixturemonkey.api.property.PropertyGenerator; import com.navercorp.fixturemonkey.api.property.PropertyNameResolver; import com.navercorp.fixturemonkey.api.validator.ArbitraryValidator; @@ -100,12 +104,14 @@ public final class FixtureMonkeyOptionsBuilder { private NullInjectGenerator defaultNullInjectGenerator; private List> arbitraryContainerInfoGenerators = new ArrayList<>(); private ArbitraryContainerInfoGenerator defaultArbitraryContainerInfoGenerator; - private ArbitraryGenerator defaultArbitraryGenerator; private UnaryOperator defaultArbitraryGeneratorOperator = it -> it; - private List> arbitraryIntrospectors = + private ArbitraryIntrospector defaultObjectIntrospector = BeanArbitraryIntrospector.INSTANCE; + private ArbitraryIntrospector fallbackIntrospector = DEFAULT_FALLBACK_INTROSPECTOR; + private List> preArbitraryIntrospectors = new ArrayList<>(DEFAULT_ARBITRARY_INTROSPECTORS); private final JavaDefaultArbitraryGeneratorBuilder javaDefaultArbitraryGeneratorBuilder = IntrospectedArbitraryGenerator.javaBuilder(); + private List> postArbitraryIntrospectors = new ArrayList<>(); private boolean defaultNotNull = false; private boolean nullableContainer = false; private boolean nullableElement = false; @@ -376,7 +382,7 @@ public FixtureMonkeyOptionsBuilder defaultArbitraryContainerInfoGenerator( public FixtureMonkeyOptionsBuilder insertFirstArbitraryIntrospector( MatcherOperator arbitraryIntrospector ) { - this.arbitraryIntrospectors = insertFirst(this.arbitraryIntrospectors, arbitraryIntrospector); + this.preArbitraryIntrospectors = insertFirst(this.preArbitraryIntrospectors, arbitraryIntrospector); return this; } @@ -401,6 +407,13 @@ public FixtureMonkeyOptionsBuilder insertFirstArbitraryIntrospector( ); } + public FixtureMonkeyOptionsBuilder insertLastArbitraryIntrospector( + MatcherOperator arbitraryIntrospector + ) { + this.postArbitraryIntrospectors = insertFirst(this.postArbitraryIntrospectors, arbitraryIntrospector); + return this; + } + public FixtureMonkeyOptionsBuilder defaultArbitraryGenerator( UnaryOperator defaultArbitraryGeneratorOperator ) { @@ -408,10 +421,18 @@ public FixtureMonkeyOptionsBuilder defaultArbitraryGenerator( return this; } + /** + * It is deprecated. It will be removed in 1.3.0. + * It is only used to customize {@link Boolean} or {@link Enum} or {@link java.util.UUID}. + * Further details are in {@link JavaDefaultArbitraryGeneratorBuilder#UNCONSTRAINT_JAVA_INTROSPECTOR}. + * Please use {@link #insertFirstArbitraryIntrospector(MatcherOperator)} + * or {@link #defaultObjectIntrospector} instead. + */ + @Deprecated public FixtureMonkeyOptionsBuilder priorityIntrospector( - UnaryOperator priorityIntrospector + UnaryOperator priorityIntrospectorOperator ) { - this.javaDefaultArbitraryGeneratorBuilder.priorityIntrospector(priorityIntrospector); + this.javaDefaultArbitraryGeneratorBuilder.unconstraintJavaIntrospector(priorityIntrospectorOperator); return this; } @@ -423,16 +444,16 @@ public FixtureMonkeyOptionsBuilder containerIntrospector( } public FixtureMonkeyOptionsBuilder objectIntrospector( - UnaryOperator objectIntrospector + UnaryOperator objectIntrospectorOperator ) { - this.javaDefaultArbitraryGeneratorBuilder.objectIntrospector(objectIntrospector); + this.defaultObjectIntrospector = objectIntrospectorOperator.apply(this.defaultObjectIntrospector); return this; } public FixtureMonkeyOptionsBuilder fallbackIntrospector( - UnaryOperator fallbackIntrospector + UnaryOperator fallbackIntrospectorOperator ) { - this.javaDefaultArbitraryGeneratorBuilder.fallbackIntrospector(fallbackIntrospector); + this.fallbackIntrospector = fallbackIntrospectorOperator.apply(this.fallbackIntrospector); return this; } @@ -589,60 +610,18 @@ public FixtureMonkeyOptions build() { () -> context -> new ArbitraryContainerInfo(0, FixtureMonkeyOptions.DEFAULT_ARBITRARY_CONTAINER_MAX_SIZE) ); + JavaConstraintGenerator javaConstraintGenerator = this.javaConstraintGenerator; + for (Function it : javaConstraintGeneratorCustomizers) { - this.javaConstraintGenerator = it.apply(this.javaConstraintGenerator); + javaConstraintGenerator = it.apply(javaConstraintGenerator); } - JavaConstraintGenerator resolvedJavaConstraintGenerator = this.javaConstraintGenerator; - - JavaArbitraryResolver javaArbitraryResolver = defaultIfNull( - this.javaArbitraryResolver, - () -> new JqwikJavaArbitraryResolver(resolvedJavaConstraintGenerator) - ); - - this.generateJavaTypeArbitrarySet = defaultIfNull( - this.generateJavaTypeArbitrarySet, - () -> constraintGenerator -> - new JqwikJavaTypeArbitraryGeneratorSet( - this.javaTypeArbitraryGenerator, - javaArbitraryResolver - ) - ); - - javaDefaultArbitraryGeneratorBuilder.javaTypeArbitraryGeneratorSet( - generateJavaTypeArbitrarySet.apply(resolvedJavaConstraintGenerator) - ); - - JavaTimeArbitraryResolver javaTimeArbitraryResolver = defaultIfNull( - this.javaTimeArbitraryResolver, - () -> new JqwikJavaTimeArbitraryResolver(resolvedJavaConstraintGenerator) - ); - - this.generateJavaTimeArbitrarySet = defaultIfNull( - this.generateJavaTimeArbitrarySet, - () -> constraintGenerator -> - new JqwikJavaTimeArbitraryGeneratorSet( - this.javaTimeTypeArbitraryGenerator, - javaTimeArbitraryResolver - ) - ); - - javaDefaultArbitraryGeneratorBuilder.javaTimeArbitraryGeneratorSet( - generateJavaTimeArbitrarySet.apply(resolvedJavaConstraintGenerator) - ); - - ArbitraryGenerator defaultArbitraryGenerator = - defaultIfNull(this.defaultArbitraryGenerator, this.javaDefaultArbitraryGeneratorBuilder::build); - - List typedArbitraryIntrospectors = arbitraryIntrospectors.stream() - .map(TypedArbitraryIntrospector::new) - .collect(Collectors.toList()); - - ArbitraryGenerator introspectedGenerator = - new IntrospectedArbitraryGenerator(new MatchArbitraryIntrospector(typedArbitraryIntrospectors)); - - defaultArbitraryGenerator = new MatchArbitraryGenerator( - Arrays.asList(introspectedGenerator, defaultArbitraryGenerator) + ArbitraryGenerator defaultArbitraryGenerator = new MatchArbitraryGenerator( + Arrays.asList( + newPreArbitraryGenerator(), + newObjectArbitraryGenerator(javaConstraintGenerator), + newPostArbitraryGenerator() + ) ); DecomposedContainerValueFactory decomposedContainerValueFactory = new DefaultDecomposedContainerValueFactory( @@ -687,7 +666,7 @@ public FixtureMonkeyOptions build() { decomposedContainerValueFactory, this.generateMaxTries, this.generateUniqueMaxTries, - resolvedJavaConstraintGenerator, + javaConstraintGenerator, this.instantiatorProcessor, this.candidateConcretePropertyResolvers, this.enableLoggingFail, @@ -695,6 +674,110 @@ public FixtureMonkeyOptions build() { ); } + /** + * The arbitrary is generated in the following order: + * Pre -> Object -> Post + *

+ * Creates a new pre arbitrary generator. + * It is used to generate arbitrary values before the main generation process. + * Most user-defined {@link ArbitraryIntrospector} are added to the pre-arbitrary generator. + * + * @return a new pre arbitrary generator + */ + private ArbitraryGenerator newPreArbitraryGenerator() { + List typedPreArbitraryIntrospectors = preArbitraryIntrospectors.stream() + .map(TypedArbitraryIntrospector::new) + .collect(Collectors.toList()); + + return new IntrospectedArbitraryGenerator(new MatchArbitraryIntrospector(typedPreArbitraryIntrospectors)); + } + + /** + * The arbitrary is generated in the following order: + * Pre -> Object -> Post + *

+ * Creates a new object arbitrary generator. + * It is main generator for generating arbitrary values. + * + * @param resolvedJavaConstraintGenerator the resolved java constraint generator + * @return a new object arbitrary generator + */ + private ArbitraryGenerator newObjectArbitraryGenerator(JavaConstraintGenerator resolvedJavaConstraintGenerator) { + JavaArbitraryResolver javaArbitraryResolver = defaultIfNull( + this.javaArbitraryResolver, + () -> new JqwikJavaArbitraryResolver(resolvedJavaConstraintGenerator) + ); + + this.generateJavaTypeArbitrarySet = defaultIfNull( + this.generateJavaTypeArbitrarySet, + () -> constraintGenerator -> + new JqwikJavaTypeArbitraryGeneratorSet( + this.javaTypeArbitraryGenerator, + javaArbitraryResolver + ) + ); + + javaDefaultArbitraryGeneratorBuilder.javaTypeArbitraryGeneratorSet( + generateJavaTypeArbitrarySet.apply(resolvedJavaConstraintGenerator) + ); + + JavaTimeArbitraryResolver javaTimeArbitraryResolver = defaultIfNull( + this.javaTimeArbitraryResolver, + () -> new JqwikJavaTimeArbitraryResolver(resolvedJavaConstraintGenerator) + ); + + this.generateJavaTimeArbitrarySet = defaultIfNull( + this.generateJavaTimeArbitrarySet, + () -> constraintGenerator -> + new JqwikJavaTimeArbitraryGeneratorSet( + this.javaTimeTypeArbitraryGenerator, + javaTimeArbitraryResolver + ) + ); + + javaDefaultArbitraryGeneratorBuilder.javaTimeArbitraryGeneratorSet( + generateJavaTimeArbitrarySet.apply(resolvedJavaConstraintGenerator) + ); + + ArbitraryGenerator javaDefaultArbitraryGenerator = + this.javaDefaultArbitraryGeneratorBuilder.build(); + + return new MatchArbitraryGenerator( + Arrays.asList( + javaDefaultArbitraryGenerator, + new IntrospectedArbitraryGenerator(this.defaultObjectIntrospector) + ) + ); + } + + /** + * The arbitrary is generated in the following order: + * Pre -> Object -> Post + *

+ * Creates a new post arbitrary generator. + * It is used to generate arbitrary values after the main generation process. + * It is used when the main generation process fails to generate arbitrary values as a fallback. + * + * @return a new post arbitrary generator + */ + private ArbitraryGenerator newPostArbitraryGenerator() { + List typedPostArbitraryIntrospectors = postArbitraryIntrospectors.stream() + .map(TypedArbitraryIntrospector::new) + .collect(Collectors.toList()); + + IntrospectedArbitraryGenerator postArbitraryGenerator = + new IntrospectedArbitraryGenerator(new MatchArbitraryIntrospector(typedPostArbitraryIntrospectors)); + + FallbackArbitraryGenerator fallbackArbitraryGenerator = + new FallbackArbitraryGenerator(this.fallbackIntrospector); + return new MatchArbitraryGenerator( + Arrays.asList( + postArbitraryGenerator, + fallbackArbitraryGenerator + ) + ); + } + private static T defaultIfNull(@Nullable T obj, Supplier defaultValue) { return obj != null ? obj : defaultValue.get(); } @@ -705,4 +788,22 @@ private static List insertFirst(List list, T value) { result.addAll(list); return result; } + + /** + * It is used for fallback. It is used temporarily. + * It will be removed in further versions. + * It does not use the {@link ArbitraryIntrospector#getRequiredPropertyGenerator(Property)}. + */ + private static final class FallbackArbitraryGenerator implements ArbitraryGenerator { + private final ArbitraryIntrospector introspector; + + public FallbackArbitraryGenerator(ArbitraryIntrospector introspector) { + this.introspector = introspector; + } + + @Override + public CombinableArbitrary generate(ArbitraryGeneratorContext context) { + return introspector.introspect(context).getValue(); + } + } } diff --git a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/plugin/InterfacePlugin.java b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/plugin/InterfacePlugin.java index 8f79983fbf..761f2a61d7 100644 --- a/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/plugin/InterfacePlugin.java +++ b/fixture-monkey-api/src/main/java/com/navercorp/fixturemonkey/api/plugin/InterfacePlugin.java @@ -20,14 +20,12 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.apiguardian.api.API; import org.apiguardian.api.API.Status; import com.navercorp.fixturemonkey.api.introspector.AnonymousArbitraryIntrospector; -import com.navercorp.fixturemonkey.api.introspector.MatchArbitraryIntrospector; import com.navercorp.fixturemonkey.api.matcher.ExactTypeMatcher; import com.navercorp.fixturemonkey.api.matcher.Matcher; import com.navercorp.fixturemonkey.api.matcher.MatcherOperator; @@ -197,8 +195,11 @@ public void accept(FixtureMonkeyOptionsBuilder optionsBuilder) { } if (useAnonymousArbitraryIntrospector) { - optionsBuilder.fallbackIntrospector(it -> - new MatchArbitraryIntrospector(Arrays.asList(it, AnonymousArbitraryIntrospector.INSTANCE)) + optionsBuilder.insertLastArbitraryIntrospector( + new MatcherOperator<>( + AnonymousArbitraryIntrospector.INSTANCE, + AnonymousArbitraryIntrospector.INSTANCE + ) ); } } diff --git a/fixture-monkey-mockito/src/main/java/com/navercorp/fixturemonkey/mockito/plugin/MockitoPlugin.java b/fixture-monkey-mockito/src/main/java/com/navercorp/fixturemonkey/mockito/plugin/MockitoPlugin.java index 256b9fdd13..bb733eccc3 100644 --- a/fixture-monkey-mockito/src/main/java/com/navercorp/fixturemonkey/mockito/plugin/MockitoPlugin.java +++ b/fixture-monkey-mockito/src/main/java/com/navercorp/fixturemonkey/mockito/plugin/MockitoPlugin.java @@ -18,12 +18,9 @@ package com.navercorp.fixturemonkey.mockito.plugin; -import java.util.Arrays; - import org.apiguardian.api.API; import org.apiguardian.api.API.Status; -import com.navercorp.fixturemonkey.api.introspector.MatchArbitraryIntrospector; import com.navercorp.fixturemonkey.api.option.FixtureMonkeyOptionsBuilder; import com.navercorp.fixturemonkey.api.plugin.Plugin; import com.navercorp.fixturemonkey.mockito.introspector.MockitoIntrospector; @@ -32,8 +29,6 @@ public final class MockitoPlugin implements Plugin { @Override public void accept(FixtureMonkeyOptionsBuilder optionsBuilder) { - optionsBuilder.fallbackIntrospector(it -> new MatchArbitraryIntrospector( - Arrays.asList(it, MockitoIntrospector.INSTANCE)) - ); + optionsBuilder.fallbackIntrospector(it -> MockitoIntrospector.INSTANCE); } }