我有一个类在内部缓存一组值。这些值可以定期更新,缓存的内容也会适当更新。只要此类的用户执行以下操作:
...
public void anyMethod(anyParams) {
AnyObject value = CacheClass.getValue(anyKey);
...
}
那么生活就会很好,因为“值(value)”不会在本地维持。但是,如果有人做了这样的事情:
public class MyClass {
private AnyObject value = CacheClass.getValue(someKey);
...
}
然后,如果缓存的值被更新,则它的使用可能看不到新值。
我们通过 Sonar 在构建中使用 findbugs、checkstyle 和 PMD。所以我想知道是否有一种方法可以在这些系统中定义规则来检测和标记上面的第二种使用类型。我从未在任何这些系统中编写过规则,因此希望尽可能多地提供建议(例如,“可以做到,但你真的不想去那里......”:)
最佳答案
在 AST 节点上遵循 XPath 将捕获调用 CacheClass 方法的字段声明。
//FieldDeclaration[//PrimaryExpression/PrimaryPrefix/Name/@Image='CacheClass.getValue']
关于java - Findbugs、PMD 或 Checkstyle 规则来查找字段的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16336216/