From 12a0574ff941e40a97372c4d5e8450560eb51e48 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 11 Jun 2020 19:45:10 +0200 Subject: [PATCH] fix shallow clone bug --- .../github/vincemann/ezcompare/Comparator.java | 17 ++++------------- .../github/vincemann/ezcompare/Comparison.java | 8 +++++--- .../ezcompare/FullCompareOptionsConfigurer.java | 4 +++- .../PartialCompareOptionsConfigurer.java | 4 +++- .../ezcompare/RapidArgumentMatchers.java | 4 ++++ .../{ => config}/FullCompareConfig.java | 7 +++++-- .../{ => config}/FullCompareConfigFactory.java | 8 ++++++-- .../{ => config}/PartialCompareConfig.java | 7 +++++-- .../PartialCompareConfigFactory.java | 8 ++++++-- .../vincemann/ezcompare/util/BeanUtils.java | 3 +++ .../CompareTemplateFullCompareTest.java | 4 ++-- .../vincemann/ezcompare/ShowCaseTests.java | 14 ++++++++++++++ 12 files changed, 60 insertions(+), 28 deletions(-) rename src/main/java/com/github/vincemann/ezcompare/{ => config}/FullCompareConfig.java (91%) rename src/main/java/com/github/vincemann/ezcompare/{ => config}/FullCompareConfigFactory.java (70%) rename src/main/java/com/github/vincemann/ezcompare/{ => config}/PartialCompareConfig.java (86%) rename src/main/java/com/github/vincemann/ezcompare/{ => config}/PartialCompareConfigFactory.java (70%) diff --git a/src/main/java/com/github/vincemann/ezcompare/Comparator.java b/src/main/java/com/github/vincemann/ezcompare/Comparator.java index 7e03137..682716a 100644 --- a/src/main/java/com/github/vincemann/ezcompare/Comparator.java +++ b/src/main/java/com/github/vincemann/ezcompare/Comparator.java @@ -1,18 +1,9 @@ package com.github.vincemann.ezcompare; -import com.github.hervian.reflection.Types; -import com.github.vincemann.ezcompare.util.BeanUtils; -import com.github.vincemann.ezcompare.util.ReflectionUtils; -import com.google.common.collect.Sets; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; - -import java.util.HashSet; -import java.util.Set; - -import static com.github.vincemann.ezcompare.util.MethodNameUtil.propertyNameOf; +import com.github.vincemann.ezcompare.config.FullCompareConfig; +import com.github.vincemann.ezcompare.config.FullCompareConfigFactory; +import com.github.vincemann.ezcompare.config.PartialCompareConfig; +import com.github.vincemann.ezcompare.config.PartialCompareConfigFactory; /** * Factory for {@link Comparison}. diff --git a/src/main/java/com/github/vincemann/ezcompare/Comparison.java b/src/main/java/com/github/vincemann/ezcompare/Comparison.java index 950cc68..c29b36a 100644 --- a/src/main/java/com/github/vincemann/ezcompare/Comparison.java +++ b/src/main/java/com/github/vincemann/ezcompare/Comparison.java @@ -1,6 +1,8 @@ package com.github.vincemann.ezcompare; import com.github.hervian.reflection.Types; +import com.github.vincemann.ezcompare.config.FullCompareConfig; +import com.github.vincemann.ezcompare.config.PartialCompareConfig; import com.google.common.collect.Sets; import lombok.AccessLevel; import lombok.Builder; @@ -97,7 +99,7 @@ public FullComparePropertyConfigurer ignore(String... propertyNames) { /** * Globally ignored Properties are not included. * If you want to add some of them anyways for this specific comparison, use {@link this#configureFullCompare(FullCompareConfigConfigurer)} - * and remove them from {@link com.github.vincemann.ezcompare.FullCompareConfig#ignoredProperties} for this specific CompareTemplate. + * and remove them from {@link FullCompareConfig#ignoredProperties} for this specific CompareTemplate. */ @Override public FullComparePropertyConfigurer all() { @@ -127,13 +129,13 @@ public CompareOptionsConfigurer fullDiff(boolean v) { @Override public FullCompareOptionsConfigurer configureFullCompare(FullCompareConfigConfigurer configurer) { - configurer.configure(fullCompareConfig); + configurer.configure(fullCompareConfig.modify()); return this; } @Override public PartialCompareOptionsConfigurer configurePartialCompare(PartialCompareConfigConfigurer configurer) { - configurer.configure(partialCompareConfig); + configurer.configure(partialCompareConfig.modify()); return this; } diff --git a/src/main/java/com/github/vincemann/ezcompare/FullCompareOptionsConfigurer.java b/src/main/java/com/github/vincemann/ezcompare/FullCompareOptionsConfigurer.java index a81bf9a..94f845a 100644 --- a/src/main/java/com/github/vincemann/ezcompare/FullCompareOptionsConfigurer.java +++ b/src/main/java/com/github/vincemann/ezcompare/FullCompareOptionsConfigurer.java @@ -1,10 +1,12 @@ package com.github.vincemann.ezcompare; +import com.github.vincemann.ezcompare.config.FullCompareConfig; + public interface FullCompareOptionsConfigurer extends CompareOptionsConfigurer{ interface FullCompareConfigConfigurer{ - public void configure(FullCompareConfig config); + public void configure(FullCompareConfig.Modifier config); } public FullCompareOptionsConfigurer ignoreNull(boolean value); diff --git a/src/main/java/com/github/vincemann/ezcompare/PartialCompareOptionsConfigurer.java b/src/main/java/com/github/vincemann/ezcompare/PartialCompareOptionsConfigurer.java index 86ba3a2..71196d9 100644 --- a/src/main/java/com/github/vincemann/ezcompare/PartialCompareOptionsConfigurer.java +++ b/src/main/java/com/github/vincemann/ezcompare/PartialCompareOptionsConfigurer.java @@ -1,9 +1,11 @@ package com.github.vincemann.ezcompare; +import com.github.vincemann.ezcompare.config.PartialCompareConfig; + public interface PartialCompareOptionsConfigurer extends CompareOptionsConfigurer{ interface PartialCompareConfigConfigurer{ - public void configure(PartialCompareConfig config); + public void configure(PartialCompareConfig.Modifier config); } public PartialCompareOptionsConfigurer configurePartialCompare(PartialCompareConfigConfigurer configurer); } diff --git a/src/main/java/com/github/vincemann/ezcompare/RapidArgumentMatchers.java b/src/main/java/com/github/vincemann/ezcompare/RapidArgumentMatchers.java index 4ae1ba4..43d10e7 100644 --- a/src/main/java/com/github/vincemann/ezcompare/RapidArgumentMatchers.java +++ b/src/main/java/com/github/vincemann/ezcompare/RapidArgumentMatchers.java @@ -1,6 +1,10 @@ package com.github.vincemann.ezcompare; import com.github.hervian.reflection.Types; +import com.github.vincemann.ezcompare.config.FullCompareConfig; +import com.github.vincemann.ezcompare.config.FullCompareConfigFactory; +import com.github.vincemann.ezcompare.config.PartialCompareConfig; +import com.github.vincemann.ezcompare.config.PartialCompareConfigFactory; import com.google.common.collect.Sets; import org.mockito.ArgumentMatcher; diff --git a/src/main/java/com/github/vincemann/ezcompare/FullCompareConfig.java b/src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfig.java similarity index 91% rename from src/main/java/com/github/vincemann/ezcompare/FullCompareConfig.java rename to src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfig.java index 8fd3db8..1d14b5a 100644 --- a/src/main/java/com/github/vincemann/ezcompare/FullCompareConfig.java +++ b/src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfig.java @@ -1,6 +1,9 @@ -package com.github.vincemann.ezcompare; +package com.github.vincemann.ezcompare.config; import com.github.hervian.reflection.Types; +import com.github.vincemann.ezcompare.AbstractConfigModifier; +import com.github.vincemann.ezcompare.Comparison; +import com.github.vincemann.ezcompare.RapidEqualsBuilder; import lombok.Getter; import lombok.Setter; import lombok.ToString; @@ -113,7 +116,7 @@ public static class Builder extends Modifier { super(config); } - FullCompareConfig build() { + public FullCompareConfig build() { return getConfig(); } } diff --git a/src/main/java/com/github/vincemann/ezcompare/FullCompareConfigFactory.java b/src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfigFactory.java similarity index 70% rename from src/main/java/com/github/vincemann/ezcompare/FullCompareConfigFactory.java rename to src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfigFactory.java index d2d69a2..9fd5a08 100644 --- a/src/main/java/com/github/vincemann/ezcompare/FullCompareConfigFactory.java +++ b/src/main/java/com/github/vincemann/ezcompare/config/FullCompareConfigFactory.java @@ -1,6 +1,7 @@ -package com.github.vincemann.ezcompare; +package com.github.vincemann.ezcompare.config; import com.github.vincemann.ezcompare.util.BeanUtils; +import com.google.common.collect.Sets; import static com.github.vincemann.ezcompare.Comparator.getFullCompareGlobalConfig; @@ -23,7 +24,10 @@ public static FullCompareConfig createDefault() { * Creates Config based on GlobalConfig. (clone) */ public static FullCompareConfig.Builder buildBasedOnGlobal() { - return new FullCompareConfig.Builder(BeanUtils.clone(getFullCompareGlobalConfig())); + FullCompareConfig global = getFullCompareGlobalConfig(); + FullCompareConfig cloned = BeanUtils.clone(global); + cloned.setIgnoredProperties(Sets.newHashSet(global.getIgnoredProperties())); + return new FullCompareConfig.Builder(cloned); } /** diff --git a/src/main/java/com/github/vincemann/ezcompare/PartialCompareConfig.java b/src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfig.java similarity index 86% rename from src/main/java/com/github/vincemann/ezcompare/PartialCompareConfig.java rename to src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfig.java index fe54994..3c83fcd 100644 --- a/src/main/java/com/github/vincemann/ezcompare/PartialCompareConfig.java +++ b/src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfig.java @@ -1,5 +1,8 @@ -package com.github.vincemann.ezcompare; +package com.github.vincemann.ezcompare.config; +import com.github.vincemann.ezcompare.AbstractConfigModifier; +import com.github.vincemann.ezcompare.Comparison; +import com.github.vincemann.ezcompare.RapidEqualsBuilder; import com.github.vincemann.ezcompare.util.ReflectionUtils; import com.google.common.collect.Sets; import lombok.ToString; @@ -63,7 +66,7 @@ public static class Builder extends Modifier { super(config); } - PartialCompareConfig build() { + public PartialCompareConfig build() { return getConfig(); } diff --git a/src/main/java/com/github/vincemann/ezcompare/PartialCompareConfigFactory.java b/src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfigFactory.java similarity index 70% rename from src/main/java/com/github/vincemann/ezcompare/PartialCompareConfigFactory.java rename to src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfigFactory.java index f5f9fc5..d00ec79 100644 --- a/src/main/java/com/github/vincemann/ezcompare/PartialCompareConfigFactory.java +++ b/src/main/java/com/github/vincemann/ezcompare/config/PartialCompareConfigFactory.java @@ -1,6 +1,7 @@ -package com.github.vincemann.ezcompare; +package com.github.vincemann.ezcompare.config; import com.github.vincemann.ezcompare.util.BeanUtils; +import com.google.common.collect.Sets; import static com.github.vincemann.ezcompare.Comparator.getPartialCompareGlobalConfig; @@ -23,7 +24,10 @@ public static PartialCompareConfig createDefault() { * Creates Config based on GlobalConfig. (clone) */ public static PartialCompareConfig.Builder buildBasedOnGlobal() { - return new PartialCompareConfig.Builder(BeanUtils.clone(getPartialCompareGlobalConfig())); + PartialCompareConfig global = getPartialCompareGlobalConfig(); + PartialCompareConfig cloned = BeanUtils.clone(global); + cloned.setIncludedProperties(Sets.newHashSet(global.getIncludedProperties())); + return new PartialCompareConfig.Builder(cloned); } /** diff --git a/src/main/java/com/github/vincemann/ezcompare/util/BeanUtils.java b/src/main/java/com/github/vincemann/ezcompare/util/BeanUtils.java index 8fec156..3fdb1bf 100644 --- a/src/main/java/com/github/vincemann/ezcompare/util/BeanUtils.java +++ b/src/main/java/com/github/vincemann/ezcompare/util/BeanUtils.java @@ -8,6 +8,9 @@ public class BeanUtils { private BeanUtils(){} + /** + * Shallow Copy! + */ public static T clone(T o){ try { return (T) BeanUtilsBean.getInstance().cloneBean(o); diff --git a/src/test/java/com/github/vincemann/ezcompare/CompareTemplateFullCompareTest.java b/src/test/java/com/github/vincemann/ezcompare/CompareTemplateFullCompareTest.java index de1595d..c2218c6 100644 --- a/src/test/java/com/github/vincemann/ezcompare/CompareTemplateFullCompareTest.java +++ b/src/test/java/com/github/vincemann/ezcompare/CompareTemplateFullCompareTest.java @@ -190,7 +190,7 @@ void allSame_butRootHasFieldThatCompareDoesNotHave_withValue_useNullForNotFoundE ResultProvider resultProvider = compare(child).with(parent) - .configureFullCompare(config -> config.setUseNullForNotFound(true)) + .configureFullCompare(config -> config.useNullForNotFound(true)) .properties() .all() .ignore(child::getParent) @@ -218,7 +218,7 @@ void allSame_butRootHasFieldThatCompareDoesNotHave_withoutValue_useNullForNotFou boolean equal = compare(child).with(parent) - .configureFullCompare((config) -> config.setUseNullForNotFound(true)) + .configureFullCompare((config) -> config.useNullForNotFound(true)) .properties() .all() .ignore(child::getParent) diff --git a/src/test/java/com/github/vincemann/ezcompare/ShowCaseTests.java b/src/test/java/com/github/vincemann/ezcompare/ShowCaseTests.java index e799bc4..1015ea2 100644 --- a/src/test/java/com/github/vincemann/ezcompare/ShowCaseTests.java +++ b/src/test/java/com/github/vincemann/ezcompare/ShowCaseTests.java @@ -18,6 +18,13 @@ static class Person{ private Long tel; private Integer age; private String creatorIp; + + @Override + public String toString() { + return "Person{" + + "name='" + name + '\'' + + '}'; + } } @Builder @@ -27,6 +34,13 @@ static class PersonDTO{ private String address; private Long tel; private Integer age; + + @Override + public String toString() { + return "PersonDTO{" + + "name='" + name + '\'' + + '}'; + } } @Test