我从Lock checker那里得到了这个:
-exec cat {} \;
我可以发布代码,但没关系。我只是不了解有关调用副作用方法的文档。
答案 0 :(得分:0)
您的代码如下所示:
@ReleasesNoLocks
void proc() {
...
unfree(); // line 52
...
}
void unfree() {
// arbitrary code that might include someLock.unlock();
}
的文档
@ReleasesNoLocks
说:
该方法及其调用的所有方法都保持严格不减少的锁定保持计数
方法@ReleasesNoLocks
上的proc
注释承诺方法proc
不会释放任何锁。但是,方法unfree
可能会释放一些锁(因为它没有注释为@ReleasesNoLocks
)。如果unfree
释放锁定,则proc
会违反其规范。那就是Lock Checker的消息所说的(以简洁的方式)。
运行时发生的事情有三种可能性:
unfree
确实释放锁定。在这种情况下,你的代码是错误的,Lock Checker已经告诉过你了! @ReleasesNoLocks
上的注释proc
为false。您需要删除该注释或将unfree
更改为不释放任何锁定。unfree
永远不会释放任何锁定。在这种情况下,您应该将unfree
注释为@ReleasesNoLocks
。此时,Lock Checker将能够验证proc
的实施是否满足其规范,因此它将不再发出警告。unfree
有时会释放锁定,有时不释放锁定。您知道proc
正文中的特定呼叫不会释放锁定。在这种情况下,您应该在源代码的第52行写一个@SuppressWarnings("method.guarantee.violated")
注释。关键" method.guarantee.violated"出现在错误消息中。我建议添加一条评论,解释您如何了解这一事实,以便将来知道您编写@SuppressWarnings
注释的原因。