org.acm.seguin.pmd.rules
Class DoubleCheckedLockingRule

java.lang.Object
  extended by net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
      extended by org.acm.seguin.pmd.AbstractRule
          extended by org.acm.seguin.pmd.rules.DoubleCheckedLockingRule
All Implemented Interfaces:
net.sourceforge.jrefactory.parser.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
 
Fields inherited from interface org.acm.seguin.pmd.Rule
LOWEST_PRIORITY, PRIORITIES
 
Constructor Summary
DoubleCheckedLockingRule()
           
 
Method Summary
 java.lang.String getNameFromPrimaryPrefix(net.sourceforge.jrefactory.ast.ASTPrimaryPrefix pp)
           
 boolean matchName(net.sourceforge.jrefactory.ast.ASTPrimaryExpression ape, java.lang.String name)
           
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTClassDeclaration node, java.lang.Object data)
          To visit a node
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTInterfaceDeclaration node, java.lang.Object data)
          To visit a node
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTMethodDeclaration node, java.lang.Object data)
          To visit a node
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedClassDeclaration node, java.lang.Object data)
          To visit a node
 java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedInterfaceDeclaration node, java.lang.Object data)
          To visit a node
 
Methods inherited from class org.acm.seguin.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, visit, visitAll
 
Methods inherited from class net.sourceforge.jrefactory.parser.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, 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
 

Constructor Detail

DoubleCheckedLockingRule

public DoubleCheckedLockingRule()
Method Detail

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTMethodDeclaration node,
                              java.lang.Object data)
Description copied from class: net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
To visit a node

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - The node we are visiting
data - The rename type data
Returns:
The rename type data

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTClassDeclaration node,
                              java.lang.Object data)
Description copied from class: net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
To visit a node

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - The node we are visiting
data - The rename type data
Returns:
The rename type data

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedClassDeclaration node,
                              java.lang.Object data)
Description copied from class: net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
To visit a node

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - The node we are visiting
data - The rename type data
Returns:
The rename type data

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTInterfaceDeclaration node,
                              java.lang.Object data)
Description copied from class: net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
To visit a node

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - The node we are visiting
data - The rename type data
Returns:
The rename type data

visit

public java.lang.Object visit(net.sourceforge.jrefactory.ast.ASTNestedInterfaceDeclaration node,
                              java.lang.Object data)
Description copied from class: net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
To visit a node

Specified by:
visit in interface net.sourceforge.jrefactory.parser.JavaParserVisitor
Overrides:
visit in class net.sourceforge.jrefactory.parser.JavaParserVisitorAdapter
Parameters:
node - The node we are visiting
data - The rename type data
Returns:
The rename type data

matchName

public boolean matchName(net.sourceforge.jrefactory.ast.ASTPrimaryExpression ape,
                         java.lang.String name)

getNameFromPrimaryPrefix

public java.lang.String getNameFromPrimaryPrefix(net.sourceforge.jrefactory.ast.ASTPrimaryPrefix pp)