[Checkers] Flow and IGJ
mahmood at MIT.EDU
Tue Jun 24 09:55:01 EDT 2008
So I managed to get flow to work with IGJ. When I experimented with
it, I realize that it has some undesired consequences (for
readability). The question I have is how to deal with the qualifiers
users specify himself.
In Nullness Checker, the following is allowed (when using Flow):
@Nullable Date d = new Date();
d.setDate(3); // d guaranteed to be nonnull
When porting it to IGJ, I have the following case:
@ReadOnly Date d = new @Mutable Date();
d.setDate(3); // d guaranteed to be mutable
I find it to be a bit troubling from readability standpoint and (I
assume) would complicate the mutation rules.
In one sense they are similar (especially if a programmer reuse a
reference for mutable and immutable object); yet I think that flow
should only operate if the user doesn't specify a qualifier.
What do you think?
What should be the default for flow: only propagate if user doesn't
specify qualifiers, or always propagate if the value of the variable
is guaranteed to be a subtype of variable declaration qualifier?
More information about the checkers