PMD provides a very handy method for creating new rules by writing an XPath query. When the XPath query finds a match, a violation is created. Let's take a simple example : assume we have a Factory class that must be always declared final. We'd like to report a violation each time a declaration of Factory is not declared final. Consider the following class: :
public class a {
	Factory f1;

	void myMethod() {
		Factory f2;
		int a;
	}
}
The following expression does the magic we need:
//VariableDeclarator
 [../Type/ReferenceType/ClassOrInterfaceType
  [@Image = 'Factory'] and ..[@Final='false']]
See the XPath rule tutorial for more information.