@Programmatic

Indicates that an property, collection or action is to be called programmatically and should be ignored from the metamodel.

For example, it may be a helper method that needs to be public but that doesn’t conform to the requirements of an action (for example, invalid parameter types).

It can also be added to a type, meaning that the type is ignored from the metamodel. This is intended as a "get out of jail" for any classes from unit tests, say, that end up on the classpath of integration tests but should otherwise be ignored.

API

Programmatic.java
@interface Programmatic {
}

Examples

A common use-case is to ignore implementation-level artifacts. For example:

public class Customer implements Comparable<Customer> {
    ...
    @Programmatic
    public int compareTo(Customer c) {
        return getSalary() - c.getSalary();
    }
    ...
}

Note that @Programmatic is not the same as @Action(hidden=Where.EVERYWHERE) or @Property(hidden=Where.EVERYWHERE) etc; it actually means that the class member will not be part of the Apache Causeway metamodel.