我最近使用声纳进行代码分析。当我彻底违反钻取时,我发现许多带有if语句的java文件没有大括号(数千个地方)。是否有一种简单的方法可以替换或添加if语句的大括号,或者我可以执行哪些步骤来完成此任务,而无需在每个文件中手动执行此操作。
我目前正在使用intelliJ。
答案 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
语句。调用快速修复程序还将在这些语句中添加括号。