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

danhaywood pushed a commit to branch CAUSEWAY-2485
in repository https://gitbox.apache.org/repos/asf/causeway.git

commit 4c948af638fbb15594872402a26f2a9081f453a4
Author: danhaywood <[email protected]>
AuthorDate: Tue Apr 11 09:18:10 2023 +0100

    CAUSEWAY-2485: simplifies @Action#semantics
---
 .../hidden/ActionHiddenPage-description.adoc       |   2 +-
 .../semantics/ActionSemanticsPage-description.adoc | 189 ++++-----------------
 .../Action/semantics/ActionSemanticsPage.java      | 139 ++-------------
 .../semantics/ActionSemanticsPage.layout.xml       |  36 +++-
 ...csPage_mixinIncrementByAmountNonIdempotent.java |  54 ------
 ...onSemanticsPage_mixinIncrementNoAnnotation.java |  51 ------
 ...nSemanticsPage_mixinIncrementNonIdempotent.java |  50 ------
 ...Page_mixinIncrementNonIdempotentAreYouSure.java |  50 ------
 ...csPage_mixinReportPropertyForSemanticsSafe.java |  54 ------
 ...ge_mixinSetToValueForPropertyMetaAnnotated.java |  53 ------
 ...tToValueForPropertyMetaAnnotatedOverridden.java |  54 ------
 ...inSetToValueForPropertySemanticsIdempotent.java |  52 ------
 ...ueForPropertySemanticsIdempotentAreYouSure.java |  53 ------
 .../ActionSemanticsSafeMetaAnnotation.java         |  40 -----
 .../hidden/ActionLayoutHiddenPage-description.adoc |   2 +-
 .../hidden/PropertyHiddenPage-description.adoc     |   2 +-
 .../PropertyLayoutHiddenPage-description.adoc      |   2 +-
 17 files changed, 78 insertions(+), 805 deletions(-)

diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc
index fb61c4ad6a..cc61a05fc6 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/hidden/ActionHiddenPage-description.adoc
@@ -63,6 +63,6 @@ However, if you navigate into these domain objects then some 
of these actions wi
 ====
 Although there is no difference in the UI, a hidden action _is_ part of the 
metadamodel while a 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic]
 property is not.
 
-A rare (but valid) use case is to invoke such a hidden action using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory]
 (skipping rules).
+A rare (but valid) use case is to invoke such a hidden action using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory]
 (skipping rules).
 This can be for example to publish executions to any registered 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s.
 ====
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc
index 7b142280ef..cf7236fcc8 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage-description.adoc
@@ -1,86 +1,61 @@
 :Notice: 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 ag [...]
 
-The `semantics` element specifies whether invoking the action will change the 
state of the system, and if so, how:
+The 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Action.html#semantics[@Action#semantics]
 element specifies whether invoking the action will change the state of the 
system, and if so, how:
 
 * `SAFE` (sometimes also called "query-only") means no side-effects, that is, 
no permanent change in state of the system
+
 * `IDEMPOTENT` means that the state of the system will change, but invoking 
the action again (with the same arguments) will not change the state; in other 
words re-runnable
-* `NON_IDEMPOTENT` means that the state will change, and subsequent 
invocations will change the state again.
 
+* `NON_IDEMPOTENT` means that the state will change, and subsequent 
invocations will change the state again.
++
 If the action is not annotated, then non-idempotent is assumed.
 
 The REST API interprets these semantics by mapping to different HTTP verbs: 
GET, PUT and POST, respectively.
 
 Each of these three basic `semantics` element have a variant:
 
-* `SAFE_AND_REQUEST_CACHEABLE` means that the framework will automatically 
cache the result of a first invocation and use the `QueryResultsCache` to 
return the result subsequently.
+* `SAFE_AND_REQUEST_CACHEABLE` means that the framework will automatically 
cache the result of a first invocation and use the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/queryresultscache/QueryResultsCache.html[QueryResultsCache]
 to return the result subsequently.
 +
-Note this does require that the action is invoked "through" the framework, in 
other words using the `WrapperFactory`.
+Note this does require that the action is invoked "through" the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory].
 
 * `IDEMPOTENT_ARE_YOU_SURE` will cause the viewer to display an "are you sure" 
prompt so that the end-user can choose to not invoke the action after all
 
 * `NON_IDEMPOTENT_ARE_YOU_SURE` similarly displays an "are you sure" prompt, 
