package com.sageserpent.americium.java;

import org.junit.jupiter.api.TestTemplate;
import org.junit.jupiter.api.extension.ExtendWith;

import java.lang.annotation.*;

@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@TestTemplate
@ExtendWith(TrialsTestExtension.class)
public @interface TrialsTest {
    String[] trials() default "";

    int casesLimit();

    int complexity() default TrialsDefaults.defaultComplexityLimit;

    int shrinkageAttempts() default TrialsDefaults.defaultShrinkageAttemptsLimit;
}

@@ -165,325 +165,2136 @@
 *;%0A%0A
-@Target(%7BElementType.ANNOTATION_TYPE, ElementType.METHOD%7D)%0A@Retention(RetentionPolicy.RUNTIME)%0A@Documented%0A@TestTemplate%0A@ExtendWith(TrialsTestExtension.class)%0Apublic @interface TrialsTest %7B%0A    String%5B%5D trials() default %22%22;%0A%0A    int casesLimit();%0A%0A    int complexity() default TrialsDefaults.defaultComplexityLimit;%0A
+/**%0A * Method annotation for use by parameterised test methods run via the JUnit5%0A * engine extended with %7B@link TrialsTestExtension%7D. It couples one or%0A * several instances of %7B@link Trials%7D to the test method, causing the method%0A * to be run repeatedly with test cases realized as arguments supplied by the%0A * %7B@link Trials%7D instance.%0A * %3Cp%3E%0A * Once an invocation of the test method fails, the extension will go into a%0A * shrinkage mode, invoking the test method repeatedly to find a combination%0A * of arguments that comprise a simpler test case.%0A * %3Cp%3E%0A * The usage is analogous to%0A * %7B@link org.junit.jupiter.params.ParameterizedTest%7D. Like that annotation,%0A * the test cases are directly repeatable, for example by IntelliJ's support%0A * for running individual test cases - but only up to and including the first%0A * failed test invocation. Subsequent test cases resulting from shrinkage%0A * require a full run over invocations to be reproduced - except for the%0A * minimised failing test case, as this can be reproduced via its recipe%0A * hash, consult the test console output for instructions on how to do this.%0A */%0A@Target(%7BElementType.ANNOTATION_TYPE, ElementType.METHOD%7D)%0A@Retention(RetentionPolicy.RUNTIME)%0A@Documented%0A@TestTemplate%0A@ExtendWith(TrialsTestExtension.class)%0Apublic @interface TrialsTest %7B%0A    /**%0A     * The name of a field or multiple fields of type %7B@link Trials%7D declared%0A     * in the class housing the annotated test method; the instances%0A     * referenced by the fields will collectively supply cases to the%0A     * annotated test. These fields should be static if the annotated class%0A     * uses %7B@link org.junit.jupiter.api.TestInstance.Lifecycle#PER_METHOD%7D,%0A     * and non-static if%0A     * %7B@link org.junit.jupiter.api.TestInstance.Lifecycle#PER_CLASS%7D is used.%0A     */%0A    String%5B%5D trials() default %22%22;%0A%0A    /**%0A     * @see Trials#withLimits(int, Trials.OptionalLimits)%0A     */%0A    int casesLimit();%0A%0A    /**%0A     * @see Trials.OptionalLimits#complexity%0A     */%0A    int complexity() default TrialsDefaults.defaultComplexityLimit;%0A%0A    /**%0A     * @see Trials.OptionalLimits#shrinkageAttempts%0A     */
 %0A   

Add Javadoc to `@TrialsTest`.