Now to make it work!
/**
* Marks a method with a <em>pre-condition</em>. The required annotation
* {@link #value()} is a <code>boolean</code> condition. The optional
* {@link #message()} is used in {@link DBCException} if the condition
* fails.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface pre {
boolean value();
String message() default "";
}
/**
* Marks a method with a <em>post-condition</em>. The required annotation
* {@link #value()} is a <code>boolean</code> condition. The optional
* {@link #message()} is used in {@link DBCException} if the condition
* fails.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface post {
boolean value();
String message() default "";
}
/**
* Marks a method with an <em>invariant</em>. The required annotation
* {@link #value()} is a <code>boolean</code> invariant. The optional
* {@link #message()} is used in {@link DBCException} if the invariant
* fails.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface inv {
boolean value();
String message() default "";
} UPDATE: I'll have to think about this longer. Turns out that annotations only accept constants or expressions which evaluate to constants. A constant pre-condition isn't very interesting.
No comments:
Post a Comment