我有一个类在内部缓存一组值。这些值可以定期更新,并且缓存的内容将适当更新。只要此类的用户执行以下操作:
...
public void anyMethod(anyParams) {
AnyObject value = CacheClass.getValue(anyKey);
...
}
这样一来,生活会变得很好,因为“价值”将不会在本地得到维持。但是,如果有人这样做:
public class MyClass {
private AnyObject value = CacheClass.getValue(someKey);
...
}
然后,如果缓存的值被更新,则其用法可能看不到新值。
我们通过Sonar在构建中使用findbug,checkstyle和PMD。因此,我想知道是否有一种方法可以在这些系统中的任何一个中定义规则,以检测并标记上述第二种用法。我从来没有在任何这些系统中编写规则,因此希望能获得尽可能多的建议(例如,“可以做到,但是您真的不想去那里……” :)
最佳答案
在AST节点上的XPath之后,将捕获调用CacheClass方法的Field声明。
//FieldDeclaration[//PrimaryExpression/PrimaryPrefix/Name/@Image='CacheClass.getValue']
How to write PMD Custom Rule