[Checkers] Checker Framework code review pre-comments
mahmood at MIT.EDU
Mon Jun 2 00:14:38 EDT 2008
I wanted to respond to some notes in an email format.
> AnnotationRelations.isSubType(Collection, Collection)
The specification is a bit odd, since it returns true if any
annotation in the first collection is a subtype to one annotation in
the second collection. I had two cases while thinking about it:
1. Javari for a while had RoMaybe along with other annotations.
Having isSubtype(Collection, Collection) enabled us to let
JavariChecker uses AnnotationRelations easily. We didn't have this
method in the first design.
2. As an implementation detail, IGJ allows @AssignsFields and @I to be
in the same type. A self type (type of 'this') may be @AssignsFields
@I FOO, where AssignsFields would allow for invocation of other
AssignsFields methods and @I would allow 'this' reference to escape as
'@I'. This could easily be changed.
> For annotations (AnnotationMirror) what is the difference between
> canonical names and qualified names? Why are names used for equality
> checking, rather than overriding the AnnotationMirror.equals method?
> What is the contract of equality for AnnotationMirror?
This is a bit complicated issue. There are two classes of interest
here: AnnotationMirror (and its implementation AnnotationMirrorImpl),
AnnotationValue (and its implementation AnnotationValueImpl). Both
classes are symbols of annotations, but each instance represent a
unique annotation declaration and its value; so two instances are not
equal if they have the same annotation type and values but are for
different declaration (e.g. annotations for different variables,
We are interested in another form of equality, where two annotations
are equal if their types and their values are equal. We had multiple
1. Create a new annotation representation to wrap all annotationmirror
coming from the compiler.
2. Create new set of equality methods. A simple one was using the
qualified name and the AnnotationMirrorImpl, AnnotationValueImpl,
implement a nice toString().
More information about the checkers