package beast.core; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * This annotation should be used to provide information about parameters in the constructor of a BEAST object, * as an alternative way to represent inputs. * * Note that any object with a constructor with Param annotations should also have a * public default constructor without arguments to facilitate cloning models in BEAUti. * * Furthermore, every Param annotation should come with a public getter and setter, using * camelcase for name, with annotation CTor(@Param(name="shape",...) double shape) these * getter and setter signatures should be in the class: * * public double getShape() * public void setShape(double shape) * */ @Target({ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface Param { /** * The name of this parameter, typically the same as the name * of the constructor argument. */ String name(); /** * The description of this parameter. Must be specified and contain * at least 4 words to pass the unit tests. */ String description(); /** * @return the default value as a string. An attempt is made to * convert the String value defaultValue() to the type associated * with the constructor argument. */ String defaultValue() default ""; /** * Indicates the value can be omitted, in which case the default * value is used (an attempt is made to convert the String value * defaultValue() to the type associated with the constructor * argument). * * Note that if there are different constructors and an argument * does not appear in the other constructor it has to be marked * as optional. */ boolean optional() default false; /** * @return true to indicate this description applies to all its * inherited classes as well, false otherwise */ boolean isInheritable() default true; }