checkers.igj.quals
Annotation Type I
@Documented
@Retention(value=RUNTIME)
@Target(value={FIELD,LOCAL_VARIABLE,METHOD,PARAMETER,TYPE})
@TypeQualifier
@SubtypeOf(value=ReadOnly.class)
public @interface I
Template annotation over IGJ Immutability annotations. It acts
somewhat similar to Type Variables in Generics. The annotation
value is used to distinguish between multiple instances of
@I
.
Usage On classes
A class annotated with I
could be declared with any IGJ
Immutability annotation. The actual immutability that @I
is
resolved dectates the immutability type for all the non-static
appearances of @I
with the same value as the class
declaration.
Example:
@I
public class FileDiscriptor {
private @Immutable Date creationData;
private @I Date lastModData;
public @I getLastModDate() @ReadOnly { }
}
...
void useFileDiscriptor() {
@Mutable FileDiscriptor file =
new @Mutable FileDiscriptor(...);
...
@Mutable Data date = file.getLastModDate();
}
In the last example, @I
was resolved to @Mutable
for
the instance file.
Usage On Methods
For example, it could be used for method parameters, return values,
and the actual IGJ immutability value would be resolved based on
the method invocation.
Example:
static @I Point getMidPoint(@I Point p1, @I Point p2)
{ ...}
The method would return a Point
object that returns a Point with
the same immutability type as the passed parameters if p1 and p2 match in
immutability, otherwise @I
is resolved to @ReadOnly
.
- See the checkers manual:
- IGJ Checker
value
public abstract String value
- Default:
- "I"