2

我有一个类在内部缓存一组值。这些值可以定期更新,缓存的内容也会相应更新。只要此类的用户执行以下操作:

...
public void anyMethod(anyParams) {
    AnyObject value = CacheClass.getValue(anyKey);
    ...
}

然后生活会很好,因为“价值”不会在当地保持。但是,如果有人这样做:

public class MyClass {
    private AnyObject value = CacheClass.getValue(someKey);
   ...
}

然后,如果缓存的值被更新,它的使用可能看不到新值。

我们通过 Sonar 在构建中使用 findbugs、checkstyle 和 PMD。所以我想知道是否有办法在这些系统中定义规则来检测和标记上述第二种类型的使用。我从来没有在任何这些系统中写过规则,所以希望尽可能多地提出建议(比如,“可以做到,但你真的不想去那里......”:)

4

1 回答 1

5

跟随 AST 节点上的 XPath 将捕获调用 CacheClass 方法的字段声明。

//FieldDeclaration[//PrimaryExpression/PrimaryPrefix/Name/@Image='CacheClass.getValue']

如何编写 PMD 自定义规则

于 2013-05-02T11:26:19.897 回答