4

我最近一直在使用声纳进行代码分析。当我进行彻底的违规钻取时,我发现许多 java 文件定义了没有大括号的 if 语句(数千个地方)。有没有一种简单的方法来替换或添加大括号到 if 语句或者我可以执行哪些步骤来完成此任务而无需在每个文件中手动执行。

我目前正在使用 IntelliJ。

4

3 回答 3

6

有没有一种简单的方法来替换或添加大括号到 if 语句或者我可以执行哪些步骤来完成此任务而无需在每个文件中手动执行。

我不知道是否有工具可以自动执行此操作。(可能有......)但假设存在这样的工具,我不相信它会是正确的方法。

回过头来想想为什么代码分析报告这是一个问题。很多人(比如@pst 和我)认为大括号应该一直存在,尽管各种风格指南并不坚持这一点。这有一个很好的理由......除了“它看起来很丑”。考虑这些示例代码片段:

if (i == 1) 
    i++;
    doSomething();

while (i < 1)
    i++;
    doSomething();

如果您不仔细阅读这些内容,您的眼睛会诱使您认为这doSomething();是有条件的……由于不正确的缩进。它发生了。

(此外:将某人标记为“无能”以误读该代码并没有帮助。如果您拼命尝试修复一个显示停止器的错误并且您已经连续工作了 14 个小时,那么您可能会错过这种事情. 并不是因为你无能。一旦你经历过几次这种情况,教训就会消失......)

好的,现在假设您运行一个自动工具来添加大括号。你会得到的是这样的:

 if (i == 1) {
    i++;
 }
    doSomething();

 while (i < 1) {
    i++;
 }
    doSomething();

它的含义与原始代码完全相同。 但是......如果原始代码实际上是一个错误怎么办?如果程序员希望doSomething()调用是有条件 的怎么办?

简而言之,通过自动添加大括号,我们掩盖了原始程序员的意图,并使这些错误更难追踪。


底线 - 我认为手动审查这些事件中的每一个是谨慎的......而不是仅仅自动“修复”它们。事实上,我认为如果您没有时间或耐心手动查看它们,最好不要管代码。最好关闭警告... IMO。

于 2012-08-21T00:49:52.580 回答
5

我可以重新格式化代码以让 IntelliJ 为我做这件事,但我需要检查所有文件并重新格式化它。是的,我可能会关闭检查,但想知道是否有一个很好的工具来完成这项任务。我有一套很好的测试来检查它是否在这个过程中引入了错误。

如果您确定有一些方法可以测试您不会引入错误,请使用 IntelliJ重新格式化代码功能。

只需确保您在 IntelliJ 中的代码风格符合您公司的政策。否则你也会把你的风格强加给其他人。

要强制使用大括号,只需将它们标记为IntelliJ代码样式设置对话框中AlwaysWrapping and Braces标签。

在项目视图中标记源文件夹并按Ctrl-Alt-L。会弹出一个对话框,您可以在其中选择All files in directory <...>

然后按Run,看看会发生什么。如果您不满意,请从您的 VCS 中恢复。

于 2012-08-21T05:43:59.360 回答
0

IntelliJ IDEA 也对此进行了检查,它有一个快速修复来自动添加大括号。

调用Analyze | Run Inspection by Name并输入检查名称Control flow statement without braces。在项目的所需部分运行它。在检查结果中,您可以应用快速修复Add braces to statement

请注意,此检查还将报告除 之外的控制流语句if,例如示例while语句。调用快速修复还将为这些语句添加大括号。

于 2019-07-14T19:15:32.677 回答