如何让IntelliJ警告Optional.get()的不安全用法

时间:2015-12-14 09:52:08

标签: java intellij-idea

我的一些不那么谨慎的同事已经绕过<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script> <script src="http://mjsarfatti.com/sandbox/nestedSortable/jquery.mjs.nestedSortable.js"></script> <div id="main-lists-container"></div>个实例并且假设可以安全地呼叫Optional而不先调用get

我知道......这不应该发生,但类型系统不会阻止它们!

所以,我希望IntelliJ能够做到这一点。是否可以配置IntelliJ,以便在不先调用isPresent的情况下警告(甚至抛出编译错误)关于调用Optional.get()

2 个答案:

答案 0 :(得分:2)

IntelliJ 2016.1支持这种开箱即用的功能!

默认情况下,在未经get()验证的情况下调用isPresent()会发出警告,但您可以转到“检查”屏幕并将Optiong.get() without isPresent() check设置为严重性为“错误”,如果你更喜欢。

答案 1 :(得分:0)

您可以使用检查来标记实例并向您显示警告/错误。这可能是终极专属。

要添加自定义检查,请按照https://www.jetbrains.com/idea/help/creating-custom-inspections.html或执行此操作:

  1. 打开设置(CTRL + ALT + S)并搜索“检查”。
  2. 在树中,找到“常规”,然后找到“结构检索检查”。
  3. 在说明中,您会看到严重性/选项面板。在选项旁边按+,然后添加搜索模板。
  4. 根据您的问题配置检查:

    1. 在搜索模板框中,添加变量,然后添加方法调用,例如:$ Instance $ .get()
    2. 点击编辑变量,然后从列表中选择$ Instance $。
    3. 在“表达式约束”中,添加表达式类型“可选”,并在类型层次结构中应用约束。
    4. 保存更改并运行检查。 (CTRL + Shift + Alt + I,键入“结构搜索检查”)。这应该显示Optional.get()的所有实例。

      编辑:在您的问题中,您询问是否可能出现编译错误。我相信这将严格取决于您如何构建代码。如果您添加检查并将错误级别设置为“错误”,则它应该在Make / Compile上失败但在'mvn install'上失败。