checkers.lock
Class LockChecker

java.lang.Object
  extended by javax.annotation.processing.AbstractProcessor
      extended by com.sun.source.util.AbstractTypeProcessor
          extended by checkers.source.SourceChecker
              extended by checkers.basetype.BaseTypeChecker
                  extended by checkers.lock.LockChecker
All Implemented Interfaces:
Processor

public class LockChecker
extends BaseTypeChecker

A typechecker plug-in for the JCIP type system qualifier that finds (and verifies the absence of) locking and concurrency errors.

See Also:
GuardedBy

Field Summary
Modifier and Type Field and Description
 
Fields inherited from class checkers.source.SourceChecker
currentPath, currentRoot, env, messager, messages, trees
 
Fields inherited from class javax.annotation.processing.AbstractProcessor
processingEnv
 
Constructor Summary
Constructor and Description
LockChecker()
           
 
Method Summary
Modifier and Type Method and Description
protected  QualifierHierarchy createQualifierHierarchy()
          Returns the type qualifier hierarchy graph to be used by this processor.
 boolean isValidUse(AnnotatedTypeMirror.AnnotatedDeclaredType declarationType, AnnotatedTypeMirror.AnnotatedDeclaredType useType)
          Tests that the qualifiers present on the useType are valid qualifiers, given the qualifiers on the declaration of the type, declarationType.
 
Methods inherited from class checkers.basetype.BaseTypeChecker
createFactory, createSourceVisitor, createSupportedTypeQualifiers, createTypeHierarchy, getQualifierHierarchy, getSupportedLintOptions, getSupportedTypeQualifiers, init, isAssignable, isSubtype
 
Methods inherited from class checkers.source.SourceChecker
getLintOption, getLintOption, getMessages, getProcessingEnvironment, getShouldSkip, getSupportedAnnotationTypes, getSupportedOptions, getSupportedSourceVersion, getSuppressWarningsKey, message, report, typeProcess
 
Methods inherited from class com.sun.source.util.AbstractTypeProcessor
process, typeProcessingOver
 
Methods inherited from class javax.annotation.processing.AbstractProcessor
getCompletions, isInitialized
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LockChecker

public LockChecker()
Method Detail

createQualifierHierarchy

protected QualifierHierarchy createQualifierHierarchy()
Description copied from class: BaseTypeChecker
Returns the type qualifier hierarchy graph to be used by this processor. The implementation builds the type qualifier hierarchy for the BaseTypeChecker.getSupportedTypeQualifiers() using the meta-annotations found in them. The current implementation returns an instance of GraphQualifierHierarchy. Subclasses may override this method to express any relationships that cannot be inferred using meta-annotations (e.g. due to lack of meta-annotations).

Overrides:
createQualifierHierarchy in class BaseTypeChecker
Returns:
an annotation relation tree representing the supported qualifiers

isValidUse

public boolean isValidUse(AnnotatedTypeMirror.AnnotatedDeclaredType declarationType,
                          AnnotatedTypeMirror.AnnotatedDeclaredType useType)
Description copied from class: BaseTypeChecker
Tests that the qualifiers present on the useType are valid qualifiers, given the qualifiers on the declaration of the type, declarationType.

The check is shallow, as it does not descend into generic or array types (i.e. only performing the validity check on the raw type or outmost array dimension). BaseTypeVisitor.validateTypeOf(Tree) would call this for each type argument or array dimention separately.

For instance, in the IGJ type system, a @Mutable is an invalid qualifier for String, as String is declared as @Immutable String.

In most cases, useType simply needs to be a subtype of declarationType, but there are exceptions. In IGJ, a variable may be declared @ReadOnly String, even though String is @Immutable String; ReadOnly is not a subtype of Immutable.

Overrides:
isValidUse in class BaseTypeChecker
Parameters:
declarationType - the type of the class (TypeElement)
useType - the use of the class (instance type)
Returns:
if the useType is a valid use of elemType