You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2017/10/09 18:30:13 UTC

[isis] branch dev/2.0.0/ISIS-1742-remove-deprecations updated: ISIS-1742: deletes @Optional annotation + supporting facets. Updates .adoc

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch dev/2.0.0/ISIS-1742-remove-deprecations
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/dev/2.0.0/ISIS-1742-remove-deprecations by this push:
     new 64363f5  ISIS-1742: deletes @Optional annotation + supporting facets.  Updates .adoc
64363f5 is described below

commit 64363f5240ca1cd3d9afc76cbbe1187debea4a95
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Oct 9 19:30:06 2017 +0100

    ISIS-1742: deletes @Optional annotation + supporting facets.  Updates .adoc
---
 .../guides/rgant/_rgant_aaa_deprecated.adoc        | 10 +---
 ...programming-model_properties-vs-parameters.adoc |  2 +-
 .../apache/isis/applib/annotation/Optional.java    | 44 -----------------
 .../isis/applib/services/command/Command.java      |  5 +-
 .../parameter/ParameterAnnotationFacetFactory.java | 16 -------
 ...cetInvertedByOptionalAnnotationOnParameter.java | 56 ----------------------
 .../property/PropertyAnnotationFacetFactory.java   | 13 -----
 ...acetInvertedByOptionalAnnotationOnProperty.java | 56 ----------------------
 ...ableAnnotationOnParameterFacetFactoryTest.java} | 53 ++++++++++++++++----
 ...lableAnnotationOnPropertyFacetFactoryTest.java} | 54 +++++++++++++++++----
 10 files changed, 96 insertions(+), 213 deletions(-)

diff --git a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc
index 42e1944..eef1993 100644
--- a/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/rgant/_rgant_aaa_deprecated.adoc
@@ -14,27 +14,19 @@ The annotations listed in the table below are still supported by Apache Isis, bu
 
 
 .Deprecated Annotations
-[cols="2,4a,3a,1,1", options="header"]
+[cols="2,4a,3a,1", options="header"]
 |===
 |Annotation
 |Purpose
 |Use instead
 |Layer
-|xref:../ugvw/ugvw.adoc#_ugvw_layout_file-based[File-based layout]?
 
 
-|`@Optional`
-|Specifies that a property or action parameter is not mandatory.
-|`#optionality()` attribute for xref:../rgant/rgant.adoc#_rgant-Property_optionality[`@Property`] or  xref:../rgant/rgant.adoc#_rgant-Parameter_optionality[`@Parameter`]
-|Domain
-|
-
 
 |`@RegEx`
 |Validate change to value of string property.
 |`#regexPattern()` for xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[`@Property`] or  xref:../rgant/rgant.adoc#_rgant-Property_regexPattern[`@Parameter`].
 |Domain
-|
 
 
 
diff --git a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_properties-vs-parameters.adoc b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_properties-vs-parameters.adoc
index e588c44..a73de66 100644
--- a/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_properties-vs-parameters.adoc
+++ b/adocs/documentation/src/main/asciidoc/guides/ugfun/_ugfun_programming-model_properties-vs-parameters.adoc
@@ -32,7 +32,7 @@ The table below summarises the equivalence of some of the most common cases.
 
 |optionality
 |`@Column(allowsNull="true")`
