对类的公共方法禁用“未使用”警告

Posted

技术标签:

【中文标题】对类的公共方法禁用“未使用”警告【英文标题】:Disable "not used" warning for public methods of a class 【发布时间】:2011-09-04 05:05:11 【问题描述】:

新的 intellij 升级 (10.5) 现在显示警告,指出为类定义的某些方法未使用。这些方法是公开的,我计划不使用所有方法,因为我创建它们是为了支持预期的 API。我想禁用此警告(不用于类中的公共方法)。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

禁用Settings | Inspections | Declaration redundancy | 未使用的声明代码检查。作为一个选项,您可以为您的 API 类创建一个自定义范围,并仅针对每个 API 范围禁用此检查,以便它在项目的其余部分仍然有效。

【讨论】:

太糟糕了,没有选项只能对公共方法禁用此检查并为私有方法保持启用状态。 有,看我的其他回答。 又不见了。请参阅@DarekKay 答案下的 cmets。【参考方案2】:

这是一个旧线程,但我最终到达这里的速度比我找到解决方案的速度要快,所以我将继续分享我的发现。 首先,我不确定我们是否使用相同的语言(此处为 JS),但使用基于 GUI 的工具,这就是我最终得到的结果。 以下代码给了我臭名昭著的“未使用”警告:

/**
 * @class sample class
 */
var MyClass = function () 
    return this;
;

/**
 * Some public method
 * @api public
 */
MyClass.prototype.myMethod = function () 
    return null;
;

出现“未使用的定义 myMethod” 检查员最终建议通过添加来忽略此特定问题

//noinspection JSUnusedGlobalSymbols

就在此特定方法的顶部,以便以下代码不再导致此警告:

//noinspection JSUnusedGlobalSymbols
/**
 * Some public method
 * @api public
 */
MyClass.prototype.myMethod = function () 
   return null;
;

其他警告(拼写错误等)似乎仍然出现,包括未使用的局部变量和参数,因此它似乎隔离了这个特定问题。 缺点是如果你有很多代码,它往往会污染你的代码......

【讨论】:

没错。当 Intellij 的开发人员可以简单地解决问题时,这就是代码污染。无论如何,对此有什么新想法吗? 注意:你可以让phpstorm自动添加“//noinspection JSUnusedGlobalSymbols”通过使用“显示意图动作”对话框>“抑制语句”。我可以使用键盘快捷键 alt+enter 访问它,具体取决于您的键映射。【参考方案3】:

IDEA 2016.3

在即将发布的版本IDEA 2016.3(已提供预览版)中,现在可以调整检查范围:

如果要突出显示未使用的公共方法,请启用“设置|检查|声明冗余|未使用的声明”全局检查。

如果要突出显示未使用的私有方法,请启用“设置|检查|声明冗余|未使用符号”本地检查。

因此,如果您想突出显示未使用的私有成员,但不突出未使用的公共成员,请关闭“未使用的声明”并打开“未使用的符号”。

Source

我刚刚使用 IDEA 13.1.4 对其进行了测试,它的工作方式与描述的完全一样。

IDEA 14.x

在 IntelliJ IDEA 14.0.x 中,设置位于:

Settings | Editor | Inspections | Declaration redundancy | Unused symbol/declaration

在 IntelliJ IDEA 14.1 中,该选项似乎消失了..

【讨论】:

IDEA 14 中似乎已经进行了“未使用符号”检查。 完全没有,它在Settings | Editor | Inspections | Declaration redundancy | Unused symbol 下。如果找不到,请在设置对话框的搜索框中输入Unused symbol 我已经试过了。我在 IDEA EAP 141.814.3。这是屏幕截图 - imgur.com/cfOa48M 你是对的,在 14.0.3 中它仍然存在。现在我找不到它或任何替代品。 提交了一份问题报告,我们应该投票支持它,以便 JetBrains 解决此问题 - youtrack.jetbrains.com/issue/IDEA-148321【参考方案4】:

您可以为这样的单个方法禁用它

@SuppressWarnings("unused")
public void myMethod()...

【讨论】:

完美!我不想为我的新代码关闭警告,只是希望它关闭可能通过某些“Spring-etti”“反映”的遗留代码。 你需要告诉 Intellij 一个 PUBLIC 方法可以被 Intellij 看不到的代码使用,这有点傻…… 真的很难过。我发现 Intellij 非常烦人。我猜他们的意图是好的,但我发现自己在编码时与之抗争。右侧滚动条充满了错误的标志警告,而不是真正的问题警告。 @TatiOverflow:通过右键单击右侧栏并选择“自定义突出显示级别”,您可以完全删除检查。 好像改名为@Suppress("unused")。此外,它可以在右键单击 -> 禁用此行的检查中找到。【参考方案5】:

