我有一个类在内部缓存一组值。这些值可以定期更新,并且缓存的内容将适当更新。只要此类的用户执行以下操作:

...
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

10-05 18:50