| 
 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectcheckers.types.AnnotatedTypeFactory
checkers.types.BasicAnnotatedTypeFactory<IGJChecker>
checkers.igj.IGJAnnotatedTypeFactory
public class IGJAnnotatedTypeFactory extends BasicAnnotatedTypeFactory<IGJChecker>
Adds implicit and default IGJ annotations, only if the user does not
 annotate the type explicitly.  The default annotations are designed
 to minimize the number of Immutable or ReadOnly
 appearing in the source code.
 
 Implicit Annotations for literals:
 Immutable  -  any primitive literal (e.g. integer, long, boolean, etc.)
 IGJBottom  -  a null literal
 
However, due to the default setting being similar to the implicit annotations, there is no significant distinction between the two in implementation.
Default Annotations:
 This factory will add the Immutable annotation to a type if the
 input is
 
Immutable
 ReadOnly annotation to a type if the input is
 IGJBottom, a special bottom annotation to a type if
 the input can be assigned to anything, like the following cases:
 null literal
 ReadOnly or AssignsFields receiver type
 Mutable annotation to a type if
 
 Furthermore, it resolves I annotation to the proper annotation,
 according to its specification (described in I javadoc).
| Modifier and Type | Class and Description | 
|---|
| Nested classes/interfaces inherited from class checkers.types.AnnotatedTypeFactory | 
|---|
| AnnotatedTypeFactory.InheritedFromClassAnnotator | 
| Modifier and Type | Field and Description | 
|---|---|
| protected static String | IMMUTABILITY_KEYthe Iannotation 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, env, qualHierarchy, root, trees, types, visitorState | 
| Constructor and Description | 
|---|
| IGJAnnotatedTypeFactory(IGJChecker checker,
                        CompilationUnitTree root)Constructor for IGJAnnotatedTypeFactory object. | 
| Modifier and Type | Method and Description | 
|---|---|
| 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  Set<AnnotationMirror> | createFlowQualifiers(IGJChecker checker)Returns the set of annotations to be inferred in flow analysis | 
| protected  TreeAnnotator | createTreeAnnotator(IGJChecker checker)Returns a TreeAnnotatorthat adds annotations to a type based
 on the contents of a tree. | 
| protected  TypeAnnotator | createTypeAnnotator(IGJChecker checker)Returns a TypeAnnotatorthat adds annotations to a type based
 on the content of the type itself. | 
| protected  AnnotatedTypeMirror.AnnotatedDeclaredType | getImplicitReceiverType(Tree tree) | 
|  AnnotatedTypeMirror.AnnotatedDeclaredType | getSelfType(Tree tree)Returns the type of field this,  for the scope of this tree. | 
|  AnnotatedTypeMirror.AnnotatedExecutableType | methodFromUse(MethodInvocationTree tree)Resolves @Iin 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 @Iin theelementTypebased
 onowner, according to is specification. | 
| protected  void | postDirectSuperTypes(AnnotatedTypeMirror type,
                     List<? extends AnnotatedTypeMirror> supertypes)Replace all instances of @Iin the super types with the
 immutability of the current type | 
| Methods inherited from class checkers.types.BasicAnnotatedTypeFactory | 
|---|
| annotateImplicit, annotateImplicit, createFlow | 
| 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 currently| Method Detail | 
|---|
protected Set<AnnotationMirror> createFlowQualifiers(IGJChecker checker)
BasicAnnotatedTypeFactory
createFlowQualifiers in class BasicAnnotatedTypeFactory<IGJChecker>protected TreeAnnotator createTreeAnnotator(IGJChecker checker)
BasicAnnotatedTypeFactoryTreeAnnotator 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)
BasicAnnotatedTypeFactoryTypeAnnotator that adds annotations to a type based
 on the content of the type itself.
createTypeAnnotator in class BasicAnnotatedTypeFactory<IGJChecker>protected void annotateInheritedFromClass(AnnotatedTypeMirror type)
annotateInheritedFromClass in class AnnotatedTypeFactorytype - the type for which class annotations will be inherited if
 there are no annotations already presentprotected AnnotatedTypeMirror.AnnotatedDeclaredType getImplicitReceiverType(Tree tree)
getImplicitReceiverType in class AnnotatedTypeFactorypublic 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
protected void postDirectSuperTypes(AnnotatedTypeMirror type,
                                    List<? extends AnnotatedTypeMirror> supertypes)
@I in the super types with the
 immutability of the current type
postDirectSuperTypes in class BasicAnnotatedTypeFactory<IGJChecker>type - the type whose supertypes are requestedsupertypes - the supertypes of type
public void postAsMemberOf(AnnotatedTypeMirror elementType,
                           AnnotatedTypeMirror owner,
                           Element element)
@I in the elementType based
 on owner, according to is specification.
postAsMemberOf in class AnnotatedTypeFactoryelementType - the annotated type of the elementowner - the annotated type of the receiver of the accessing treeelement - the element of the field or methodpublic AnnotatedTypeMirror.AnnotatedExecutableType methodFromUse(MethodInvocationTree tree)
@I in the type of the method type base on the method
 invocation tree parameters.  Any unresolved @Is 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| 
 | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||