package checkers.oigj.quals; import java.lang.annotation.*; import javax.lang.model.type.TypeKind; import com.sun.source.tree.Tree; import checkers.quals.ImplicitFor; import checkers.quals.SubtypeOf; import checkers.quals.TypeQualifier; /** * Indicates that the annotated reference is an immutable reference to an * immutable object. * * An Immutable object cannot be modified. Its fields may be reassigned or * mutated only if they are explicitly marked as Mutable or Assignable. * */ @Documented @Retention(RetentionPolicy.RUNTIME) //@Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER}) @TypeQualifier @SubtypeOf( { AssignsFields.class } ) @ImplicitFor( trees = { Tree.Kind.NEW_CLASS }, types = { TypeKind.ARRAY } ) public @interface Mutable { }