搜索并替换没有大括号的if语句以包括大括号

时间:2012-08-21 00:14:53

标签: java intellij-idea

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

我目前正在使用intelliJ。

3 个答案:

答案 0 :(得分:6)

  

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

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

退一步,考虑代码分析为什么会将此问题报告为问题。很多人(比如@pst和我)认为括号总是应该在那里,即使各种风格指南都不坚持这一点。这有一个很好的理由......除了"它看起来很丑陋"。请考虑以下示例代码段:

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

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

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

(除此之外:将某人标记为&#34;无效&#34;误读该代码无效。如果您拼命想要修复一个停止错误并且您已经连续工作了14个小时,然后你很可能会错过这种事情。并不是因为你是无能为力的。一旦你曾经遇到过这种情况,这一课就会陷入......)

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

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

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

这意味着与原始代码完全相同。 但是 ...如果原始代码实际上是一个错误怎么办?如果程序员打算 doSomething()调用是有条件的,该怎么办?

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


底线 - 我认为谨慎 手动审核这些事件......而不仅仅是&#34;修复&#34;他们自动。实际上,我认为如果你没有时间或耐心手动审查它们,最好不要单独留下代码。关闭警告会更好...... IMO。

答案 1 :(得分:5)

  

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

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

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

要强制括号,只需在IntelliJ中的代码样式设置对话框中的环绕和括号标记上将其标记为Always

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

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

答案 2 :(得分:0)

IntelliJ IDEA也对此进行了检查,并且具有快速修复以自动添加括号的功能。

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

请注意,此检查还将报告if以外的控制流语句,例如while语句。调用快速修复程序还将在这些语句中添加括号。