You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/01/23 13:38:03 UTC
[isis] branch master updated: ISIS-2158: remove flags 'immutable'
and 'equalByContent' from ValueSemanticsProvider
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new cfca6d2 ISIS-2158: remove flags 'immutable' and 'equalByContent' from ValueSemanticsProvider
cfca6d2 is described below
commit cfca6d2b4149304620233fcf7b0797bd7a67ca72
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 23 14:37:52 2020 +0100
ISIS-2158: remove flags 'immutable' and 'equalByContent' from
ValueSemanticsProvider
these are always true (at least could not think of a use-case to violate
this)
---
.../adapters/AbstractValueSemanticsProvider.java | 34 +-------
.../applib/adapters/ValueSemanticsProvider.java | 28 -------
.../facets/object/value/ValueFacetAbstract.java | 13 +--
.../ValueSemanticsProviderAndFacetAbstract.java | 10 ---
.../value/blobs/BlobValueSemanticsProvider.java | 4 +-
.../value/clobs/ClobValueSemanticsProvider.java | 4 +-
...eFacetAnnotationOrConfigurationFactoryTest.java | 95 +---------------------
7 files changed, 12 insertions(+), 176 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
index bd1ba51..c7c29e5 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/AbstractValueSemanticsProvider.java
@@ -19,23 +19,8 @@
package org.apache.isis.applib.adapters;
-public abstract class AbstractValueSemanticsProvider<T> implements ValueSemanticsProvider<T> {
-
- private boolean immutable;
- private boolean equalByContent;
-
- /**
- * Defaults {@link #isImmutable()} to <tt>true</tt> and
- * {@link #isEqualByContent()} to <tt>true</tt> also.
- */
- public AbstractValueSemanticsProvider() {
- this(true, true);
- }
-
- public AbstractValueSemanticsProvider(final boolean immutable, final boolean equalByContent) {
- this.immutable = immutable;
- this.equalByContent = equalByContent;
- }
+public abstract class AbstractValueSemanticsProvider<T>
+implements ValueSemanticsProvider<T> {
@SuppressWarnings("unchecked")
@Override
@@ -55,20 +40,5 @@ public abstract class AbstractValueSemanticsProvider<T> implements ValueSemantic
return (DefaultsProvider<T>) (this instanceof DefaultsProvider ? this : null);
}
- /**
- * Defaults to <tt>true</tt> if no-arg constructor is used.
- */
- @Override
- public boolean isEqualByContent() {
- return equalByContent;
- }
-
- /**
- * Defaults to <tt>true</tt> if no-arg constructor is used.
- */
- @Override
- public boolean isImmutable() {
- return immutable;
- }
}
diff --git a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsProvider.java b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsProvider.java
index 42621d4..80c7336 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsProvider.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/adapters/ValueSemanticsProvider.java
@@ -19,27 +19,14 @@
package org.apache.isis.applib.adapters;
-import java.math.BigDecimal;
-
-import org.apache.isis.applib.annotation.Defaulted;
-import org.apache.isis.applib.annotation.EqualByContent;
import org.apache.isis.applib.annotation.Value;
/**
* Provides a mechanism for providing a set of value semantics.
- *
- * <p>
- * As explained in the Javadoc of the {@link Value} annotation, value semantics
- * only actually implies that the type is {@link Aggregated aggregated}.
- * However, values are very often
- * {@link Immutable} and implement {@link EqualByContent} semantics. In
- * addition, there may be a {@link Defaulted default value}.
- *
* <p>
* This interface is used by {@link Value} to allow these semantics to be
* provided through a single point. Alternatively, {@link Value} supports this
* information being provided via the configuration files.
- *
* <p>
* Whatever the class that implements this interface, it must also expose either
* a <tt>public</tt> no-arg constructor, or (for implementations that also are
@@ -72,19 +59,4 @@ public interface ValueSemanticsProvider<T> {
*/
DefaultsProvider<T> getDefaultsProvider();
- /**
- * Whether the value is {@link Immutable}.
- */
- boolean isImmutable();
-
- /**
- * Whether the value has {@link EqualByContent equal by content} semantics.
- *
- * <p>
- * If so, then it must implement <tt>equals(Object)</tt> and
- * <tt>hashCode()</tt> consistently. Examples in the Java language that do
- * this are {@link String} and {@link BigDecimal}, for example.
- */
- boolean isEqualByContent();
-
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
index f4ab81e..985dd82 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAbstract.java
@@ -107,17 +107,8 @@ public abstract class ValueFacetAbstract extends FacetAbstract implements ValueF
// we used to add aggregated here, but this was wrong.
// An immutable value is not aggregated, it is shared.
- // ImmutableFacet, if appropriate
- final boolean immutable = semanticsProvider == null || semanticsProvider.isImmutable();
- if (immutable) {
- this.addContributedFacet(new ImmutableFacetViaValueSemantics(holder));
- }
-
- // EqualByContentFacet, if appropriate
- final boolean equalByContent = semanticsProvider == null || semanticsProvider.isEqualByContent();
- if (equalByContent) {
- this.addContributedFacet(new EqualByContentFacetViaValueSemantics(holder));
- }
+ this.addContributedFacet(new ImmutableFacetViaValueSemantics(holder));
+ this.addContributedFacet(new EqualByContentFacetViaValueSemantics(holder));
if (semanticsProvider != null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
index d590ddd..3cdc95d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/value/vsp/ValueSemanticsProviderAndFacetAbstract.java
@@ -139,16 +139,6 @@ implements ValueSemanticsProvider<T>, EncoderDecoder<T>, Parser<T>, DefaultsProv
return this;
}
- @Override
- public boolean isEqualByContent() {
- return equalByContent;
- }
-
- @Override
- public boolean isImmutable() {
- return immutable;
- }
-
// ///////////////////////////////////////////////////////////////////////////
// Parser implementation
// ///////////////////////////////////////////////////////////////////////////
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
index 324be6b..e65f627 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/blobs/BlobValueSemanticsProvider.java
@@ -36,7 +36,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-public class BlobValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<Blob> implements BlobValueFacet {
+public class BlobValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<Blob>
+implements BlobValueFacet {
private static final int TYPICAL_LENGTH = 0;
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
index e0b9efd..3927617 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/clobs/ClobValueSemanticsProvider.java
@@ -31,7 +31,9 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
-public class ClobValueSemanticsProvider extends ValueSemanticsProviderAndFacetAbstract<Clob> implements ClobValueFacet {
+public class ClobValueSemanticsProvider
+extends ValueSemanticsProviderAndFacetAbstract<Clob>
+implements ClobValueFacet {
private static final int TYPICAL_LENGTH = 0;
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
index ad818f7..b9d0fa2 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/value/ValueFacetAnnotationOrConfigurationFactoryTest.java
@@ -24,13 +24,13 @@ import org.apache.isis.applib.adapters.DefaultsProvider;
import org.apache.isis.applib.adapters.EncoderDecoder;
import org.apache.isis.applib.adapters.Parser;
import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
import org.apache.isis.core.metamodel.facets.object.defaults.DefaultedFacet;
import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotation;
import org.apache.isis.core.metamodel.facets.object.value.annotcfg.ValueFacetAnnotationOrConfigurationFactory;
import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderUtil;
@@ -130,47 +130,6 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
// implement ValueSemanticsProvider
}
- @Value(semanticsProviderClass = MyValueSemanticsProviderWithoutNoArgConstructor.class)
- public static class MyValueSemanticsProviderWithoutNoArgConstructor extends AbstractValueSemanticsProvider<MyValueSemanticsProviderWithoutNoArgConstructor> {
-
- // no no-arg constructor
-
- // pass in false for an immutable, which isn't the default
- public MyValueSemanticsProviderWithoutNoArgConstructor(final int value) {
- super(false, false);
- }
- }
-
- public void testValueSemanticsProviderMustHaveANoArgConstructor() {
- facetFactory.process(new ProcessClassContext(MyValueSemanticsProviderWithoutNoArgConstructor.class, methodRemover, facetedMethod));
-
- // the fact that we have an immutable means that the provider wasn't
- // picked up
- assertNotNull(facetedMethod.getFacet(ImmutableFacet.class));
- }
-
- @Value(semanticsProviderClass = MyValueSemanticsProviderWithoutPublicNoArgConstructor.class)
- public static class MyValueSemanticsProviderWithoutPublicNoArgConstructor extends AbstractValueSemanticsProvider<MyValueSemanticsProviderWithoutPublicNoArgConstructor> {
-
- // no public no-arg constructor
-
- // pass in false for an immutable, which isn't the default
- MyValueSemanticsProviderWithoutPublicNoArgConstructor() {
- super(false, false);
- }
-
- public MyValueSemanticsProviderWithoutPublicNoArgConstructor(final int value) {
- }
- }
-
- public void testValueSemanticsProviderMustHaveAPublicNoArgConstructor() {
- facetFactory.process(new ProcessClassContext(MyValueSemanticsProviderWithoutPublicNoArgConstructor.class, methodRemover, facetedMethod));
-
- // the fact that we have an immutable means that the provider wasn't
- // picked up
- assertNotNull(facetedMethod.getFacet(ImmutableFacet.class));
- }
-
public void testValueSemanticsProviderThatIsNotAParserDoesNotInstallParseableFacet() {
facetFactory.process(new ProcessClassContext(MyValueSemanticsProviderUsingSemanticsProviderClass.class, methodRemover, facetedMethod));
assertNull(facetedMethod.getFacet(ParseableFacet.class));
@@ -302,12 +261,6 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$MyValueSemanticsProviderThatSpecifiesImmutableSemantic")
public static class MyValueSemanticsProviderThatSpecifiesImmutableSemantic extends AbstractValueSemanticsProvider<MyValueSemanticsProviderThatSpecifiesImmutableSemantic> {
- /**
- * Required since is a ValueSemanticsProvider.
- */
- public MyValueSemanticsProviderThatSpecifiesImmutableSemantic() {
- super(true, true);
- }
}
public void testImmutableFacetsIsInstalledIfSpecifiesImmutable() {
@@ -318,25 +271,6 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
assertNotNull(facet);
}
- @Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$MyValueSemanticsProviderThatSpecifiesNotImmutableSemantic")
- public static class MyValueSemanticsProviderThatSpecifiesNotImmutableSemantic extends AbstractValueSemanticsProvider<MyValueSemanticsProviderThatSpecifiesNotImmutableSemantic> {
-
- /**
- * Required since is a ValueSemanticsProvider.
- */
- public MyValueSemanticsProviderThatSpecifiesNotImmutableSemantic() {
- super(false, true);
- }
- }
-
- public void testImmutableFacetsIsNotInstalledIfSpecifiesNotImmutable() {
-
- facetFactory.process(new ProcessClassContext(MyValueSemanticsProviderThatSpecifiesNotImmutableSemantic.class, methodRemover, facetedMethod));
-
- final ImmutableFacet facet = facetedMethod.getFacet(ImmutableFacet.class);
- assertNull(facet);
- }
-
public void testEqualByContentFacetsIsInstalledIfNoSemanticsProviderSpecified() {
@Value()
@@ -351,13 +285,7 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$MyValueSemanticsProviderThatSpecifiesEqualByContentSemantic")
public static class MyValueSemanticsProviderThatSpecifiesEqualByContentSemantic extends AbstractValueSemanticsProvider<MyValueSemanticsProviderThatSpecifiesEqualByContentSemantic> {
-
- /**
- * Required since is a ValueSemanticsProvider.
- */
- public MyValueSemanticsProviderThatSpecifiesEqualByContentSemantic() {
- super(true, true);
- }
+
}
public void testEqualByContentFacetsIsInstalledIfSpecifiesEqualByContent() {
@@ -368,25 +296,6 @@ public class ValueFacetAnnotationOrConfigurationFactoryTest extends AbstractFace
assertNotNull(facet);
}
- @Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.object.value.ValueFacetAnnotationOrConfigurationFactoryTest$MyValueSemanticsProviderThatSpecifiesNotEqualByContentSemantic")
- public static class MyValueSemanticsProviderThatSpecifiesNotEqualByContentSemantic extends AbstractValueSemanticsProvider<MyValueSemanticsProviderThatSpecifiesNotEqualByContentSemantic> {
-
- /**
- * Required since is a ValueSemanticsProvider.
- */
- public MyValueSemanticsProviderThatSpecifiesNotEqualByContentSemantic() {
- super(false, false);
- }
- }
-
- public void testEqualByContentFacetsIsNotInstalledIfSpecifiesNotEqualByContent() {
-
- facetFactory.process(new ProcessClassContext(MyValueSemanticsProviderThatSpecifiesNotEqualByContentSemantic.class, methodRemover, facetedMethod));
-
- final EqualByContentFacet facet = facetedMethod.getFacet(EqualByContentFacet.class);
- assertNull(facet);
- }
-
@Value()
public static class MyValueWithSemanticsProviderSpecifiedUsingConfiguration extends AbstractValueSemanticsProvider<MyValueWithSemanticsProviderSpecifiedUsingConfiguration> implements Parser<MyValueWithSemanticsProviderSpecifiedUsingConfiguration> {