Annotation Interface RequiresNonEmpty
@Documented
@Retention(RUNTIME)
@Repeatable(List.class)
@Target({METHOD,PARAMETER})
@PreconditionAnnotation(qualifier=NonEmpty.class)
public @interface RequiresNonEmpty
Indicates a method precondition: the specified expressions that may be a
collection, iterator, iterable, or map must be non-empty when the annotated method is invoked.
For example:
import java.util.LinkedList;
import java.util.List;
import org.checkerframework.checker.nonempty.qual.NonEmpty;
import org.checkerframework.checker.nonempty.qual.RequiresNonEmpty;
import org.checkerframework.dataflow.qual.Pure;
class MyClass {
List<String> list1 = new LinkedList<>();
List<String> list2;
@RequiresNonEmpty("list1")
@Pure
void m1() {}
@RequiresNonEmpty({"list1", "list2"})
@Pure
void m2() {}
@RequiresNonEmpty({"list1", "list2"})
void m3() {}
void m4() {}
void test(@NonEmpty List<String> l1, @NonEmpty List<String> l2) {
MyClass testClass = new MyClass();
testClass.m1(); // Compile-time error: m1 requires that list1 is @NonEmpty.
testClass.list1 = l1;
testClass.m1(); // OK
testClass.m2(); // Compile-time error: m2 requires that list2 is @NonEmpty
testClass.list2 = l2;
testClass.m2(); // OK
testClass.m4();
testClass.m2(); // Compile-time error: m4 is not pure and might have assigned a field.
}
}
This annotation should not be used for formal parameters (instead, give them a @NonEmpty
type). The @RequiresNonEmpty annotation is intended for non-parameter expressions, such
as field accesses or method calls.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic @interfaceA wrapper annotation that makes theRequiresNonEmptyannotation repeatable. -
Required Element Summary
Required Elements
-
Element Details
-
value
String[] value- Returns:
- the Java expression that must be non-empty
-