but for non-idempotent actions.
 
+=== How this demo works
 
-The demo project uses this view model:
-
-[source,java]
-----
-include::ActionSemanticsPage.java[tags=class]
-----
+This page provides actions with different semantics.
 
-== No annotations
+==== No annotations
 
 If the `semantics` element is omitted completely, then the action is assumed 
to be non-idempotent:
 
-* on a regular action, `incrementByAmountNoAnnotation`:
-+
 [source,java,indent=0]
 ----
 include::ActionSemanticsPage.java[tags=action-no-annotation]
 ----
-<.> does not indicate any `semantic` element; non-idempotent is assumed
-
-* on a mixin action, `mixinIncrementNoAnnotation`:
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinIncrementNoAnnotation.java[tags=class]
-----
-<.> does not indicate any `semantics` element; non-idempotent is assumed
+<.> does not indicate any `semantic` element, and so non-idempotent is assumed
 
+==== Annotated as Safe
 
-== Annotated as Safe
-
-The `semantics` element can be specified explicitly using the `@Action` 
annotation.
-One option is with safe semantics, meaning the action has no side-effects; it 
does not change the state of the system.
+An action with safe semantics means that there are bi side-effects; it does 
not change the state of the system.
 This is also sometimes called _query-only_.
 
-[IMPORTANT]
-====
-The framework does not verify or ensure that the action results in no 
side-effects; the annotation is taken "on trust".
-====
-
 Safe actions are called using HTTP GET when invoked through the Restful 
Objects' REST API.
 
-Both regular and mixin actions can be annotated:
-
-* on regular actions; the `reportPropertyForSafe` action is annotated as 
having safe semantics:
-+
 [source,java,indent=0]
 ----
 include::ActionSemanticsPage.java[tags=action-semantics-safe]
 ----
 <.> safe semantics, meaning invoking the action results in no permanent change 
of state
 
-* on mixin actions; `mixinReportPropertyForSafe` is annotated with safe 
semantics
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinReportPropertyForSemanticsSafe.java[tags=class]
-----
-<.> safe semantics, meaning that invoking the action results in no permanent 
change of state
+[IMPORTANT]
+====
+The framework does not verify or ensure that the action results in no 
side-effects; the annotation is taken "on trust".
+====
+
 
-=== Safe and Request Cacheable
+===== Safe and Request Cacheable
 
 Since invoking a safe query-only action will often return the same result (at 
least for some short period of time), the framework also provides a variant 
that will automatically cache the result for the duration of the interaction 
(HTTP request).
 
@@ -108,7 +83,7 @@ 
include::ActionSemanticsPage.java[tags=action-semantics-safe-and-request-cacheab
 
 In this case the called action should indicate it was only executed once.
 
-== Annotated as Idempotent
+==== Annotated as Idempotent
 
 Annotating an action as idempotent means that it will change the state of the 
system, but invoking more than once will not change the state of the system 
further.
 
@@ -124,152 +99,54 @@ 
include::ActionSemanticsPage.java[tags=action-semantics-idempotent]
 ----
 <.> idempotent semantics
 
-* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is 
annotated with idempotent sematics
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotent.java[tags=class]
-----
-<.> idempotent semantics
-
-
-=== Are you sure?
+===== Idempotent, are you sure?
 
 Because an idempotent action will change the state of the system, the 
framework offers a variant that will cause the viewer to render an "are you 
sure?" pop-up.
 
-Both regular and mixin actions can be annotated:
-
-* on regular actions; the `setToValuePropertyForIdempotentAreYouSure` action 
is annotated as having idempotent "are you sure" semantics:
-+
 [source,java,indent=0]
 ----
 
include::ActionSemanticsPage.java[tags=action-semantics-idempotent-are-you-sure]
 ----
 <.> idempotent semantics, with "are you sure" prompt
 
-* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is 
annotated with idempotent "are you sure" semantics
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java[tags=class]
-----
-<.> idempotent semantics, with "are you sure" prompt
-
 
-== Annotated as Not Idempotent
+==== Annotated as Not Idempotent
 
 Annotating an action as non-idempotent means that it will change the state of 
the system, and invoking more than once will change the state of the system 
further.
 
-If an action is not annotated with the `semantics` element, it is considered 
to be non-idempotent.
-
 Non-idempotent actions are called using HTTP POST when invoked through the 
Restful Objects' REST API.
 
-
-Both regular and mixin actions can be annotated:
-
-* on regular actions; the `incrementByAmountPropertyForNonIdempotent` action 
is annotated as having non-idempotent semantics:
-+
 [source,java,indent=0]
 ----
 include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent]
 ----
 <.> non-idempotent semantics
 
