当前位置: 首页 > 知识库问答 >
问题:

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

薛修能
2023-03-14
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%推断时重构!”,尤其是对于动态语言!对于静态语言,它甚至不应该尝试在文件之外查找注释和字符串。

我并不是有意将其公开,但我在两年多前的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";
}

重构时。val像以前一样,我得到了以下建议,一个来自灾难的输入,以及一些我必须一次评估和排除的东西。这需要努力,而且很烦人,也很危险。就像有人大喊:住手!然后,哦,一分钟后什么都没有,沮丧和一篇1000字的文章(这篇)。

说真的,有没有办法阻止这种危险行为!?有什么原因可以解释为什么默认情况下会启用此选项??

编辑20200706

2020年大便仍在继续:https://youtrack.jetbrains.com/issue/IDEA-245370

共有2个答案

商正诚
2023-03-14

有什么原因可以解释为什么默认情况下会启用此选项??

是的,有。现在人们倾向于使用太多的DSL、模板和语言注入。在普通的旧Java中,所有这些东西主要以字符串的形式存在。反射API还将方法/类名表示为字符串。任何IDE都不可能支持并识别它们,所以最好为您提供一个安全网,以防可能的重构错误。但是,如果您具有出色的单元测试覆盖率,那么您在这里可能是安全的。

至于注释,它们通常包含代码示例。这些代码块在重命名过程中很快就会过时,所以当IDE提醒您它们的存在时,这会很有帮助。

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

如果你仍然不相信,那么按照@Meo的建议,禁用字符串和注释中的搜索。

荆城
2023-03-14

当您按Shift F6(重构重命名)两次时,它会打开对话框,您可以禁用“在注释和字符串中搜索”

 类似资料:
  • 问题内容: 我已经考虑了很长时间了,我需要一种对数据库中的注释添加答复的方法,但是我不确定如何进行。 这是我当前的注释表(不多说,只是一个开始): 这是我当前的查询: 一种选择是创建一个名为“ comment_replies”的新表,但是我不确定是否能够在一个查询中选择所有评论和评论回复,如果我添加了一个名为“ reply”的新列,不知道如何对它们进行排序,以获取每个回复的每个评论。 我很想获得一

  • 问题内容: 是否有注释声明某个方法即使是公共的也不会包含在JavaDocs中? 就像是: 附言:我了解这里有关API的要点,但是这些方法只是“不受支持”。它们可以工作(并且必须是公共的,以便从其他软件包访问),但是我们不希望在它们的功能与受支持的使用场景无关时,对其进行记录并回答有关如何使用它们的问题。好的设计可能意味着将它们移到另一个类,但是它们在逻辑上引用了该类中的数据。 问题答案: 如果您使

  • 我正在使用jackson库,我遇到了一种情况,我想在序列化/反序列化时使用对象映射器禁用@JsonFormat注释。 我的Api代码在第三方库中,所以我不能删除/添加任何注释,所以objectMapper是唯一的选择。 Api类别: 我的代码: 我希望这种转换成功发生。 目前我得到了:com.fasterxml.jackson.databind。JsonMappingException:格式无效:

  • 我想完成但不明白它是如何工作的 使用这段代码,我想注释生成它们各自的setter和getter,这样我就可以使用像 编辑2013-10-25 我的目标是构建一个能够做到这一点的库,因为我太好奇了,想了解如何在内部工作,所以我将能够用这个特性来支持我的框架,因为jet只是一个小实用程序,但在未来我希望它能为我节省大量的工作,你可以在github WSD Android上看到

  • 在过去,我使用Spring的XML配置连接bean,在这种情况下,我可以这样做(假设bean有属性的公共setter): 当使用基于注释的配置时,是否存在类似的情况?

  • 问题内容: 我已经声明了这样的注释: 因此,有效的注释将是 我不知道的是,如何设置多个作者,因为author()返回了String [],这应该是可能的。 不起作用! 问题答案: 像这样做: 和您的注释: