|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object checkers.types.AnnotatedTypeFactory checkers.types.BasicAnnotatedTypeFactory<IGJChecker> checkers.igj.IGJAnnotatedTypeFactory
public class IGJAnnotatedTypeFactory
Adds implicit and default IGJ annotations, only if the user does not
annotate the type explicitly.
This factory will add the Immutable
annotation to a type if the
input is
1. a primitive type,
2. a known immutable type, if the class type is annotated as
Immutable
, or
3. an enumerator type.
It will add the ReadOnly
annotation to a type if the input is
4. a method receiver for an immutable class
5. a result of unification of different immutabilities (e.g.
within Conditional Expressions)
It will add the Mutable
annotation to a type if (6.) the input is
a use of a mutable type.
As an implementation detail, it adds a special annotation,
IGJBottom
, that is a bottom for all other types in the
hierarchy. It is inserted to (7.) values could assigned to anything like,
null
literals.
Furthermore, it resolves I
annotation to the proper annotation,
according to its specification (described in I
javadoc).
Field Summary | |
---|---|
protected static String |
IMMUTABILITY_KEY
the I annotation value key |
Fields inherited from class checkers.types.BasicAnnotatedTypeFactory |
---|
defaults, flow, FLOW_BY_DEFAULT, poly, treeAnnotator, typeAnnotator, useFlow |
Fields inherited from class checkers.types.AnnotatedTypeFactory |
---|
annotations, atypes, elements, eltsToArrays, env, JSR308_ELTS_ARRAY_CONVENTION, qualHierarchy, root, trees, types, visitorState |
Constructor Summary | |
---|---|
IGJAnnotatedTypeFactory(IGJChecker checker,
CompilationUnitTree root)
Constructor for IGJAnnotatedTypeFactory object. |
Method Summary | |
---|---|
protected void |
annotateImplicit(Element elt,
AnnotatedTypeMirror type)
Adds implicit annotations to a type obtained from a Element . |
protected void |
annotateInheritedFromClass(AnnotatedTypeMirror type)
Override the default behavior of implicitly adding annotations on the class type to the declared types within the passed type. |
protected TreeAnnotator |
createTreeAnnotator(IGJChecker checker)
Returns a TreeAnnotator that adds annotations to a type based
on the contents of a tree. |
protected TypeAnnotator |
createTypeAnnotator(IGJChecker checker)
Returns a TypeAnnotator that adds annotations to a type based
on the content of the type itself. |
AnnotatedTypeMirror.AnnotatedDeclaredType |
getSelfType(Tree tree)
Returns the type of field this , for the scope of this tree. |
AnnotatedTypeMirror.AnnotatedExecutableType |
methodFromUse(MethodInvocationTree tree)
Resolves @I in the type of the method type base on the method
invocation tree parameters. |
void |
postAsMemberOf(AnnotatedTypeMirror elementType,
AnnotatedTypeMirror owner,
Element element)
Resolve the instances of @I in the elementType based
on owner , according to is specification. |
protected void |
postDirectSuperTypes(AnnotatedTypeMirror type,
List<? extends AnnotatedTypeMirror> supertypes)
Replace all instances of @I in the super types with the
immutability of the current type |
Methods inherited from class checkers.types.BasicAnnotatedTypeFactory |
---|
annotateImplicit |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static final String IMMUTABILITY_KEY
I
annotation value key
Constructor Detail |
---|
public IGJAnnotatedTypeFactory(IGJChecker checker, CompilationUnitTree root)
checker
- the checker to which this factory belongsroot
- the compilation unit the annotation processor is
processing currentlyMethod Detail |
---|
protected TreeAnnotator createTreeAnnotator(IGJChecker checker)
BasicAnnotatedTypeFactory
TreeAnnotator
that adds annotations to a type based
on the contents of a tree.
Subclasses may override this method to specify more appriopriate
TreeAnnotator
createTreeAnnotator
in class BasicAnnotatedTypeFactory<IGJChecker>
protected TypeAnnotator createTypeAnnotator(IGJChecker checker)
BasicAnnotatedTypeFactory
TypeAnnotator
that adds annotations to a type based
on the content of the type itself.
createTypeAnnotator
in class BasicAnnotatedTypeFactory<IGJChecker>
protected void annotateImplicit(Element elt, AnnotatedTypeMirror type)
AnnotatedTypeFactory
Element
. By
default, this method does nothing. Subclasses should use this method to
implement implicit annotations specific to their type systems.
annotateImplicit
in class BasicAnnotatedTypeFactory<IGJChecker>
elt
- an elementtype
- the type obtained from elt
protected void postDirectSuperTypes(AnnotatedTypeMirror type, List<? extends AnnotatedTypeMirror> supertypes)
@I
in the super types with the
immutability of the current type
postDirectSuperTypes
in class AnnotatedTypeFactory
type
- the type whose supertypes are requestedsupertypes
- the supertypes of typepublic void postAsMemberOf(AnnotatedTypeMirror elementType, AnnotatedTypeMirror owner, Element element)
@I
in the elementType
based
on owner
, according to is specification.
postAsMemberOf
in class AnnotatedTypeFactory
elementType
- the annotated type of the elementowner
- the annotated type of the receiver of the accessing treeelement
- the element of the field or methodprotected void annotateInheritedFromClass(AnnotatedTypeMirror type)
annotateInheritedFromClass
in class AnnotatedTypeFactory
type
- the type for which class annotations will be inherited if
there are no annotations already presentpublic AnnotatedTypeMirror.AnnotatedExecutableType methodFromUse(MethodInvocationTree tree)
@I
in the type of the method type base on the method
invocation tree parameters. Any unresolved @I
s is resolved to a
place holder type.
It resolves @I
annotation in the following way:
AnnotatedTypes.asMemberOf(AnnotatedTypeMirror, Element)
methodFromUse
in class BasicAnnotatedTypeFactory<IGJChecker>
tree
- the method invocation tree
public AnnotatedTypeMirror.AnnotatedDeclaredType getSelfType(Tree tree)
this
, for the scope of this tree.
In IGJ, the self type is the method receiver in this scope.
getSelfType
in class AnnotatedTypeFactory
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |