Intellij IDEA 13:如何禁用重构注释和string?

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

我正在尝试重构类variablesvalue ,这发生的地方。 这意味着没有对话popup; 我按回车,它试图重构整个项目,包括评论和什么不包括:

 <%--<link href="<c:url value="../core/core.css" />" />--%> 

在.jsp文件中。 尝试重构整个项目的评论意见 ,这太“聪明”了。 这通常会导致很多错误风险,并且在Java环境中重构已经不再安全。

同样的事情发生在Intellij 12.严重的是,我不需要Intellij来推荐任何被认为是不安全的东西,或者当它不确定它是同一件事时!

我可以排除这些重构,但是我没有时间每次评估五个“build议”。 它只是提高了人为错误的机会:大部分时间我只是按下input,woops的东西是重构的。

重构也是Java环境中的一个主要问题,有时它会试图replace.js文件中的东西。 严重的是,这必须停止。

没有popup对话框,我不能取消“searchstring”。 即使勾选了,Intellij也不应默认包含这些build议,特别是当它位于当前文件之外时。 它可以推荐重构它们,但是它们应该被默认排除。 也就是说,它应该是一个select性的function,而不是默认的摧毁一切。

对于最近所谓的“智能”Intellij重构,这是一个严重的用户体验问题。 重构JS文件时,我不想searchJava文件的注释或string! 期! 反之亦然!

安全第一! 知道自己在做什么的开发人员会根据需要自行searchstring。 在一个dynamic的语言环境中,它使得Intellij无法使用,因为经常和没有任何明确的模式,有时会重构,有时它改变整个项目的事情,而不是。

应该有一个选项,说:“只重构相对于这个文件或100%推断!”,特别是对于dynamic语言! 对于静态语言,甚至不应该尝试在文件外寻找注释和string。

我不是故意公开发表的,但两年前我在这个臭虫追踪系统中提出过这个问题,但没有人注意。

编辑

对于那些认为我可能会走得很远的人,我只是试了一下:

有了这门课:

 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 ,我得到以下build议,从灾难中得到一个ENTER,我必须一次评估和排除一个。 这需要努力,只是烦人和冒险。 就像有人大喊大叫,停下来! 然后哦,没有一分钟后,无奈和一个1000字长的文章(这)。

在这里输入图像说明

严重的是,有没有办法来禁用这种危险的行为!? 有什么理由为什么这是默认情况下?

当您按Shift + F6 (Refactor Rename)两次,它将打开对话框,您可以禁用“search注释和string”

有什么理由为什么这是默认情况下?

就在这里。 现在人们倾向于使用太多的DSL,模板和语言注入。 在普通的老Java中,所有这些东西主要是作为string存在的。 Reflection API还将方法/类名称表示为String。 任何IDE都不可能支持和识别它们,所以最好为您提供一个安全网,以防止可能的重构错误。 如果你有一个很好的unit testing覆盖率,那么你在这里可能是安全的。

至于评论,他们通常包含代码示例。 这些代码块在重新编译期间会很快过时,所以当IDE提醒您时,这些代码块会很有帮助。

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

如果您还不确定,请按照@Meo的build议,禁用string和注释中的search。