From 6c836e6f76d54484d2cc355590348902bb43200b Mon Sep 17 00:00:00 2001 From: Jan Ouwens Date: Tue, 26 Nov 2024 21:28:06 +0100 Subject: [PATCH] Simplifies ClassAccessor --- .../reflection/vintage/ClassAccessor.java | 50 +++---------------- .../factories/FallbackFactory.java | 2 +- .../reflection/vintage/ClassAccessorTest.java | 44 ++++------------ 3 files changed, 19 insertions(+), 77 deletions(-) diff --git a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessor.java b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessor.java index 45a49d695..c13a5c89f 100644 --- a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessor.java +++ b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessor.java @@ -19,28 +19,17 @@ public class ClassAccessor { private final VintageValueProvider valueProvider; private final Objenesis objenesis; - /** Private constructor. Call {@link #of(Class, PrefabValues)} instead. */ - ClassAccessor(Class type, VintageValueProvider valueProvider, Objenesis objenesis) { - this.type = type; - this.valueProvider = valueProvider; - this.objenesis = objenesis; - } - /** - * Factory method. + * Constructor. * - * @param The class on which {@link ClassAccessor} operates. * @param type The class on which {@link ClassAccessor} operates. Should be the same as T. * @param valueProvider Prefabricated values with which to fill instantiated objects. * @param objenesis To instantiate non-record classes. - * @return A {@link ClassAccessor} for T. */ - public static ClassAccessor of( - Class type, - VintageValueProvider valueProvider, - Objenesis objenesis - ) { - return new ClassAccessor<>(type, valueProvider, objenesis); + public ClassAccessor(Class type, VintageValueProvider valueProvider, Objenesis objenesis) { + this.type = type; + this.valueProvider = valueProvider; + this.objenesis = objenesis; } /** @@ -53,19 +42,7 @@ public static ClassAccessor of( * @return An instance of T. */ public T getRedObject(TypeTag enclosingType, Attributes attributes) { - return getRedAccessor(enclosingType, attributes).get(); - } - - /** - * Returns an {@link ObjectAccessor} for {@link #getRedObject(TypeTag, Attributes)}. - * - * @param enclosingType Describes the type that contains this object as a field, to determine - * any generic parameters it may contain. - * @param attributes Provides metadata needed to provide a value and to keep track of recursion. - * @return An {@link ObjectAccessor} for {@link #getRedObject}. - */ - public ObjectAccessor getRedAccessor(TypeTag enclosingType, Attributes attributes) { - return buildObjectAccessor().scramble(valueProvider, enclosingType, attributes); + return buildObjectAccessor().scramble(valueProvider, enclosingType, attributes).get(); } /** @@ -78,21 +55,10 @@ public ObjectAccessor getRedAccessor(TypeTag enclosingType, Attributes attrib * @return An instance of T. */ public T getBlueObject(TypeTag enclosingType, Attributes attributes) { - return getBlueAccessor(enclosingType, attributes).get(); - } - - /** - * Returns an {@link ObjectAccessor} for {@link #getBlueObject(TypeTag, Attributes)}. - * - * @param enclosingType Describes the type that contains this object as a field, to determine - * any generic parameters it may contain. - * @param attributes Provides metadata needed to provide a value and to keep track of recursion. - * @return An {@link ObjectAccessor} for {@link #getBlueObject(TypeTag, Attributes)}. - */ - public ObjectAccessor getBlueAccessor(TypeTag enclosingType, Attributes attributes) { return buildObjectAccessor() .scramble(valueProvider, enclosingType, attributes) - .scramble(valueProvider, enclosingType, attributes); + .scramble(valueProvider, enclosingType, attributes) + .get(); } private ObjectAccessor buildObjectAccessor() { diff --git a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/prefabvalues/factories/FallbackFactory.java b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/prefabvalues/factories/FallbackFactory.java index a206d1ae2..1eb12b579 100644 --- a/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/prefabvalues/factories/FallbackFactory.java +++ b/equalsverifier-core/src/main/java/nl/jqno/equalsverifier/internal/reflection/vintage/prefabvalues/factories/FallbackFactory.java @@ -82,7 +82,7 @@ private Tuple giveInstances( VintageValueProvider valueProvider, Attributes attributes ) { - ClassAccessor accessor = ClassAccessor.of(tag.getType(), valueProvider, objenesis); + ClassAccessor accessor = new ClassAccessor<>(tag.getType(), valueProvider, objenesis); T red = accessor.getRedObject(tag, attributes); T blue = accessor.getBlueObject(tag, attributes); diff --git a/equalsverifier-core/src/test/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessorTest.java b/equalsverifier-core/src/test/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessorTest.java index ab5c63656..252bf69ca 100644 --- a/equalsverifier-core/src/test/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessorTest.java +++ b/equalsverifier-core/src/test/java/nl/jqno/equalsverifier/internal/reflection/vintage/ClassAccessorTest.java @@ -37,7 +37,8 @@ public void setup() { factoryCache = JavaApiPrefabValues.build(); valueProvider = new VintageValueProvider(TestValueProviders.empty(), cache, factoryCache, objenesis); - pointContainerAccessor = ClassAccessor.of(PointContainer.class, valueProvider, objenesis); + pointContainerAccessor = + new ClassAccessor<>(PointContainer.class, valueProvider, objenesis); } @Test @@ -48,7 +49,7 @@ public void getRedObject() { @Test @SuppressWarnings("rawtypes") public void getRedObjectGeneric() { - ClassAccessor accessor = ClassAccessor.of( + ClassAccessor accessor = new ClassAccessor<>( GenericTypeVariableListContainer.class, valueProvider, objenesis @@ -60,16 +61,6 @@ public void getRedObjectGeneric() { assertEquals(String.class, foo.tList.get(0).getClass()); } - @Test - public void getRedAccessor() { - PointContainer foo = pointContainerAccessor.getRedObject(TypeTag.NULL, empty); - ObjectAccessor objectAccessor = pointContainerAccessor.getRedAccessor( - TypeTag.NULL, - empty - ); - assertEquals(foo, objectAccessor.get()); - } - @Test public void getBlueObject() { assertObjectHasNoNullFields(pointContainerAccessor.getBlueObject(TypeTag.NULL, empty)); @@ -78,7 +69,7 @@ public void getBlueObject() { @Test @SuppressWarnings("rawtypes") public void getBlueObjectGeneric() { - ClassAccessor accessor = ClassAccessor.of( + ClassAccessor accessor = new ClassAccessor<>( GenericTypeVariableListContainer.class, valueProvider, objenesis @@ -90,16 +81,6 @@ public void getBlueObjectGeneric() { assertEquals(String.class, foo.tList.get(0).getClass()); } - @Test - public void getBlueAccessor() { - PointContainer foo = pointContainerAccessor.getBlueObject(TypeTag.NULL, empty); - ObjectAccessor objectAccessor = pointContainerAccessor.getBlueAccessor( - TypeTag.NULL, - empty - ); - assertEquals(foo, objectAccessor.get()); - } - @Test public void redAndBlueNotEqual() { PointContainer red = pointContainerAccessor.getRedObject(TypeTag.NULL, empty); @@ -109,15 +90,13 @@ public void redAndBlueNotEqual() { @Test public void instantiateAllTypes() { - ClassAccessor - .of(AllTypesContainer.class, valueProvider, objenesis) + new ClassAccessor<>(AllTypesContainer.class, valueProvider, objenesis) .getRedObject(TypeTag.NULL, empty); } @Test public void instantiateArrayTypes() { - ClassAccessor - .of(AllArrayTypesContainer.class, valueProvider, objenesis) + new ClassAccessor<>(AllArrayTypesContainer.class, valueProvider, objenesis) .getRedObject(TypeTag.NULL, empty); } @@ -129,28 +108,25 @@ public void instantiateRecursiveTypeUsingPrefabValue() { ); valueProvider = new VintageValueProvider(TestValueProviders.empty(), cache, factoryCache, objenesis); - ClassAccessor - .of(TwoStepNodeA.class, valueProvider, objenesis) + new ClassAccessor<>(TwoStepNodeA.class, valueProvider, objenesis) .getRedObject(TypeTag.NULL, empty); } @Test public void instantiateInterfaceField() { - ClassAccessor - .of(InterfaceContainer.class, valueProvider, objenesis) + new ClassAccessor<>(InterfaceContainer.class, valueProvider, objenesis) .getRedObject(TypeTag.NULL, empty); } @Test public void instantiateAbstractClassField() { - ClassAccessor - .of(AbstractClassContainer.class, valueProvider, objenesis) + new ClassAccessor<>(AbstractClassContainer.class, valueProvider, objenesis) .getRedObject(TypeTag.NULL, empty); } @Test public void anInvalidTypeShouldNotThrowAnExceptionUponCreation() { - ClassAccessor.of(null, valueProvider, objenesis); + new ClassAccessor<>(null, valueProvider, objenesis); } private void assertObjectHasNoNullFields(PointContainer foo) {