package org.junit.experimental.theories; import static java.lang.annotation.ElementType.ANNOTATION_TYPE; import static java.lang.annotation.ElementType.PARAMETER; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Annotating a {@link org.junit.experimental.theories.Theory Theory} method * parameter with @ParametersSuppliedBy causes it to be supplied with * values from the named * {@link org.junit.experimental.theories.ParameterSupplier ParameterSupplier} * when run as a theory by the {@link org.junit.experimental.theories.Theories * Theories} runner. * * In addition, annotations themselves can be annotated with * @ParametersSuppliedBy, and then used similarly. ParameterSuppliedBy * annotations on parameters are detected by searching up this heirarchy such * that these act as syntactic sugar, making: * *
 * @ParametersSuppliedBy(Supplier.class)
 * public @interface SpecialParameter { }
 * 
 * @Theory
 * public void theoryMethod(@SpecialParameter String param) {
 *   ...
 * }
 * 
* * equivalent to: * *
 * @Theory
 * public void theoryMethod(@ParametersSuppliedBy(Supplier.class) String param) {
 *   ...
 * }
 * 
*/ @Retention(RetentionPolicy.RUNTIME) @Target({ ANNOTATION_TYPE, PARAMETER }) public @interface ParametersSuppliedBy { Class value(); }