Intellij IDEA 13:如何禁用重构注释和字符串?

时间:2014-01-01 17:21:43

标签: intellij-idea

public class KV<K, V> {
    public K key;
    public V value;
    public KV(K key, V value) {
        this.key = key;
        this.value = value;
    } 
}

我正在尝试重构类变量value,它发生在适当的位置。这意味着没有弹出对话框;我按回车键,它会尝试重构整个项目,包括评论和不包括:

<%--<link href="<c:url value="../core/core.css" />" />--%>
<。>在.jsp文件中。尝试重构整个项目中匹配的评论,这太“聪明”了。这通常会导致很多bug风险,并且在Java环境中进行重构不再安全。

在Intellij 12中也发生了同样的事情。说真的,我不需要Intellij推荐任何被认为不安全的东西,或者当它不确定它是同一个东西时!

我可以排除重构,但我没有时间每次评估五个“建议”。它只会增加人为错误的可能性:大多数时候我只是按下回车键,然后就会重构事情。

当Java环境有时会尝试替换.js文件中的内容时,重构也是一个主要问题。说真的,这必须停止。

没有弹出对话框,我无法取消“搜索字符串”。即使这被勾选,Intellij也应该从不默认包含这些建议,特别是当它在当前文件之外时。它也可以建议重构它们,但默认情况下应排除它们。也就是说,它应该是一个选择加入功能,而不是默认销毁所有内容。

这是一个严重的用户体验问题,最近所谓的“智能”Intellij重构。在重构JS文件时,我不想在Java文件中搜索注释或字符串!期!反之亦然!

安全第一!知道自己在做什么的开发人员会在需要时自行搜索字符串。在动态语言环境中,它使Intellij无法使用,因为经常,并且没有任何明确的模式,有时重构会经历,有时它会改变整个项目的内容,而不是。

应该有一个选项,说“仅相对于此文件重构或100%推断时!”,特别是对于动态语言!对于静态语言,它甚至不应该尝试在文件外部查找注释和字符串。

我并不是故意将其公之于众,但我在2年前曾在bugtracker中提出这个问题,但是没有人注意到它。

修改

对于那些认为我可能会走得很远的人,我只是尝试过这个:

使用这个课程:

public class KV<K, V> {
    public K key;
    public V val;
    public KV(K key, V val) {
        this.key = key;
        this.val = val;
    }
}

并将其添加到任何 Java类,例如:

public class CoreConfig {
    String abc = "kv.val";
    String def = "somethingElse.val";
}

像以前一样重构KV.val时,我会收到以下建议,一个来自灾难的输入以及我必须评估的内容,并且一次排除一个。这需要努力,只是烦人和冒险。这就像有人大喊大叫,停!然后哦,一分钟之后没什么,挫折和一篇1000长的文章(这个)。

enter image description here

说真的,有没有办法禁用这种冒险行为!?是否有任何理由为什么默认开启?

2 个答案:

答案 0 :(得分:81)

当您按Shift + F6 (Refactor Rename)两次时,会打开对话框,您可以停用“在评论和字符串中搜索”

答案 1 :(得分:8)

  

有没有理由为什么这个默认开启?

是的,有。如今人们倾向于使用过多的DSL,模板和语言注入。在普通的旧Java中,所有这些东西主要以字符串形式存在。 Reflection API还将方法/类名称表示为String。任何IDE都无法支持和识别所有IDE,因此最好为您提供安全网以防止可能的重构错误。如果你有一个很好的单元测试覆盖率,那么你在这里可能是安全的。

至于评论,它们通常包含代码示例。这些代码块在重命名期间很快就会过时,因此当IDE提醒您存在时,它会很有用。

这种检查当然会导致误报。但是,如果您为变量提供描述性的自解释名称(我的意思不是“var”或“val”),则不太可能发生这种情况。因此,IDE正在以某种方式推动您迈向更好的代码风格。

如果您仍然不相信,请遵循@Meo的建议并禁用字符串和注释中的搜索。