checkers.fenum
Class FenumVisitor

java.lang.Object
  extended by com.sun.source.util.TreeScanner<R,P>
      extended by com.sun.source.util.TreePathScanner<R,P>
          extended by checkers.source.SourceVisitor<R,P>
              extended by checkers.basetype.BaseTypeVisitor<Void,Void>
                  extended by checkers.fenum.FenumVisitor
All Implemented Interfaces:
TreeVisitor<Void,Void>

public class FenumVisitor
extends BaseTypeVisitor<Void,Void>


Nested Class Summary
Modifier and Type Class and Description
 
Nested classes/interfaces inherited from class checkers.basetype.BaseTypeVisitor
BaseTypeVisitor.TypeValidator
 
Field Summary
Modifier and Type Field and Description
 
Fields inherited from class checkers.basetype.BaseTypeVisitor
annoFactory, annoTypes, checker, plainFactory, visitorState
 
Fields inherited from class checkers.source.SourceVisitor
atypeFactory, elements, root, trees, types
 
Constructor Summary
Constructor and Description
FenumVisitor(FenumChecker checker, CompilationUnitTree root)
           
 
Method Summary
Modifier and Type Method and Description
protected  void checkArguments(List<? extends AnnotatedTypeMirror> requiredArgs, List<? extends ExpressionTree> passedArgs, Void p)
          A helper method to check that each passed argument is a subtype of the corresponding required argument, and issues "argument.invalid" error for each passed argument that not a subtype of the required one.
protected  boolean checkMethodInvocability(AnnotatedTypeMirror.AnnotatedExecutableType method, MethodInvocationTree node)
          Tests whether the method can be invoked using the receiver of the 'node' method invocation, and issues a "method.invocation.invalid" if the invocation is invalid.
 Void visitAssignment(AssignmentTree node, Void p)
          Performs two checks: subtyping and assignability checks, using BaseTypeVisitor.commonAssignmentCheck(Tree, ExpressionTree, String, Object).
 Void visitBinary(BinaryTree node, Void p)
           
 Void visitVariable(VariableTree node, Void p)
           
 
Methods inherited from class checkers.basetype.BaseTypeVisitor
checkAccess, checkArrayInitialization, checkAssignability, checkConstructorInvocation, checkDefaultConstructor, checkOverride, checkTypeArguments, checkTypecastRedundancy, checkTypecastSafety, commonAssignmentCheck, commonAssignmentCheck, commonAssignmentCheck, createTypeValidator, enclosingMemberSelect, enclosingStatement, isAccessAllowed, isVectorCopyInto, scan, shouldSkip, shouldSkip, typeCheckVectorCopyIntoArgument, validateTypeOf, visitAnnotation, visitClass, visitCompilationUnit, visitCompoundAssignment, visitEnhancedForLoop, visitIdentifier, visitInstanceOf, visitMethod, visitMethodInvocation, visitNewArray, visitNewClass, visitParameterizedType, visitReturn, visitTypeCast, visitUnary
 
Methods inherited from class com.sun.source.util.TreePathScanner
getCurrentPath, scan
 
Methods inherited from class com.sun.source.util.TreeScanner
reduce, scan, visitAnnotatedType, visitArrayAccess, visitArrayType, visitAssert, visitBlock, visitBreak, visitCase, visitCatch, visitConditionalExpression, visitContinue, visitDisjointType, visitDoWhileLoop, visitEmptyStatement, visitErroneous, visitExpressionStatement, visitForLoop, visitIf, visitImport, visitLabeledStatement, visitLiteral, visitMemberSelect, visitModifiers, visitOther, visitParenthesized, visitPrimitiveType, visitSwitch, visitSynchronized, visitThrow, visitTry, visitTypeParameter, visitWhileLoop, visitWildcard
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FenumVisitor

public FenumVisitor(FenumChecker checker,
                    CompilationUnitTree root)
Method Detail

visitBinary

public Void visitBinary(BinaryTree node,
                        Void p)
Specified by:
visitBinary in interface TreeVisitor<Void,Void>
Overrides:
visitBinary in class TreeScanner<Void,Void>

visitVariable

public Void visitVariable(VariableTree node,
                          Void p)
Specified by:
visitVariable in interface TreeVisitor<Void,Void>
Overrides:
visitVariable in class BaseTypeVisitor<Void,Void>

visitAssignment

public Void visitAssignment(AssignmentTree node,
                            Void p)
Description copied from class: BaseTypeVisitor
Performs two checks: subtyping and assignability checks, using BaseTypeVisitor.commonAssignmentCheck(Tree, ExpressionTree, String, Object). If the subtype check fails, it issues a "assignment.type.incompatible" error.

Specified by:
visitAssignment in interface TreeVisitor<Void,Void>
Overrides:
visitAssignment in class BaseTypeVisitor<Void,Void>

checkArguments

protected void checkArguments(List<? extends AnnotatedTypeMirror> requiredArgs,
                              List<? extends ExpressionTree> passedArgs,
                              Void p)
Description copied from class: BaseTypeVisitor
A helper method to check that each passed argument is a subtype of the corresponding required argument, and issues "argument.invalid" error for each passed argument that not a subtype of the required one. Note this method requires the lists to have the same length, as it does not handle cases like var args.

Overrides:
checkArguments in class BaseTypeVisitor<Void,Void>
Parameters:
requiredArgs - the required types
passedArgs - the expressions passed to the corresponding types

checkMethodInvocability

protected boolean checkMethodInvocability(AnnotatedTypeMirror.AnnotatedExecutableType method,
                                          MethodInvocationTree node)
Description copied from class: BaseTypeVisitor
Tests whether the method can be invoked using the receiver of the 'node' method invocation, and issues a "method.invocation.invalid" if the invocation is invalid. This implementation tests whether the receiver in the method invocation is a subtype of the method receiver type.

Overrides:
checkMethodInvocability in class BaseTypeVisitor<Void,Void>
Parameters:
method - the type of the invoked method
node - the method invocation node
Returns:
true iff the call of 'node' is a valid call