我认为避免突出显示未使用的公共方法的最佳方法是在您的 API 中为这些方法编写几个测试。

【讨论】:

【参考方案6】:

我刚刚点击了“禁止声明”,webstorm 在前面加上了这个:

//noinspection JSUnusedGlobalSymbols

【讨论】:

【参考方案7】:

在最新版本中,此选项在Settings>Inspections>Java>Declaration redundancy>Unused declaration>Methods 下,取消选中不需要的选项。

【讨论】:

【参考方案8】:

2018-2019

以下是 2019 年的更新: IntelliJ IDEA 2018.3.2(社区版) 构建 #IC-183.4886.37,于 2018 年 12 月 17 日构建

设置 |编辑 |检查 |申报冗余 |未使用的声明

【讨论】:

是否有必要拥有专业版才能获得所有这些选项?因为我没有它们,所以我只有“未使用的声明”。也许是因为我正在从事一个 groovy 项目……但仍然如此。 这是因为我在做一个 groovy 项目,它们在 java 中 IMO 更好的方法是将类标记为“入口点”。 图片价值超过1000字。您能否添加解释并链接到 IntelliJ 帮助站点以使用户了解此功能和配置?例如观看 Trisha Gee 解释 Unused Code Detection in IntelliJ @TanyaJivvca 您的建议激发了我的研究和回答:我们应该通过测试传达预期用途,以便它被使用和记录(作为入口点 i>) ?【参考方案9】:

最近在扩展库时,我也收到了“未使用”检查警告。

思考 IntelliJ 发出信号的原因

通常在重构所有未使用方法/参数时应该可以安全地删除(通过Intellij的安全删除操作)。

IntelliJ(如 Checkstyle 等)的意图是支持我们的简洁设计。由于未使用的方法既没有在内部使用(在src/java/main)也没有在外部测试(在src/java/test),它们似乎已经过时了。那么,为什么不遵循“有疑问,就扔掉它”这句话。

在重构时,这主要是一个真正的建议。 但是,如果我们正在开发一个旨在供其他代码库(来自外部的模块/依赖项)使用的库/API,那么我们宁愿回答“不使用时会感到困惑”。

我们对 IntelliJ 的警告感到惊讶。不应删除这些方法,因为它们实际上打算在其他地方使用。它们是入口点

然后选择合适的解决方案

以下所有解决方案都有一个共同点:

通过您的代码进行交流,以便每个 IDE 和开发人员都能理解(例如,添加一个测试以便使用它) 告诉你的意图(例如通过重新配置代码检查告诉 IntelliJ)

配置检查或禁用

如各种早期答案中所述。带有 IntelliJ 代码检查设置的屏幕截图和导航提示

添加测试

如果您为未使用的(方法、类等)添加测试,您将受益于 3 种方式:

    正确性:(以前)未使用的被测对象(SUT)已测试 沟通:您清楚地与每位读者沟通,那个以及如何您未使用的(方法、类等)应该被使用 clearance:现在未使用的终于被使用了。所以 IntelliJ 的检查不会再发现和警告了。

添加或标记为入口点

我多次看到这个建议:

作为 IntelliJ 的 Inspection Settings 内的可选 对话框选项卡 作为comment below top-ranked answer:

IMO 更好的方法是将类标记为“入口点”。 – Tanya Jivvca 8 月 18 日 8:46

在 IntelliJ 的论坛中:Code inspection: unused element - what is an entry point?(我在下面的引用中强调):

将元素添加为入口点。默认情况下,全局范围以及测试中的所有代码都被视为可达。如果您知道执行了某个方法或函数,则可以将其添加为入口点。入口点内的代码现在也已执行并可访问。 当您添加入口点时,您的源代码文件不受影响,并且元素的记录与项目一起存储在.idea\misc.xml 下。

【讨论】:

【参考方案10】:

也许entry points 功能可以工作,您可以在其中指定可以禁用警告的代码模式Settings | Inspections | Declaration redundancy | Unused Declaration | entry point

【讨论】:

以上是关于对类的公共方法禁用“未使用”警告的主要内容,如果未能解决你的问题,请参考以下文章

如果我未能为公共字段和方法提供 JavaDoc 描述/注释,如何让 IntelliJ 给我一个警告?

如何轻松找到未使用的公共方法/属性

如何在 Clojure 中调用公共类的非公共方法?

findbugs 可以检测未使用的公共方法吗

如何对类中的私有成员变量进行赋值和访问

Java语言类的特性