diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Contracted.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Contracted.java index 06204f1ffc8..5eda698b91e 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Contracted.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Contracted.java @@ -35,6 +35,8 @@ * * import groovy.contracts.* * + * + * @since 4.0.0 */ @Documented @Target({ElementType.PACKAGE, ElementType.TYPE}) diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Ensures.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Ensures.java index 5ea65e790f7..d79144ca730 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Ensures.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Ensures.java @@ -21,7 +21,6 @@ import org.apache.groovy.contracts.annotations.meta.AnnotationProcessorImplementation; import org.apache.groovy.contracts.annotations.meta.Postcondition; import org.apache.groovy.contracts.common.impl.EnsuresAnnotationProcessor; -import org.apache.groovy.lang.annotation.Incubating; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -77,11 +76,12 @@ * } * *
+ * + * @since 4.0.0 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) -@Incubating @Postcondition @Repeatable(EnsuresConditions.class) @AnnotationProcessorImplementation(EnsuresAnnotationProcessor.class) diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/EnsuresConditions.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/EnsuresConditions.java index b89d8cebe28..a46c94f60b1 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/EnsuresConditions.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/EnsuresConditions.java @@ -18,8 +18,6 @@ */ package groovy.contracts; -import org.apache.groovy.lang.annotation.Incubating; - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -27,12 +25,16 @@ import java.lang.annotation.Target; /** - * Represents multiple postconditions. + * Container annotation for multiple {@link Ensures} postconditions on the same target. + * Synthesized by the compiler from stacked {@code @Ensures} annotations via + * {@link java.lang.annotation.Repeatable}; not normally written by hand. + * + * @since 5.0.0 + * @see Ensures */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) -@Incubating public @interface EnsuresConditions { /** * Returns the repeated postcondition annotations declared on the target element. diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariant.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariant.java index 96760e920fa..c89bc4c8132 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariant.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariant.java @@ -23,7 +23,6 @@ import org.apache.groovy.contracts.annotations.meta.AnnotationProcessorImplementation; import org.apache.groovy.contracts.annotations.meta.ClassInvariant; import org.apache.groovy.contracts.common.impl.ClassInvariantAnnotationProcessor; -import org.apache.groovy.lang.annotation.Incubating; import org.codehaus.groovy.transform.GroovyASTTransformationClass; import java.lang.annotation.Documented; @@ -61,11 +60,12 @@ * Whenever a class has a parent which itself specifies a class-invariant, that class-invariant expression is combined * with the actual class's invariant (by using a logical AND). * + * + * @since 4.0.0 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@Incubating @ClassInvariant @Repeatable(Invariants.class) @ExtendedTarget({ExtendedElementType.LOOP, ExtendedElementType.IMPORT}) diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariants.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariants.java index eaa81f4a3f3..0817e08932c 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariants.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Invariants.java @@ -18,8 +18,6 @@ */ package groovy.contracts; -import org.apache.groovy.lang.annotation.Incubating; - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -27,12 +25,16 @@ import java.lang.annotation.Target; /** - * Represents multiple invariants + * Container annotation for multiple {@link Invariant} declarations on the same type. + * Synthesized by the compiler from stacked {@code @Invariant} annotations via + * {@link java.lang.annotation.Repeatable}; not normally written by hand. + * + * @since 5.0.0 + * @see Invariant */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) -@Incubating public @interface Invariants { /** * Returns the repeated invariant annotations declared on the annotated type. diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Requires.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Requires.java index e1da332744e..0cc9139dde4 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/Requires.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/Requires.java @@ -21,7 +21,6 @@ import org.apache.groovy.contracts.annotations.meta.AnnotationProcessorImplementation; import org.apache.groovy.contracts.annotations.meta.Precondition; import org.apache.groovy.contracts.common.impl.RequiresAnnotationProcessor; -import org.apache.groovy.lang.annotation.Incubating; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; @@ -54,11 +53,12 @@ * } * * + * + * @since 4.0.0 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) -@Incubating @Precondition @AnnotationProcessorImplementation(RequiresAnnotationProcessor.class) @Repeatable(RequiresConditions.class) diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/RequiresConditions.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/RequiresConditions.java index ac742430e27..fedd0e502c7 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/RequiresConditions.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/RequiresConditions.java @@ -18,8 +18,6 @@ */ package groovy.contracts; -import org.apache.groovy.lang.annotation.Incubating; - import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -27,12 +25,16 @@ import java.lang.annotation.Target; /** - * Represents multiple preconditions. + * Container annotation for multiple {@link Requires} preconditions on the same target. + * Synthesized by the compiler from stacked {@code @Requires} annotations via + * {@link java.lang.annotation.Repeatable}; not normally written by hand. + * + * @since 5.0.0 + * @see Requires */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) -@Incubating public @interface RequiresConditions { /** * Returns the repeated precondition annotations declared on the target element. diff --git a/subprojects/groovy-contracts/src/main/java/groovy/contracts/package-info.java b/subprojects/groovy-contracts/src/main/java/groovy/contracts/package-info.java index b976ba4da37..b66fa2f882e 100644 --- a/subprojects/groovy-contracts/src/main/java/groovy/contracts/package-info.java +++ b/subprojects/groovy-contracts/src/main/java/groovy/contracts/package-info.java @@ -21,10 +21,25 @@ * Design-by-contract (DbC) support with compile-time assertion generation. * *- * {@link groovy.contracts.Requires @Requires} (precondition), - * {@link groovy.contracts.Ensures @Ensures} (postcondition), - * {@link groovy.contracts.Invariant @Invariant} (class invariant). - * Postconditions can access {@code result} and {@code old()} values. + * Stable annotations: *
+ *+ * Incubating in 6.0.0 (semantics may evolve in a subsequent 6.x release): + *
+ *