-* on mixin actions; `mixinSetToValueForPropertySemanticsIdempotent` is 
annotated with non-idempotent semantics
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinIncrementByAmountNonIdempotent.java[tags=class]
-----
-<.> non-idempotent semantics
-
 
-=== Are you sure ?
+===== Not idempotent, are you sure ?
 
-Because an non-idempotent action will change the state of the system, the 
framework offers a variant that will cause the viewer to render an "are you 
sure?" pop-up.
+Because a non-idempotent action will change the state of the system, the 
framework offers a variant that will cause the viewer to render an "are you 
sure?" pop-up.
 
-Both regular and mixin actions can be annotated:
+There are two example actions, one of which takes no parameters, the other of 
which takes a parameter.
+This demonstrates that the pop-up appears at different points:
 
-* on regular actions; the 
`incrementByAmountPropertyForNonIdempotentAreYouSure` action is annotated as 
having non-idempotent "are you sure" semantics:
+* with no parameters.
 +
-[source,java,indent=0]
-----
-include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure]
-----
-<.> non-idempotent semantics, with "are you sure" prompt
-
-* on mixin actions; `mixinIncrementNonIdempotentAreYouSure` is annotated with 
non-idempotent "are you sure" semantics
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinIncrementNonIdempotentAreYouSure.java[tags=class]
-----
-<.> non-idempotent semantics, with "are you sure" prompt
+The pop-up appears when the action's button is pressed.
 +
-NOTE: Because this action takes no parameters, then the pop-up will be 
triggered for the action button itself (rather than the OK button of the action 
prompt form).
-
-== Meta-annotated
-
-The `semantics` element can also specified through a meta-annotation.
-For example:
-
 [source,java,indent=0]
 ----
-include::ActionSemanticsIdempotentMetaAnnotation.java[tags=class]
+include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure-1]
 ----
-<.> indicates idempotent semantics
-<.> apply either to a regular action or a mixin type
-
-For example:
-
-* on regular actions; the `updateMetaAnnotated` action is meta-annotated to 
only be available in prototype mode:
-+
-[source,java,indent=0]
-----
-include::ActionSemanticsPage.java[tags=action-meta-annotated]
-----
-<.> indicates idempotent semantics
+<.> non-idempotent semantics, with "are you sure" prompt
 
-* on mixin actions; `mixinSetToValueForPropertyMetaAnnotated` is 
meta-annotated to indicate it has idempotent semantics:
+* with a parameters
 +
-[source,java]
-----
-include::ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotated.java[tags=class]
-----
-<.> indicates idempotent semantics
-
-
-== Meta-annotated Overridden
-
-While the `semantics` element can be specified on a meta-annotation, it can 
still be overridden more locally.
-
-Here we have the meta-annotation:
-
-[source,java]
-----
-include::ActionSemanticsSafeMetaAnnotation.java[tags=class]
-----
-
-This element can be overridden:
-
-* for regular actions, `setToValueMetaAnnotatedOverridden`:
+The pop-up appears when the OK button on the action's prompt is pressed.
 +
 [source,java,indent=0]
 ----
-include::ActionSemanticsPage.java[tags=action-meta-annotated-overridden]
+include::ActionSemanticsPage.java[tags=action-semantics-non-idempotent-are-you-sure-2]
 ----
-<.> meta-annotation indicates safe semantics
-<.> overrides to indicate instead idempotent semantics
-
-* on mixin actions, `mixinSetToValueForPropertyMetaAnnotatedOverridden`:
-+
-[source,java]
-----
-include::ActionSemanticsVm_mixinSetToValueForPropertyMetaAnnotatedOverridden.java[tags=class]
-----
-<.> meta-annotation indicates safe semantics
-<.> overrides to indicate instead idempotent semantics
-
-The attribute can also be set to `NOT_SPECIFIED`.
-This is useful to allow inheritance of the semantic from a meta-annotation.
+<.> non-idempotent semantics, with "are you sure" prompt
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java
index 16d92dccd5..398b650bb4 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.java
@@ -51,8 +51,7 @@ import lombok.Setter;
 @XmlType
 @XmlAccessorType(XmlAccessType.FIELD)
 @Named("demo.ActionSemanticsVm")
