net.sourceforge.pmd.rules
Class DoubleCheckedLockingRule

java.lang.Object
  extended bynet.sourceforge.pmd.ast.JavaParserVisitorAdapter
      extended bynet.sourceforge.pmd.AbstractRule
          extended bynet.sourceforge.pmd.rules.DoubleCheckedLockingRule
All Implemented Interfaces:
JavaParserVisitor, Rule

public class DoubleCheckedLockingRule
extends AbstractRule

void method() { if(x == null) { synchronize(this){ if(x == null) { x = new | method(); } } } 1. The error is when one uses the value assigned within a synchronized section, outside of a synchronized section. if(x == null) is outside of synchronized section x = new | method(); Very very specific check for double checked locking.

Author:
CL Gilbert (dnoyeb@users.sourceforge.net)

Field Summary
private  boolean interfaceSkipper
           
 
Fields inherited from class net.sourceforge.pmd.AbstractRule
 
Fields inherited from interface net.sourceforge.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
DoubleCheckedLockingRule()
           
 
Method Summary
 java.lang.String getNameFromPrimaryPrefix(ASTPrimaryPrefix pp)
           
private  boolean ifVerify(ASTIfStatement is, java.lang.String varname)
           
 boolean matchName(ASTPrimaryExpression ape, java.lang.String name)
           
 java.lang.Object visit(ASTClassDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTInterfaceDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTMethodDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTNestedClassDeclaration node, java.lang.Object data)
           
 java.lang.Object visit(ASTNestedInterfaceDeclaration node, java.lang.Object data)
           
 
Methods inherited from class net.sourceforge.pmd.AbstractRule
addProperty, apply, createRuleViolation, createRuleViolation, equals, getBooleanProperty, getDescription, getDoubleProperty, getExample, getIntProperty, getMessage, getName, getPriority, getPriorityName, getProperties, getStringProperty, hashCode, hasProperty, include, setDescription, setExample, setInclude, setMessage, setName, setPriority, visitAll
 
Methods inherited from class net.sourceforge.pmd.ast.JavaParserVisitorAdapter
visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

interfaceSkipper

private boolean interfaceSkipper
Constructor Detail

DoubleCheckedLockingRule

public DoubleCheckedLockingRule()
Method Detail

visit

public java.lang.Object visit(ASTMethodDeclaration node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

ifVerify

private boolean ifVerify(ASTIfStatement is,
                         java.lang.String varname)

visit

public java.lang.Object visit(ASTClassDeclaration node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

public java.lang.Object visit(ASTNestedClassDeclaration node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

public java.lang.Object visit(ASTInterfaceDeclaration node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

visit

public java.lang.Object visit(ASTNestedInterfaceDeclaration node,
                              java.lang.Object data)
Specified by:
visit in interface JavaParserVisitor
Overrides:
visit in class JavaParserVisitorAdapter

matchName

public boolean matchName(ASTPrimaryExpression ape,
                         java.lang.String name)

getNameFromPrimaryPrefix

public java.lang.String getNameFromPrimaryPrefix(ASTPrimaryPrefix pp)