From 174d43916f385682832f1052ceda2c03224a44a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Mon, 30 Apr 2018 11:43:59 +0200 Subject: [PATCH 1/2] Inspection point data structure --- .../configuration/AlwaysTruePredicate.java | 6 +- .../stringify/configuration/DoNotInspect.java | 5 +- .../stringify/configuration/Inspect.java | 5 +- .../configuration/InspectionPoint.java | 32 ++++++++ .../stringify/impl/InspectFieldPredicate.java | 4 +- .../impl/InspectingFieldFactory.java | 19 ++--- .../stringify/impl/InspectionPointImpl.java | 69 +++++++++++++++++ .../PromiscuousInspectFieldPredicate.java | 29 +++---- .../impl/QuietInspectFieldPredicate.java | 22 +++--- .../stringify/impl/ToStringResolverImpl.java | 8 +- .../{configuration => lang}/Predicate.java | 2 +- .../utils/stringify/lang/Supplier.java | 24 ++++++ .../utils/stringify/IsInDevelopment.java | 7 +- .../utils/stringify/ObjectStringifierIT.java | 12 +-- .../stringify/ObjectStringifierTest.java | 77 +++++++++++++++++-- .../stringify/ProductionEnvironment.java | 9 +-- 16 files changed, 262 insertions(+), 68 deletions(-) create mode 100644 src/main/java/pl/wavesoftware/utils/stringify/configuration/InspectionPoint.java create mode 100644 src/main/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImpl.java rename src/main/java/pl/wavesoftware/utils/stringify/{configuration => lang}/Predicate.java (91%) create mode 100644 src/main/java/pl/wavesoftware/utils/stringify/lang/Supplier.java diff --git a/src/main/java/pl/wavesoftware/utils/stringify/configuration/AlwaysTruePredicate.java b/src/main/java/pl/wavesoftware/utils/stringify/configuration/AlwaysTruePredicate.java index 8505db5..71e6a67 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/configuration/AlwaysTruePredicate.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/configuration/AlwaysTruePredicate.java @@ -1,14 +1,14 @@ package pl.wavesoftware.utils.stringify.configuration; -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.lang.Predicate; /** * @author Krzysztof Suszynski * @since 27.04.18 */ -public final class AlwaysTruePredicate implements Predicate { +public final class AlwaysTruePredicate implements Predicate { @Override - public boolean test(Field field) { + public boolean test(InspectionPoint inspectionPoint) { return true; } } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/configuration/DoNotInspect.java b/src/main/java/pl/wavesoftware/utils/stringify/configuration/DoNotInspect.java index db42a34..15d35b4 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/configuration/DoNotInspect.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/configuration/DoNotInspect.java @@ -1,10 +1,11 @@ package pl.wavesoftware.utils.stringify.configuration; +import pl.wavesoftware.utils.stringify.lang.Predicate; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.lang.reflect.Field; /** * When running in {@link Mode#PROMISCUOUS} this annotation can be used to exclude a @@ -22,5 +23,5 @@ * * @return a class of predicate to be used to determine if field should not be inspected */ - Class> conditionally() default AlwaysTruePredicate.class; + Class> conditionally() default AlwaysTruePredicate.class; } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/configuration/Inspect.java b/src/main/java/pl/wavesoftware/utils/stringify/configuration/Inspect.java index ca16ade..cbd379f 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/configuration/Inspect.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/configuration/Inspect.java @@ -1,10 +1,11 @@ package pl.wavesoftware.utils.stringify.configuration; +import pl.wavesoftware.utils.stringify.lang.Predicate; + import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -import java.lang.reflect.Field; /** * If {@link Mode} is set to {@link Mode#QUIET} (by default), this annotation @@ -24,5 +25,5 @@ * * @return a class of predicate to be used to determine if field should be inspected */ - Class> conditionally() default AlwaysTruePredicate.class; + Class> conditionally() default AlwaysTruePredicate.class; } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/configuration/InspectionPoint.java b/src/main/java/pl/wavesoftware/utils/stringify/configuration/InspectionPoint.java new file mode 100644 index 0000000..e2e03e8 --- /dev/null +++ b/src/main/java/pl/wavesoftware/utils/stringify/configuration/InspectionPoint.java @@ -0,0 +1,32 @@ +package pl.wavesoftware.utils.stringify.configuration; + +import pl.wavesoftware.utils.stringify.lang.Supplier; + +import java.lang.reflect.Field; + +/** + * This interface represents a inspection point in some object. + * + * @author Krzysztof Suszynski + * @since 30.04.18 + */ +public interface InspectionPoint { + /** + * Get field representation of inspection point + * @return a field + */ + Field getField(); + + /** + * Get object that contains this inspection point + * @return an object + */ + Object getContainingObject(); + + /** + * Get a field value supplier + * + * @return a supplier of a field value + */ + Supplier getValueSupplier(); +} diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectFieldPredicate.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectFieldPredicate.java index 1ece32c..fab58e9 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectFieldPredicate.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectFieldPredicate.java @@ -1,11 +1,11 @@ package pl.wavesoftware.utils.stringify.impl; -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; /** * @author Krzysztof Suszynski * @since 27.04.18 */ interface InspectFieldPredicate { - boolean shouldInspect(Field field); + boolean shouldInspect(InspectionPoint inspectionPoint); } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectingFieldFactory.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectingFieldFactory.java index 6281f55..9f1e6fe 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectingFieldFactory.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectingFieldFactory.java @@ -1,11 +1,10 @@ package pl.wavesoftware.utils.stringify.impl; import lombok.RequiredArgsConstructor; +import pl.wavesoftware.utils.stringify.configuration.BeanFactory; import pl.wavesoftware.utils.stringify.configuration.DisplayNull; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; import pl.wavesoftware.utils.stringify.configuration.Mode; -import pl.wavesoftware.utils.stringify.configuration.BeanFactory; - -import java.lang.reflect.Field; /** * @author Krzysztof Suszynski @@ -15,9 +14,9 @@ final class InspectingFieldFactory { private final Mode mode; - InspectingField create(Field field, + InspectingField create(InspectionPoint inspectionPoint, BeanFactory beanFactory) { - return new InspectingFieldImpl(field, createPredicate(beanFactory)); + return new InspectingFieldImpl(inspectionPoint, createPredicate(beanFactory)); } private InspectFieldPredicate createPredicate(BeanFactory beanFactory) { @@ -30,21 +29,23 @@ private InspectFieldPredicate createPredicate(BeanFactory beanFactory) { @RequiredArgsConstructor private class InspectingFieldImpl implements InspectingField { - private final Field field; + private final InspectionPoint inspectionPoint; private final InspectFieldPredicate predicate; @Override public boolean shouldInspect() { - return technically() && predicate.shouldInspect(field); + return technically() && predicate.shouldInspect(inspectionPoint); } private boolean technically() { - return !field.isEnumConstant() && !field.isSynthetic(); + return !inspectionPoint.getField().isEnumConstant() + && !inspectionPoint.getField().isSynthetic(); } @Override public boolean showNull() { - DisplayNull displayNull = field.getAnnotation(DisplayNull.class); + DisplayNull displayNull = inspectionPoint.getField() + .getAnnotation(DisplayNull.class); if (displayNull != null) { return displayNull.value(); } else { diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImpl.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImpl.java new file mode 100644 index 0000000..0f6ca64 --- /dev/null +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImpl.java @@ -0,0 +1,69 @@ +package pl.wavesoftware.utils.stringify.impl; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import pl.wavesoftware.eid.utils.EidPreconditions; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.lang.Supplier; + +import javax.annotation.Nonnull; +import java.lang.reflect.Field; + +import static pl.wavesoftware.eid.utils.EidPreconditions.tryToExecute; + +/** + * @author Krzysztof Suszynski + * @since 30.04.18 + */ +@Getter +@RequiredArgsConstructor +final class InspectionPointImpl implements InspectionPoint { + private final Field field; + private final Object containingObject; + + @Override + public Supplier getValueSupplier() { + return new Supplier() { + @Override + public Object get() { + try (final FieldAccessiblier accessiblier = new FieldAccessiblier(getField())) { + return tryToExecute(new EidPreconditions.UnsafeSupplier() { + @Override + @Nonnull + public Object get() throws IllegalAccessException { + return accessiblier + .getField() + .get(getContainingObject()); + } + }, "20180430:113514"); + } + } + }; + } + + private static final class FieldAccessiblier implements AutoCloseable { + @Getter + private final Field field; + private final boolean accessible; + + private FieldAccessiblier(Field field) { + this.field = field; + this.accessible = ensureAccessible(field); + } + + @Override + public void close() { + if (!accessible) { + field.setAccessible(false); + } + } + + private static boolean ensureAccessible(Field field) { + boolean ret = field.isAccessible(); + if (!ret) { + field.setAccessible(true); + } + return ret; + } + } +} diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/PromiscuousInspectFieldPredicate.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/PromiscuousInspectFieldPredicate.java index 2e1053a..ca3fc00 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/impl/PromiscuousInspectFieldPredicate.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/PromiscuousInspectFieldPredicate.java @@ -3,12 +3,11 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import pl.wavesoftware.utils.stringify.configuration.AlwaysTruePredicate; +import pl.wavesoftware.utils.stringify.configuration.BeanFactory; import pl.wavesoftware.utils.stringify.configuration.DoNotInspect; import pl.wavesoftware.utils.stringify.configuration.Inspect; -import pl.wavesoftware.utils.stringify.configuration.Predicate; -import pl.wavesoftware.utils.stringify.configuration.BeanFactory; - -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.lang.Predicate; /** * @author Krzysztof Suszynski @@ -19,28 +18,30 @@ final class PromiscuousInspectFieldPredicate implements InspectFieldPredicate { private final BeanFactory beanFactory; @Override - public boolean shouldInspect(Field field) { - DoNotInspect doNotInspect = field.getAnnotation(DoNotInspect.class); + public boolean shouldInspect(InspectionPoint inspectionPoint) { + DoNotInspect doNotInspect = inspectionPoint.getField() + .getAnnotation(DoNotInspect.class); if (doNotInspect != null) { - return shouldInspect(field, doNotInspect); + return shouldInspect(inspectionPoint, doNotInspect); } else { - Inspect inspect = field.getAnnotation(Inspect.class); + Inspect inspect = inspectionPoint.getField() + .getAnnotation(Inspect.class); if (inspect != null && inspect.conditionally() != AlwaysTruePredicate.class) { - Predicate predicate = beanFactory.create(inspect.conditionally()); - return predicate.test(field); + Predicate predicate = beanFactory.create(inspect.conditionally()); + return predicate.test(inspectionPoint); } else { return true; } } } - private boolean shouldInspect(Field field, DoNotInspect doNotInspect) { - Class> predicateClass = doNotInspect.conditionally(); + private boolean shouldInspect(InspectionPoint inspectionPoint, DoNotInspect doNotInspect) { + Class> predicateClass = doNotInspect.conditionally(); if (predicateClass == AlwaysTruePredicate.class) { return false; } else { - Predicate predicate = beanFactory.create(predicateClass); - return !predicate.test(field); + Predicate predicate = beanFactory.create(predicateClass); + return !predicate.test(inspectionPoint); } } } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/QuietInspectFieldPredicate.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/QuietInspectFieldPredicate.java index e6929dd..a583ef1 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/impl/QuietInspectFieldPredicate.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/QuietInspectFieldPredicate.java @@ -3,11 +3,10 @@ import lombok.AccessLevel; import lombok.RequiredArgsConstructor; import pl.wavesoftware.utils.stringify.configuration.AlwaysTruePredicate; -import pl.wavesoftware.utils.stringify.configuration.Inspect; -import pl.wavesoftware.utils.stringify.configuration.Predicate; import pl.wavesoftware.utils.stringify.configuration.BeanFactory; - -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.configuration.Inspect; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.lang.Predicate; /** * @author Krzysztof Suszynski @@ -18,22 +17,23 @@ final class QuietInspectFieldPredicate implements InspectFieldPredicate { private final BeanFactory beanFactory; @Override - public boolean shouldInspect(Field field) { - Inspect inspect = field.getAnnotation(Inspect.class); + public boolean shouldInspect(InspectionPoint inspectionPoint) { + Inspect inspect = inspectionPoint.getField() + .getAnnotation(Inspect.class); if (inspect != null) { - return shouldInspect(field, inspect); + return shouldInspect(inspectionPoint, inspect); } else { return false; } } - private boolean shouldInspect(Field field, Inspect inspect) { - Class> predicateClass = inspect.conditionally(); + private boolean shouldInspect(InspectionPoint inspectionPoint, Inspect inspect) { + Class> predicateClass = inspect.conditionally(); if (predicateClass == AlwaysTruePredicate.class) { return true; } else { - Predicate predicate = beanFactory.create(predicateClass); - return predicate.test(field); + Predicate predicate = beanFactory.create(predicateClass); + return predicate.test(inspectionPoint); } } } diff --git a/src/main/java/pl/wavesoftware/utils/stringify/impl/ToStringResolverImpl.java b/src/main/java/pl/wavesoftware/utils/stringify/impl/ToStringResolverImpl.java index caca7f6..8732cba 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/impl/ToStringResolverImpl.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/impl/ToStringResolverImpl.java @@ -1,6 +1,7 @@ package pl.wavesoftware.utils.stringify.impl; import pl.wavesoftware.eid.utils.EidPreconditions; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; import pl.wavesoftware.utils.stringify.configuration.Mode; import pl.wavesoftware.utils.stringify.configuration.BeanFactory; @@ -120,13 +121,18 @@ private Map inspectTargetAsClass(Class type) { private void inspectFields(Field[] fields, Map properties) { for (Field field : fields) { - InspectingField inspectingField = inspectingFieldFactory.create(field, beanFactory); + InspectionPoint inspectionPoint = createInspectionPoint(field); + InspectingField inspectingField = inspectingFieldFactory.create(inspectionPoint, beanFactory); if (inspectingField.shouldInspect()) { inspectAnnotatedField(properties, field, inspectingField); } } } + private InspectionPoint createInspectionPoint(Field field) { + return new InspectionPointImpl(field, target); + } + private void inspectAnnotatedField(final Map properties, final Field field, final InspectingField inspectingField) { diff --git a/src/main/java/pl/wavesoftware/utils/stringify/configuration/Predicate.java b/src/main/java/pl/wavesoftware/utils/stringify/lang/Predicate.java similarity index 91% rename from src/main/java/pl/wavesoftware/utils/stringify/configuration/Predicate.java rename to src/main/java/pl/wavesoftware/utils/stringify/lang/Predicate.java index 11c1197..4bc3d6b 100644 --- a/src/main/java/pl/wavesoftware/utils/stringify/configuration/Predicate.java +++ b/src/main/java/pl/wavesoftware/utils/stringify/lang/Predicate.java @@ -1,4 +1,4 @@ -package pl.wavesoftware.utils.stringify.configuration; +package pl.wavesoftware.utils.stringify.lang; /** * Represents a predicate (boolean-valued function) of one argument. diff --git a/src/main/java/pl/wavesoftware/utils/stringify/lang/Supplier.java b/src/main/java/pl/wavesoftware/utils/stringify/lang/Supplier.java new file mode 100644 index 0000000..f57dd32 --- /dev/null +++ b/src/main/java/pl/wavesoftware/utils/stringify/lang/Supplier.java @@ -0,0 +1,24 @@ +package pl.wavesoftware.utils.stringify.lang; + +/** + * Represents a supplier of results. + * + *

There is no requirement that a new or distinct result be returned each + * time the supplier is invoked. + * + *

This is a functional interface + * whose functional method is {@link #get()}. + * + * @param the type of results supplied by this supplier + * + * @author Krzysztof Suszynski + * @since 30.04.18 + */ +public interface Supplier { + /** + * Gets a result. + * + * @return a result + */ + T get(); +} diff --git a/src/test/java/pl/wavesoftware/utils/stringify/IsInDevelopment.java b/src/test/java/pl/wavesoftware/utils/stringify/IsInDevelopment.java index 2bd9e2e..9732ef0 100644 --- a/src/test/java/pl/wavesoftware/utils/stringify/IsInDevelopment.java +++ b/src/test/java/pl/wavesoftware/utils/stringify/IsInDevelopment.java @@ -1,12 +1,11 @@ package pl.wavesoftware.utils.stringify; -import pl.wavesoftware.utils.stringify.configuration.Predicate; - -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.lang.Predicate; /** * @author Krzysztof Suszynski * @since 27.04.18 */ -interface IsInDevelopment extends Predicate { +interface IsInDevelopment extends Predicate { } diff --git a/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierIT.java b/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierIT.java index 8cdc5b2..c2f95cb 100644 --- a/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierIT.java +++ b/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierIT.java @@ -98,14 +98,14 @@ public void stringifier(Blackhole bh) { private static double getSpeedThreshold() { double jreVersion = Double.parseDouble(System.getProperty("java.specification.version")); if (jreVersion >= 9d) { - // 5% performance of static lombok code for Java 9+ - return 0.05d; + // 3% performance of static lombok code for Java 9+ + return 0.03d; } else if (jreVersion >= 1.8d) { - // 8% performance of static lombok code for Java 8 - return 0.08d; + // 5% performance of static lombok code for Java 8 + return 0.05d; } else { - // 1% performance of static lombok code for Java 7 - return 0.01d; + // 0.5% performance of static lombok code for Java 7 + return 0.005d; } } diff --git a/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierTest.java b/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierTest.java index 852fe1e..10cb938 100644 --- a/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierTest.java +++ b/src/test/java/pl/wavesoftware/utils/stringify/ObjectStringifierTest.java @@ -4,9 +4,11 @@ import lombok.RequiredArgsConstructor; import org.junit.Test; import pl.wavesoftware.utils.stringify.configuration.AlwaysTruePredicate; -import pl.wavesoftware.utils.stringify.configuration.Mode; -import pl.wavesoftware.utils.stringify.configuration.Predicate; import pl.wavesoftware.utils.stringify.configuration.BeanFactory; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.configuration.Mode; +import pl.wavesoftware.utils.stringify.lang.Predicate; +import pl.wavesoftware.utils.stringify.lang.Supplier; import java.lang.reflect.Field; import java.util.AbstractMap; @@ -72,7 +74,7 @@ public void testByLombok() { } @Test - public void testWithCustomPredicate() throws NoSuchFieldException { + public void testWithCustomPredicate() { // given SimpleUser user = testRepository.createTestSimpleUser(); ObjectStringifier stringifier = new ObjectStringifier(user); @@ -87,8 +89,24 @@ public void testWithCustomPredicate() throws NoSuchFieldException { assertEquals("", productionResult); assertEquals("", developmentResult); + assertTrue(new AlwaysTruePredicate().test( - this.getClass().getDeclaredField("testRepository") + new InspectionPoint() { + @Override + public Field getField() { + return null; + } + + @Override + public Object getContainingObject() { + return null; + } + + @Override + public Supplier getValueSupplier() { + return null; + } + } )); } @@ -134,20 +152,63 @@ public void testOnPerson() { "childs=[(↻)], account=⁂Lazy>, childs=[], account=⁂Lazy>", productionResult); } + @Test + public void testOnPersonWithCustomPerdicateLogic() { + // given + Person person = testRepository.createPerson(); + ObjectStringifier stringifier = new ObjectStringifier(person); + IsInDevelopment isInDevelopment = new IsInDevelopmentPredicate(new Predicate() { + @Override + public boolean test(Object value) { + return value instanceof String + && ((String) value).contains("!@#$"); + } + }); + BeanFactory productionBeanFactory = getBeanFactory(isInDevelopment); + stringifier.setBeanFactory(productionBeanFactory); + + // when + String productionResult = stringifier.toString(); + + // then + assertEquals(", childs=[], " + + "account=⁂Lazy>", productionResult); + } + + private static boolean inspectionPointValue(final InspectionPoint inspectionPoint, + final Predicate predicate) { + return predicate.test( + inspectionPoint + .getValueSupplier() + .get() + ); + } + private StaticBeanFactory getBeanFactory(IsInDevelopment isInDevelopmentFalse) { return new StaticBeanFactory( - new AbstractMap.SimpleImmutableEntry, Predicate>( + new AbstractMap.SimpleImmutableEntry, Predicate>( IsInDevelopment.class, isInDevelopmentFalse ) ); } + @RequiredArgsConstructor + private static final class IsInDevelopmentPredicate implements IsInDevelopment { + private final Predicate predicate; + + @Override + public boolean test(InspectionPoint inspectionPoint) { + return inspectionPointValue(inspectionPoint, predicate); + } + } + @RequiredArgsConstructor private static final class IsInDevelopmentImpl implements IsInDevelopment { private final boolean development; @Override - public boolean test(Field field) { + public boolean test(InspectionPoint point) { return development; } } @@ -156,8 +217,8 @@ private static final class StaticBeanFactory implements BeanFactory { private final Map, Object> instances = new HashMap<>(); @SafeVarargs - StaticBeanFactory(Map.Entry, Predicate>... entries) { - for (Map.Entry, Predicate> entry : entries) { + StaticBeanFactory(Map.Entry, Predicate>... entries) { + for (Map.Entry, Predicate> entry : entries) { instances.put(entry.getKey(), entry.getValue()); } } diff --git a/src/test/java/pl/wavesoftware/utils/stringify/ProductionEnvironment.java b/src/test/java/pl/wavesoftware/utils/stringify/ProductionEnvironment.java index dfb5346..2503e69 100644 --- a/src/test/java/pl/wavesoftware/utils/stringify/ProductionEnvironment.java +++ b/src/test/java/pl/wavesoftware/utils/stringify/ProductionEnvironment.java @@ -1,14 +1,13 @@ package pl.wavesoftware.utils.stringify; -import pl.wavesoftware.utils.stringify.configuration.Predicate; - -import java.lang.reflect.Field; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; +import pl.wavesoftware.utils.stringify.lang.Predicate; /** * @author Krzysztof Suszynski * @since 27.04.18 */ -public final class ProductionEnvironment implements Predicate { +public final class ProductionEnvironment implements Predicate { private static boolean production = true; static void setProduction(boolean setting) { @@ -16,7 +15,7 @@ static void setProduction(boolean setting) { } @Override - public boolean test(Field field) { + public boolean test(InspectionPoint inspectionPoint) { return production; } } From a67ebd53ea6fd5e127f92dc1983c4f0d1ea410f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Suszy=C5=84ski=20Krzysztof?= Date: Mon, 30 Apr 2018 12:17:33 +0200 Subject: [PATCH 2/2] Quality fix --- .../utils/stringify/lang/package-info.java | 8 +++++ .../impl/InspectionPointImplTest.java | 35 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/pl/wavesoftware/utils/stringify/lang/package-info.java create mode 100644 src/test/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImplTest.java diff --git a/src/main/java/pl/wavesoftware/utils/stringify/lang/package-info.java b/src/main/java/pl/wavesoftware/utils/stringify/lang/package-info.java new file mode 100644 index 0000000..de57fa7 --- /dev/null +++ b/src/main/java/pl/wavesoftware/utils/stringify/lang/package-info.java @@ -0,0 +1,8 @@ +/** + * @author Krzysztof Suszynski + * @since 30.04.18 + */ +@ParametersAreNonnullByDefault +package pl.wavesoftware.utils.stringify.lang; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/test/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImplTest.java b/src/test/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImplTest.java new file mode 100644 index 0000000..1cdcb75 --- /dev/null +++ b/src/test/java/pl/wavesoftware/utils/stringify/impl/InspectionPointImplTest.java @@ -0,0 +1,35 @@ +package pl.wavesoftware.utils.stringify.impl; + +import org.junit.Test; +import pl.wavesoftware.utils.stringify.configuration.InspectionPoint; + +import java.lang.reflect.Field; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Krzysztof Suszynski + * @since 30.04.18 + */ +public class InspectionPointImplTest { + + @Test + public void testGetValueSupplier() throws NoSuchFieldException { + // given + Sample sample = new Sample(); + sample.ala = "ma"; + Field alaField = Sample.class.getDeclaredField("ala"); + alaField.setAccessible(true); + InspectionPoint inspectionPoint = new InspectionPointImpl(alaField, sample); + + // when + Object value = inspectionPoint.getValueSupplier().get(); + + // then + assertThat(value).isEqualTo("ma"); + } + + private static final class Sample { + private String ala; + } +}