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> {