[Checkers] <@ReadOnly Object> generic type (fwd)

Michael Ernst mernst at csail.mit.edu
Wed Mar 26 09:44:13 EDT 2008


Thanks for the good discussion on this issue.  I have a couple points to
add.

We know that

  class C<T>

is really shorthand for

  class C<T extends UltimateSupertype>

In normal Java, UltimateSupertype is "Object", but in Javari/IGJ, it is
"@Readonly Object".

Here are 3 examples of how we should treat "class C<T extends Something>".

1. The proposed solution of treating 

  class C<T>

as shorthand for 

  class C<T extends @Readonly Object>

seems right to me.  (This was the intention all along, but I guess no one
ever noticed the issue before, perhaps because the implementation wasn't
completely finished.)

2. There's a separate question of whether we should treat

  class C<T extends Object>

as shorthand for 

  class C<T extends @Readonly Object>

I tend to lean toward doing so, mostly because Object has no methods with
mutable receiver, and so this treatment cannot cause a problem.

3. Finally,

  class C<T extends Date>

should *not* be shorthand for 

  class C<T extends @Readonly Date>

Date has methods with mutable receiver, so this is a change of semantics.


These examples suggest a generalization.  For methods with no (possibly
inherited) methods with mutable receiver, make "extends Foo" equivalent to
"extends @Readonly Foo".  Otherwise, "extends Foo" is equivalent to
"extends @Mutable Foo".

Does this proposal work, or am I missing something?

I suggested this proposal because treating Object specially feels wrong to
me.  I would rather find a rule that handles both Object and other classes,
for two reasons.  First, it explains *why* Object is treated specially.
Second, it will preserve backward-compatibility in more cases, such as

  class C<T extends Comparable<T>> 


Thoughts?

                     Thanks,

                    -Mike



More information about the checkers mailing list