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