-|`@Nullable` or `ParameterLayout(optionality=Optionality.OPTIONAL`) (also `@Optional`, now deprecated)
+|`@Nullable` or `ParameterLayout(optionality=Optionality.OPTIONAL`)
 |===
 
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Optional.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Optional.java
deleted file mode 100644
index 353c1cf..0000000
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Optional.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.applib.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Indicates that a property or parameter is not mandatory.
- * 
- * <p>
- * Isis' default is that properties/parameters are mandatory unless otherwise
- * annotated as optional; this is most typically done using this annotation.
- * 
- *
- * @deprecated - use {@link Property#optionality()} and {@link Parameter#optionality()}  (with {@link Optionality#OPTIONAL}) instead.
- */
-@Deprecated
-@Inherited
-@Target({ ElementType.METHOD, ElementType.PARAMETER })
-@Retention(RetentionPolicy.RUNTIME)
-public @interface Optional {
-
-}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
index 756bb34..a876261 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/command/Command.java
@@ -18,11 +18,12 @@ package org.apache.isis.applib.services.command;
 
 import java.sql.Timestamp;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.CommandExecuteIn;
 import org.apache.isis.applib.annotation.CommandPersistence;
-import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.services.HasTransactionId;
@@ -342,7 +343,7 @@ public interface Command extends HasTransactionId {
      * @deprecated - see {@link Interaction#getCurrentExecution()} and  {@link org.apache.isis.applib.services.iactn.Interaction.Execution#getThrew()} instead.
      */
     @Deprecated
-    @Optional
+    @Nullable
     String getException();
 
     /**
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
index 8dbf9a7..6105075 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterAnnotationFacetFactory.java
@@ -24,11 +24,9 @@ import java.lang.reflect.Method;
 
 import javax.annotation.Nullable;
 
-import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.core.commons.config.IsisConfiguration;
-import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetUtil;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
 import org.apache.isis.core.metamodel.facetapi.MetaModelValidatorRefiner;
@@ -41,7 +39,6 @@ import org.apache.isis.core.metamodel.facets.objectvalue.regex.TitleFacetFormatt
 import org.apache.isis.core.metamodel.facets.param.parameter.fileaccept.FileAcceptFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter;
-import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByOptionalAnnotationOnParameter;
 import org.apache.isis.core.metamodel.facets.param.parameter.maxlen.MaxLengthFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.mustsatisfy.MustSatisfySpecificationFacetForParameterAnnotation;
 import org.apache.isis.core.metamodel.facets.param.parameter.regex.RegExFacetForParameterAnnotation;
@@ -54,7 +51,6 @@ import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorFor
 public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
 
     private final MetaModelValidatorForDeprecatedAnnotation regexValidator = new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
-    private final MetaModelValidatorForDeprecatedAnnotation optionalValidator = new MetaModelValidatorForDeprecatedAnnotation(Optional.class);
     private final MetaModelValidatorForConflictingOptionality conflictingOptionalityValidator = new MetaModelValidatorForConflictingOptionality();
 
     public ParameterAnnotationFacetFactory() {
@@ -158,16 +154,6 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
 
         for (final Annotation parameterAnnotation : parameterAnnotations) {
             final Class<?> parameterType = parameterTypes[paramNum];
-            if (parameterAnnotation instanceof Optional) {
-                final Optional annotation = (Optional) parameterAnnotation;
-                FacetUtil.addFacet(optionalValidator.flagIfPresent(
-                        MandatoryFacetInvertedByOptionalAnnotationOnParameter.create(
-                                annotation, parameterType, holder), processParameterContext));
-            }
-        }
-
-        for (final Annotation parameterAnnotation : parameterAnnotations) {
-            final Class<?> parameterType = parameterTypes[paramNum];
             if (parameterAnnotation instanceof javax.annotation.Nullable) {
                 final Nullable annotation = (Nullable) parameterAnnotation;
                 final MandatoryFacet facet =
@@ -212,7 +198,6 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
     @Override
     public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
         metaModelValidator.add(regexValidator);
-        metaModelValidator.add(optionalValidator);
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
@@ -221,7 +206,6 @@ public class ParameterAnnotationFacetFactory extends FacetFactoryAbstract implem
         super.setServicesInjector(servicesInjector);
         IsisConfiguration configuration = servicesInjector.getConfigurationServiceInternal();
         regexValidator.setConfiguration(configuration);
-        optionalValidator.setConfiguration(configuration);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnParameter.java
deleted file mode 100644
index 4aaadfa..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/param/parameter/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnParameter.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.param.parameter.mandatory;
-
-import org.apache.isis.applib.annotation.Optional;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetAbstract;
-
-/**
- * Derived by presence of an <tt>@Optional</tt> method.
- * 
- * <p>
- * This implementation indicates that the {@link FacetHolder} is <i>not</i>
- * mandatory, as per {@link #isInvertedSemantics()}.
- *
- * @deprecated
- */
-@Deprecated
-public class MandatoryFacetInvertedByOptionalAnnotationOnParameter extends MandatoryFacetAbstract {
-
-
-    public static Facet create(final Optional annotation, final Class<?> parameterType, final FacetedMethodParameter holder) {
-        if(annotation == null) {
-            return null;
-        }
-        if(parameterType.isPrimitive()) {
-            return null;
-        }
-        return new MandatoryFacetInvertedByOptionalAnnotationOnParameter(holder);
-    }
-
-    private MandatoryFacetInvertedByOptionalAnnotationOnParameter(final FacetHolder holder) {
-        super(holder, Semantics.OPTIONAL);
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
index 2e51522..5fd35fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyAnnotationFacetFactory.java
@@ -23,7 +23,6 @@ import java.lang.reflect.Method;
 
 import javax.annotation.Nullable;
 
-import org.apache.isis.applib.annotation.Optional;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.RegEx;
 import org.apache.isis.applib.services.HasTransactionId;
@@ -53,7 +52,6 @@ import org.apache.isis.core.metamodel.facets.properties.property.fileaccept.File
 import org.apache.isis.core.metamodel.facets.properties.property.hidden.HiddenFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty;
-import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByOptionalAnnotationOnProperty;
 import org.apache.isis.core.metamodel.facets.properties.property.maxlength.MaxLengthFacetForPropertyAnnotation;
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromDefault;
 import org.apache.isis.core.metamodel.facets.properties.property.modify.PropertyClearFacetForDomainEventFromPropertyAnnotation;
@@ -79,7 +77,6 @@ import org.apache.isis.core.metamodel.util.EventUtil;
 public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
 
     private final MetaModelValidatorForDeprecatedAnnotation regexValidator = new MetaModelValidatorForDeprecatedAnnotation(RegEx.class);
-    private final MetaModelValidatorForDeprecatedAnnotation optionalValidator = new MetaModelValidatorForDeprecatedAnnotation(Optional.class);
     private final MetaModelValidatorForConflictingOptionality conflictingOptionalityValidator = new MetaModelValidatorForConflictingOptionality();
 
 
@@ -297,15 +294,7 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
 
         final FacetHolder holder = processMethodContext.getFacetHolder();
 
-        // check for deprecated @Optional
-        final Optional optionalAnnotation = Annotations.getAnnotation(method, Optional.class);
-        FacetUtil.addFacet(
-                optionalValidator.flagIfPresent(
-                    MandatoryFacetInvertedByOptionalAnnotationOnProperty.create(optionalAnnotation, method, holder),
-                    processMethodContext));
-
         // check for @Nullable
-        final MandatoryFacet facet;
         final Nullable nullableAnnotation = Annotations.getAnnotation(method, Nullable.class);
         final MandatoryFacet facet2 =
                 MandatoryFacetInvertedByNullableAnnotationOnProperty.create(nullableAnnotation, method, holder);
@@ -364,7 +353,6 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
     @Override
     public void refineMetaModelValidator(final MetaModelValidatorComposite metaModelValidator, final IsisConfiguration configuration) {
         metaModelValidator.add(regexValidator);
-        metaModelValidator.add(optionalValidator);
         metaModelValidator.add(conflictingOptionalityValidator);
     }
 
@@ -377,7 +365,6 @@ public class PropertyAnnotationFacetFactory extends FacetFactoryAbstract impleme
         super.setServicesInjector(servicesInjector);
         IsisConfiguration configuration = servicesInjector.getConfigurationServiceInternal();
         regexValidator.setConfiguration(configuration);
-        optionalValidator.setConfiguration(configuration);
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
deleted file mode 100644
index 23de2e5..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/properties/property/mandatory/MandatoryFacetInvertedByOptionalAnnotationOnProperty.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-package org.apache.isis.core.metamodel.facets.properties.property.mandatory;
-
-import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.Optional;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacetAbstract;
-
-/**
- * Derived by presence of an <tt>@Optional</tt> annotation.
- * 
- * <p>
- * This implementation indicates that the {@link FacetHolder} is <i>not</i>
- * mandatory, as per {@link #isInvertedSemantics()}.
- *
- * @deprecated
- */
-@Deprecated
-public class MandatoryFacetInvertedByOptionalAnnotationOnProperty extends MandatoryFacetAbstract {
-
-    public MandatoryFacetInvertedByOptionalAnnotationOnProperty(final FacetHolder holder) {
-        super(holder, Semantics.OPTIONAL);
-    }
-
-    public static MandatoryFacet create(final Optional annotation, Method method, final FacetHolder holder) {
-
-        if(annotation == null) {
-            return null;
-        }
-
-        final Class<?> returnType = method.getReturnType();
-        if (returnType.isPrimitive()) {
-            return null;
-        }
-        return new MandatoryFacetInvertedByOptionalAnnotationOnProperty(holder);
-    }
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/OptionalAnnotationOnParameterFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java
similarity index 52%
rename from core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/OptionalAnnotationOnParameterFacetFactoryTest.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java
index c83d358..c3a4c38 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/OptionalAnnotationOnParameterFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/param/parameter/ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest.java
@@ -20,14 +20,19 @@
 package org.apache.isis.core.metamodel.facets.param.parameter;
 
 import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.Optional;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessParameterContext;
-import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByOptionalAnnotationOnParameter;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetForParameterAnnotation;
+import org.apache.isis.core.metamodel.facets.param.parameter.mandatory.MandatoryFacetInvertedByNullableAnnotationOnParameter;
 
-public class OptionalAnnotationOnParameterFacetFactoryTest extends AbstractFacetFactoryTest {
+public class ParameterOptionalityOrNullableAnnotationOnParameterFacetFactoryTest extends AbstractFacetFactoryTest {
 
     private ParameterAnnotationFacetFactory facetFactory;
 
@@ -35,11 +40,43 @@ public class OptionalAnnotationOnParameterFacetFactoryTest extends AbstractFacet
         super.setUp();
         facetFactory = new ParameterAnnotationFacetFactory();
     }
-    public void testOptionalAnnotationPickedUpOnActionParameter() {
+
+    public void testParameterAnnotationWithOptionalityPickedUpOnActionParameter() {
+
+        class Customer {
+            @SuppressWarnings("unused")
+            public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final String foo) {
+            }
+        }
+        final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class });
+
+        facetFactory.processParamsOptional(new ProcessParameterContext(Customer.class, method, 0, null, facetedMethodParameter));
+
+        final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof MandatoryFacetForParameterAnnotation.Optional);
+    }
+
+    public void testParameterAnnotationWithOptionalityIgnoredForPrimitiveOnActionParameter() {
+
+        class Customer {
+            @SuppressWarnings("unused")
+            public void someAction(@Parameter(optionality = Optionality.OPTIONAL) final int foo) {
+            }
+        }
+        final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class });
+
+        facetFactory.processParamsOptional(new ProcessParameterContext(Customer.class, method, 0, null, facetedMethodParameter));
+
+        assertNull(facetedMethod.getFacet(MandatoryFacet.class));
+    }
+
+
+    public void testNullableAnnotationPickedUpOnActionParameter() {
 
         class Customer {
             @SuppressWarnings("unused")
-            public void someAction(@Optional final String foo) {
+            public void someAction(@Nullable final String foo) {
             }
         }
         final Method method = findMethod(Customer.class, "someAction", new Class[] { String.class });
@@ -48,14 +85,14 @@ public class OptionalAnnotationOnParameterFacetFactoryTest extends AbstractFacet
 
         final Facet facet = facetedMethodParameter.getFacet(MandatoryFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof MandatoryFacetInvertedByOptionalAnnotationOnParameter);
+        assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnParameter);
     }
 
-    public void testOptionalAnnotationIgnoredForPrimitiveOnActionParameter() {
+    public void testNullableAnnotationIgnoredForPrimitiveOnActionParameter() {
 
         class Customer {
             @SuppressWarnings("unused")
-            public void someAction(@Optional final int foo) {
+            public void someAction(@Nullable final int foo) {
             }
         }
         final Method method = findMethod(Customer.class, "someAction", new Class[] { int.class });
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/OptionalAnnotationOnPropertyFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java
similarity index 55%
rename from core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/OptionalAnnotationOnPropertyFacetFactoryTest.java
rename to core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java
index 150bf2f..bc7f36b 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/OptionalAnnotationOnPropertyFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/properties/property/PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest.java
@@ -20,14 +20,19 @@
 package org.apache.isis.core.metamodel.facets.properties.property;
 
 import java.lang.reflect.Method;
-import org.apache.isis.applib.annotation.Optional;
+
+import javax.annotation.Nullable;
+
+import org.apache.isis.applib.annotation.Optionality;
+import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facets.AbstractFacetFactoryTest;
 import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessMethodContext;
-import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByOptionalAnnotationOnProperty;
 import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetForPropertyAnnotation;
+import org.apache.isis.core.metamodel.facets.properties.property.mandatory.MandatoryFacetInvertedByNullableAnnotationOnProperty;
 
-public class OptionalAnnotationOnPropertyFacetFactoryTest extends AbstractFacetFactoryTest {
+public class PropertyOptionalityOrNullableAnnotationOnPropertyFacetFactoryTest extends AbstractFacetFactoryTest {
 
     private PropertyAnnotationFacetFactory facetFactory;
 
@@ -36,10 +41,43 @@ public class OptionalAnnotationOnPropertyFacetFactoryTest extends AbstractFacetF
         facetFactory = new PropertyAnnotationFacetFactory();
     }
 
-    public void testOptionalAnnotationPickedUpOnProperty() {
+    public void testPropertyAnnotationWithOptionalityPickedUpOnProperty() {
+
+        class Customer {
+            @Property(optionality = Optionality.OPTIONAL)
+            public String getFirstName() {
+                return null;
+            }
+        }
+        final Method method = findMethod(Customer.class, "getFirstName");
+
+        facetFactory.processOptional(new ProcessMethodContext(Customer.class, null, method, methodRemover, facetedMethod));
+
+        final Facet facet = facetedMethod.getFacet(MandatoryFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof MandatoryFacetForPropertyAnnotation.Optional);
+    }
+
+    public void testPropertyAnnotationIgnoredForPrimitiveOnProperty() {
+
+        class Customer {
+            @SuppressWarnings("unused")
+            @Property(optionality = Optionality.OPTIONAL)
+            public int getNumberOfOrders() {
+                return 0;
+            }
+        }
+        final Method method = findMethod(Customer.class, "getNumberOfOrders");
+
+        facetFactory.processOptional(new ProcessMethodContext(Customer.class, null, method, methodRemover, facetedMethod));
+
+        assertNotNull(facetedMethod.getFacet(MandatoryFacet.class));
+    }
+
+    public void testNullableAnnotationPickedUpOnProperty() {
 
         class Customer {
-            @Optional
+            @Nullable
             public String getFirstName() {
                 return null;
             }
@@ -50,14 +88,14 @@ public class OptionalAnnotationOnPropertyFacetFactoryTest extends AbstractFacetF
 
         final Facet facet = facetedMethod.getFacet(MandatoryFacet.class);
         assertNotNull(facet);
-        assertTrue(facet instanceof MandatoryFacetInvertedByOptionalAnnotationOnProperty);
+        assertTrue(facet instanceof MandatoryFacetInvertedByNullableAnnotationOnProperty);
     }
 
-    public void testOptionalAnnotationIgnoredForPrimitiveOnProperty() {
+    public void testNullableAnnotationIgnoredForPrimitiveOnProperty() {
 
         class Customer {
             @SuppressWarnings("unused")
-            @Optional
+            @Nullable
             public int getNumberOfOrders() {
                 return 0;
             }

-- 
To stop receiving notification emails like this one, please contact
['"commits@isis.apache.org" <co...@isis.apache.org>'].