我正在 IJ 中开发 Java 代码库,目前正在使用 Maven 构建。我想用某种形式的合同来补充一些代码,这些合同将在 Maven 构建中获得。到目前为止,我一直没有成功寻找这种现成的功能:
- OpenJML,但这似乎需要它自己的工具来分析您的代码,我找不到将其轻松集成到构建中的方法。
- Jetbrains 合同。这些将通过检查在 IntelliJ 中发出警告,但它们不会影响构建。
注意:我只关心编译时可检查的合约。我有 JUnit 来处理运行时方面的问题。
执行合同:
我添加了这一部分来回答询问我想要执行什么样的合同的评论。理想情况下,我想要最强大的解决方案,条件是该解决方案是完整的。当我在这里说完整时,我的意思是一种合同语言和一个合同检查器,这样语言中的每条语句都可以在编译时由检查器检查为好/坏。我知道这可能是一个很大的问题,但即使是最简单的合同,例如Jetbrains 提供的合同,我也会感到满意。
对于一个具体的例子,考虑这个函数:
public static Long safeToLong(String value) {
if (value == null) {
return null;
}
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
return null;
}
}
这成功通过了 Jetbrains 合约:
@Contract("null -> null")
并未能完成这个人为的合同:
@Contract("null -> !null")
但是有了上述人为的、糟糕的合同,Maven 构建仍然可以正常工作。构建不会获取检查结果 - 这些仅在 IJ 内可见。如果违反任何合同,我希望能够参与构建并失败。