-@DomainObject(
-    nature=Nature.VIEW_MODEL)
+@DomainObject(nature=Nature.VIEW_MODEL)
 @NoArgsConstructor
 //tag::class[]
 public class ActionSemanticsPage implements HasAsciiDocDescription {
@@ -73,8 +72,6 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
         this.propertyForIdempotentAreYouSure = value;
         this.propertyForNonIdempotent = value;
         this.propertyForNonIdempotentAreYouSure = value;
-        this.propertyForMetaAnnotations = value;
-        this.propertyForMetaAnnotationsOverridden = value;
     }
 
     @ObjectSupport public String title() {
@@ -82,38 +79,31 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     }
 
     @Property()
-    @PropertyLayout(fieldSetId = "not-annotated", sequence = "1")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyNoAnnotation;
 
     @Property()
-    @PropertyLayout(fieldSetId = "annotated-safe", sequence = "1")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyForSafe;
 
     @Property()
-    @PropertyLayout(fieldSetId = "annotated-safe", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyForSafeAndRequestCacheable;
 
-
     @Property()
-    @PropertyLayout(fieldSetId = "annotated-idempotent", sequence = "1")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyForIdempotent;
 
     @Property()
-    @PropertyLayout(fieldSetId = "annotated-idempotent", sequence = "2")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyForIdempotentAreYouSure;
 
     @Property()
-    @PropertyLayout(fieldSetId = "annotated-non-idempotent", sequence = "5")
     @XmlElement(required = true)
     @Getter @Setter
     private int propertyForNonIdempotent;
@@ -124,28 +114,8 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Getter @Setter
     private int propertyForNonIdempotentAreYouSure;
 
-    @Property()
-    @PropertyLayout(fieldSetId = "meta-annotated", sequence = "1")
-    @XmlElement(required = true)
-    @Getter @Setter
-    private int propertyForMetaAnnotations;
-
-    @Property()
-    @PropertyLayout(fieldSetId = "meta-annotated-overridden", sequence = "1")
-    @XmlElement(required = true)
-    @Getter @Setter
-    private int propertyForMetaAnnotationsOverridden;
-
 //tag::action-no-annotation[]
-    @Action(
-        // no semantics attribute              // <.>
-    )
-    @ActionLayout(
-        named = "Increment by Amount",
-        describedAs = "@Action()"
-        , associateWith = "propertyNoAnnotation"
-        , sequence = "1"
-    )
+    @Action()                                   // <.>
     public ActionSemanticsPage incrementByAmountNoAnnotation(final int amount) 
{
         setPropertyNoAnnotation(getPropertyNoAnnotation() + amount);
         return this;
@@ -159,13 +129,6 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Action(
         semantics = SemanticsOf.SAFE            // <.>
     )
-    @ActionLayout(
-        named = "Report",
-        describedAs =
-            "@Action(semantics = SemanticsOf.SAFE)"
-        , associateWith = "propertyForSafe"
-        , sequence = "1"
-    )
     public ActionSemanticsPage reportPropertyForSafe() {
         messageService.informUser(String.format(
                 "'PropertyForSafe' has value %d "
@@ -178,12 +141,6 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Action(
         semantics = SemanticsOf.SAFE
     )
-    @ActionLayout(
-        named = "Report"
-        , describedAs = "@Action(semantics = SemanticsOf.SAFE)"
-        , associateWith = "propertyForSafeAndRequestCacheable"
-        , sequence = "1"
-    )
     public ActionSemanticsPage reportPropertyForSafeAndRequestCacheable() {
         int val = 0;
         for (int i=0; i<5; i++) {                                              
     // <.>
@@ -214,17 +171,11 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Action(
         semantics = SemanticsOf.IDEMPOTENT              // <.>
     )
-    @ActionLayout(
-        named = "Set to Value"
-        , describedAs = "@Action(semantics = SemanticsOf.IDEMPOTENT)"
-        , associateWith = "propertyForIdempotent"
-        , sequence = "1"
-    )
-    public ActionSemanticsPage setToValuePropertyForIdempotent(final int 
value) {
+    public ActionSemanticsPage updatePropertyForIdempotent(final int value) {
         setPropertyForIdempotent(value);
         return this;
     }
-    @MemberSupport public int default0SetToValuePropertyForIdempotent() {
+    @MemberSupport public int default0UpdatePropertyForIdempotent() {
         return getPropertyForIdempotent();
     }
 //end::action-semantics-idempotent[]
@@ -233,17 +184,11 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Action(
         semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE              // <.>
     )
-    @ActionLayout(
-        named = "Set to Value",
-        describedAs = "@Action(semantics = 
SemanticsOf.IDEMPOTENT_ARE_YOU_SURE)"
-        , associateWith = "propertyForIdempotent"
-        , sequence = "1"
-    )
-    public ActionSemanticsPage setToValuePropertyForIdempotentAreYouSure(final 
int value) {
+    public ActionSemanticsPage updatePropertyForIdempotentAreYouSure(final int 
value) {
         setPropertyForIdempotentAreYouSure(value);
         return this;
     }
-    @MemberSupport public int 
default0SetToValuePropertyForIdempotentAreYouSure() {
+    @MemberSupport public int default0UpdatePropertyForIdempotentAreYouSure() {
         return getPropertyForIdempotentAreYouSure();
     }
 //end::action-semantics-idempotent-are-you-sure[]
@@ -252,13 +197,6 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     @Action(
         semantics = SemanticsOf.NON_IDEMPOTENT      // <.>
     )
-    @ActionLayout(
-        named = "Increment by Amount"
-        , describedAs =
-            "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)"
-        , associateWith = "propertyForNonIdempotent"
-        , sequence = "1"
-    )
     public ActionSemanticsPage incrementByAmountPropertyForNonIdempotent(final 
int amount) {
         setPropertyForNonIdempotent(getPropertyForNonIdempotent() + amount);
         return this;
@@ -268,84 +206,29 @@ public class ActionSemanticsPage implements 
HasAsciiDocDescription {
     }
 //end::action-semantics-non-idempotent[]
 
-//tag::action-semantics-non-idempotent-are-you-sure[]
+//tag::action-semantics-non-idempotent-are-you-sure-1[]
     @Action(
         semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE     // <.>
     )
-    @ActionLayout(
-        named = "Increment"
-        , describedAs =
-            "@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)"
-        , associateWith = "propertyForNonIdempotentAreYouSure"
-        , sequence = "1"
-    )
     public ActionSemanticsPage incrementPropertyForNonIdempotentAreYouSure() {
         setPropertyForNonIdempotentAreYouSure(
                 getPropertyForNonIdempotentAreYouSure() + 1);
         return this;
     }
+//end::action-semantics-non-idempotent-are-you-sure-1[]
 
+//tag::action-semantics-non-idempotent-are-you-sure-2[]
     @Action(
         semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE     // <.>
     )
-    @ActionLayout(
-        named = "Increment by Amount"
-        , describedAs =
-            "@Action(semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)"
-        , associateWith = "propertyForNonIdempotentAreYouSure"
-        , sequence = "2"
-    )
     public ActionSemanticsPage 
incrementByAmountPropertyForNonIdempotentAreYouSure(final int amount) {
         
setPropertyForNonIdempotentAreYouSure(getPropertyForNonIdempotentAreYouSure() + 
amount);
         return this;
     }
     @MemberSupport public int 
default0IncrementByAmountPropertyForNonIdempotentAreYouSure() {
-        return 1;
-    }
-//end::action-semantics-non-idempotent-are-you-sure[]
-
-//tag::action-meta-annotated[]
-    @ActionSemanticsIdempotentMetaAnnotation      // <.>
-    @Action(
-        semantics = SemanticsOf.IDEMPOTENT
-    )
-    @ActionLayout(
-        named = "Set to Value"
-        , describedAs =
-            "@ActionSemanticsIdempotentMetaAnnotation"
-        , associateWith = "propertyForMetaAnnotations"
-        , sequence = "1"
-    )
-    public ActionSemanticsPage setToValueMetaAnnotated(final int value) {
-        setPropertyForMetaAnnotations(value);
-        return this;
-    }
-    @MemberSupport public int default0SetToValueMetaAnnotated() {
-        return getPropertyForMetaAnnotations();
-    }
-//end::action-meta-annotated[]
-
-//tag::action-meta-annotated-overridden[]
-    @ActionSemanticsSafeMetaAnnotation              // <.>
-    @Action(
-        semantics = SemanticsOf.IDEMPOTENT      // <.>
-    )
-    @ActionLayout(
-        named = "Set to Value"
-        , describedAs =
-            "@ActionSemanticsSafeMetaAnnotation " +
-            "@Action(semantics = SemanticsOf.IDEMPOTENT)"
-        , associateWith = "propertyForMetaAnnotationsOverridden"
-        , sequence = "1"
-    )
-    public ActionSemanticsPage setToValueMetaAnnotatedOverridden(final int 
val) {
-        setPropertyForMetaAnnotationsOverridden(val);
-        return this;
-    }
-    @MemberSupport public int default0SetToValueMetaAnnotatedOverridden() {
-        return getPropertyForMetaAnnotationsOverridden();
+        return 5;
     }
-//end::action-meta-annotated-overridden[]
+//end::action-semantics-non-idempotent-are-you-sure-2[]
 
 //tag::class[]
 }
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml
index 998ba21705..bd2523608c 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage.layout.xml
@@ -28,12 +28,36 @@
                <bs3:col span="6">
                        <bs3:row>
                                <bs3:col span="12">
-                                       <cpt:fieldSet name="Not annotated" 
id="not-annotated"/>
-                                       <cpt:fieldSet name="Annotated as Safe" 
id="annotated-safe"/>
-                                       <cpt:fieldSet name="Annotated as 
Idempotent" id="annotated-idempotent"/>
-                                       <cpt:fieldSet name="Annotated as 
Non-Idempotent" id="annotated-non-idempotent"/>
-                                       <cpt:fieldSet name="Meta-annotated" 
id="meta-annotated"/>
-                                       <cpt:fieldSet name="Meta-annotated 
Overridden" id="meta-annotated-overridden"/>
+                                       <cpt:fieldSet name="Not annotated" 
id="not-annotated">
+                                               <cpt:property 
id="propertyNoAnnotation">
+                                                       <cpt:action 
id="incrementByAmountNoAnnotation"/>
+                                               </cpt:property>
+                                       </cpt:fieldSet>
+                                       <cpt:fieldSet name="Annotated as Safe" 
id="annotated-safe">
+                                               <cpt:property 
id="propertyForSafe">
+                                                       <cpt:action 
id="reportPropertyForSafe"/>
+                                               </cpt:property>
+                                               <cpt:property 
id="propertyForSafeAndRequestCacheable">
+                                                       <cpt:action 
id="reportPropertyForSafeAndRequestCacheable"/>
+                                               </cpt:property>
+                                       </cpt:fieldSet>
+                                       <cpt:fieldSet name="Annotated as 
Idempotent" id="annotated-idempotent">
+                                               <cpt:property 
id="propertyForIdempotent">
+                                                       <cpt:action 
id="updatePropertyForIdempotent"/>
+                                               </cpt:property>
+                                               <cpt:property 
id="propertyForIdempotentAreYouSure">
+                                                       <cpt:action 
id="updatePropertyForIdempotentAreYouSure"/>
+                                               </cpt:property>
+                                       </cpt:fieldSet>
+                                       <cpt:fieldSet name="Annotated as 
Non-Idempotent" id="annotated-non-idempotent">
+                                               <cpt:property 
id="propertyForNonIdempotent">
+                                                       <cpt:action 
id="incrementByAmountPropertyForNonIdempotent"/>
+                                               </cpt:property>
+                                               <cpt:property 
id="propertyForNonIdempotentAreYouSure">
+                                                       <cpt:action 
id="incrementPropertyForNonIdempotentAreYouSure"/>
+                                                       <cpt:action 
id="incrementByAmountPropertyForNonIdempotentAreYouSure"/>
+                                               </cpt:property>
+                                       </cpt:fieldSet>
                                        <cpt:fieldSet name="Other" id="other" 
unreferencedProperties="true"/>
                                </bs3:col>
                        </bs3:row>
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java
deleted file mode 100644
index 0aa48df41b..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementByAmountNonIdempotent.java
+++ /dev/null
@@ -1,54 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.NON_IDEMPOTENT  // <.>
-)
-@ActionLayout(
-    named = "Increment by Amount (Mixin)"
-    , describedAs = "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)"
-    , associateWith = "propertyForNonIdempotent"
-    , sequence = "4"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinIncrementByAmountNonIdempotent {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int incrementBy) {
-        page.setPropertyForNonIdempotent(
-                page.getPropertyForNonIdempotent() + incrementBy
-        );
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return 1;
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java
deleted file mode 100644
index 22af493564..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNoAnnotation.java
+++ /dev/null
@@ -1,51 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    // no semantics attribute              // <.>
-)
-@ActionLayout(
-    named = "Increment (Mixin)"
-    , describedAs = "@Action()"
-    , associateWith = "propertyNoAnnotation"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinIncrementNoAnnotation {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int incrementBy) {
-        page.setPropertyNoAnnotation(
-                page.getPropertyNoAnnotation() + incrementBy);
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return 1;
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java
deleted file mode 100644
index 79d20ac7f5..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotent.java
+++ /dev/null
@@ -1,50 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.NON_IDEMPOTENT  // <.>
-)
-@ActionLayout(
-    named = "Increment (Mixin)"
-    , describedAs = "@Action(semantics = SemanticsOf.NON_IDEMPOTENT)"
-    , associateWith = "propertyForNonIdempotent"
-    , sequence = "3"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinIncrementNonIdempotent {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act() {
-        page.setPropertyForNonIdempotent(
-                page.getPropertyForNonIdempotent() + 1
-        );
-        return page;
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java
deleted file mode 100644
index 0c0f0316ed..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure.java
+++ /dev/null
@@ -1,50 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE     // <.>
-)
-@ActionLayout(
-    named = "Increment (Mixin)"
-    , describedAs = "@Action(semantics = 
SemanticsOf.NON_IDEMPOTENT_ARE_YOU_SURE)"
-    , associateWith = "propertyForNonIdempotentAreYouSure"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinIncrementNonIdempotentAreYouSure {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act() {
-        page.setPropertyForNonIdempotentAreYouSure(
-                page.getPropertyForNonIdempotentAreYouSure() + 1
-        );
-        return page;
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java
deleted file mode 100644
index 8ae48b9c51..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinReportPropertyForSemanticsSafe.java
+++ /dev/null
@@ -1,54 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-import org.apache.causeway.applib.services.message.MessageService;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.SAFE            // <.>
-)
-@ActionLayout(
-    named = "Report (Mixin)"
-    , describedAs = "@Action(semantics = SemanticsOf.SAFE)"
-    , associateWith = "propertyForSafe"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinReportPropertyForSemanticsSafe {
-
-    private final ActionSemanticsPage page;
-
-    public ActionSemanticsPage act() {
-        int val = page.getPropertyForSafe();
-        messageService.informUser(String.format(
-                "'PropertyForSafe' has value %d ", val));
-        return page;
-    }
-
-    @Inject private MessageService messageService;
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java
deleted file mode 100644
index b7e82b6718..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated.java
+++ /dev/null
@@ -1,53 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@ActionSemanticsIdempotentMetaAnnotation  // <.>
-@Action(
-    semantics = SemanticsOf.SAFE
-
-)
-@ActionLayout(
-    named = "Set to Value (Mixin)"
-    , describedAs = "@ActionSemanticsIdempotentMetaAnnotation"
-    , associateWith = "propertyForMetaAnnotations"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotated {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int value) {
-        page.setPropertyForMetaAnnotations(value);
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return page.getPropertyForMetaAnnotations();
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
deleted file mode 100644
index 51afea8302..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden.java
+++ /dev/null
@@ -1,54 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@ActionSemanticsSafeMetaAnnotation                          // <.>
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT                      // <.>
-)
-@ActionLayout(
-    named = "Set to Value (Mixin)"
-    , describedAs =
-        "@ActionSemanticsSafeMetaAnnotation " +
-        "@Action(semantics = SemanticsOf.IDEMPOTENT)"
-    , associateWith = "propertyForMetaAnnotationsOverridden"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class 
ActionSemanticsPage_mixinSetToValueForPropertyMetaAnnotatedOverridden {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int value) {
-        page.setPropertyForMetaAnnotationsOverridden(value);
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return page.getPropertyForMetaAnnotationsOverridden();
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java
deleted file mode 100644
index ccd7750dee..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent.java
+++ /dev/null
@@ -1,52 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT            // <.>
-)
-@ActionLayout(
-    named = "Set to Value (Mixin)"
-    , describedAs =
-        "@Action(semantics = SemanticsOf.IDEMPOTENT)"
-    , associateWith = "propertyForIdempotent"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotent 
{
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int value) {
-        page.setPropertyForIdempotent(value);
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return page.getPropertyForIdempotent();
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
deleted file mode 100644
index 081a28cd59..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure.java
+++ /dev/null
@@ -1,53 +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 demoapp.dom.domain.actions.Action.semantics;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.ActionLayout;
-import org.apache.causeway.applib.annotation.MemberSupport;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-import lombok.RequiredArgsConstructor;
-
-//tag::class[]
-@Action(
-    semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE     // <.>
-
-)
-@ActionLayout(
-    named = "Set to Value (Mixin)"
-    , describedAs =
-        "@Action(semantics = SemanticsOf.IDEMPOTENT_ARE_YOU_SURE)"
-    , associateWith = "propertyForIdempotentAreYouSure"
-    , sequence = "2"
-)
-@RequiredArgsConstructor
-public class 
ActionSemanticsPage_mixinSetToValueForPropertySemanticsIdempotentAreYouSure {
-
-    private final ActionSemanticsPage page;
-
-    @MemberSupport public ActionSemanticsPage act(final int value) {
-        page.setPropertyForIdempotentAreYouSure(value);
-        return page;
-    }
-    @MemberSupport public int default0Act() {
-        return page.getPropertyForIdempotentAreYouSure();
-    }
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java
deleted file mode 100644
index 18fa6cfb57..0000000000
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/Action/semantics/ActionSemanticsSafeMetaAnnotation.java
+++ /dev/null
@@ -1,40 +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 demoapp.dom.domain.actions.Action.semantics;
-
-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;
-
-import org.apache.causeway.applib.annotation.Action;
-import org.apache.causeway.applib.annotation.SemanticsOf;
-
-//tag::class[]
-@Action(semantics = SemanticsOf.SAFE)           // <.>
-@Inherited
-@Target({
-        ElementType.TYPE, ElementType.METHOD    // <.>
-})
-@Retention(RetentionPolicy.RUNTIME)
-public @interface ActionSemanticsSafeMetaAnnotation {
-
-}
-//end::class[]
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc
index d273db9ec4..2f231f1199 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/actions/ActionLayout/hidden/ActionLayoutHiddenPage-description.adoc
@@ -63,6 +63,6 @@ However, if you navigate into these domain objects then some 
of these actions wi
 ====
 Although there is no difference in the UI, a hidden action _is_ part of the 
metadamodel while a 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic]
 property is not.
 
-A rare (but valid) use case is to invoke such a hidden action using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory]
 (skipping rules).
+A rare (but valid) use case is to invoke such a hidden action using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory]
 (skipping rules).
 This can be for example to publish executions to any registered 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s.
 ====
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc
index c6f4fca906..203662c738 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/Property/hidden/PropertyHiddenPage-description.adoc
@@ -51,7 +51,7 @@ If you navigate into these domain objects then different 
properties will be visb
 ====
 Although there is no difference in the UI, a hidden property _is_ part of the 
metadamodel while a 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic]
 property is not.
 
-A rare (but valid) use case is to invoke such a hidden property using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory]
 (skipping rules).
+A rare (but valid) use case is to invoke such a hidden property using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory]
 (skipping rules).
 This can be for example to publish executions to any registered 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s.
 ====
 
diff --git 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc
 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc
index 6eccbc5f73..5ff493a5b5 100644
--- 
a/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc
+++ 
b/examples/demo/domain/src/main/java/demoapp/dom/domain/properties/PropertyLayout/hidden/PropertyLayoutHiddenPage-description.adoc
@@ -51,7 +51,7 @@ If you navigate into these domain objects then different 
properties will be visb
 ====
 Although there is no difference in the UI, a hidden property _is_ part of the 
metadamodel while a 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/annotation/Programmatic.html#hidden[@Programmatic]
 property is not.
 
-A rare (but valid) use case is to invoke such a hidden property using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[@WrapperFactory]
 (skipping rules).
+A rare (but valid) use case is to invoke such a hidden property using the 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/wrapper/WrapperFactory.html#wrap(t,-synccontrol)[WrapperFactory]
 (skipping rules).
 This can be for example to publish executions to any registered 
link:https://causeway.apache.org/refguide/2.0.0-SNAPSHOT/applib/index/services/publishing/spi/ExecutionSubscriber.html[ExecutionSubscriber]s.
 ====
 

Reply via email to