为一个类的公共方法禁用“未使用”警告

93

最新版的IntelliJ(10.5)现在会显示一个警告,指出一些类定义的方法未被使用。这些方法是公共的,而我计划不使用它们,因为我已经创建它们来支持所需的API。我希望禁用此警告(对于类中未使用的公共方法)。有没有办法做到这一点?

10个回答

78

您可以像这样针对单个方法禁用它

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

5
完美!我不想关闭新代码的警告,只是希望它不要再提醒那些可能通过某个“Spring-etti”片段反映出来的遗留代码。 - Roboprog
22
需要翻译的内容:It is a bit silly that you need to tell Intellij that a PUBLIC method can be used by code Intellij doesn't see...有点儿蠢,你需要告诉Intellij一个公共方法可被Intellij没有看到的代码使用... - Florian F
2
这真是令人伤心。老实说,我觉得Intellij非常烦人。我猜他们的意图是好的,但是在编程时,我发现自己经常要和它斗争。右侧的滚动条充满了虚假的警告标志,而不是真正的问题警告标志。 - TatiOverflow
@TatiOverflow:通过右键单击右侧栏并选择“自定义突出级别”,您可以完全删除检查。 - Erk
4
似乎已经改名为@Suppress("unused")。同时,它可以在右键单击->禁用此行检查中找到。 - Polv

63

IDEA 2016.3

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

enter image description here

< IDEA 14.0

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

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

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

来源

我刚测试了一下,在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中消失了。 - trustin
1
完全不是问题,它在“设置 | 编辑器 | 检查 | 声明冗余 | 未使用的符号”下。如果您找不到它,请在设置对话框中的搜索框中键入“未使用的符号”。 - Darek Kay
我已经尝试过了。我使用的是 IDEA EAP 141.814.3 版本。这是截图 - http://imgur.com/cfOa48M - trustin
2
你说得对,在14.0.3版本中它还在。现在我找不到它或任何替代品了。 - Darek Kay
1
有一个问题报告已经提交,我们应该为它投票,以便JetBrains修复它-https://youtrack.jetbrains.com/issue/IDEA-148321 - trustin
最新的 EAP 版本提供了一个改进的选项(更新的答案)。 - Darek Kay

42

禁用 设置 | 检查 | 声明冗余 | 未使用的声明 代码检查。作为一种选项,您可以为您的 API 类创建一个自定义范围,并仅在 API 范围内禁用此检查,以便它仍然在项目的其余部分中起作用。


34
很遗憾没有选项只能禁用公共方法的检查,而保持它对私有方法启用。 - CarlG
2
有的,可以看看我的另一个回答。 - Darek Kay
1
又消失了。请查看@DarekKay答案下的评论。 - Mark Jeronimus

12

2018-2019

这里是2019年的更新版本: IntelliJ IDEA 2018.3.2(社区版) 构建号:IC-183.4886.37,构建于2018年12月17日

设置 | 编辑器 | 检查 | 声明冗余性 | 未使用的声明

输入图片描述


需要专业版才能获得所有这些选项吗?因为我没有它们,我只有“未使用的声明”。 也许是因为我正在处理 Groovy 项目... 但仍然如此。 - Milan
这是因为我正在开展一个Groovy项目,它们基于Java。 - Milan
1
我认为更好的方法是将类标记为“入口点”。 - Tanya Jivvca
一张图片胜过千言万语。您能否添加说明并链接到IntelliJ帮助网站,以便用户了解此功能和配置?例如,观看Trisha Gee解释IntelliJ中的未使用代码检测 - hc_dev
@TanyaJivvca,您的建议激发了我的研究和回答:我们应该通过测试来沟通__预期使用__,以便它成为被使用和记录下来的(作为入口点)。 - hc_dev

12

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


8
在最新版本中,这个选项在设置>检查>Java>声明冗余>未使用的声明>方法下,请取消不需要的选项。

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;
};

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


1
没错。这就是代码污染,当Intellij的开发人员可以轻松解决这个问题时。无论如何,对此有任何新想法吗? - TatiOverflow
注意:您可以通过使用“显示意图操作”对话框>“抑制语句”让phpstorm自动添加“//noinspection JSUnusedGlobalSymbols”。您可以根据您的键映射使用快捷键alt+enter来访问此功能。 - kosinix

2

最近我在扩展一个库时,也被“未使用”的检查警告所提醒。

思考IntelliJ为什么会发出信号

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

这样做的目的是支持我们的清洁设计,就像Checkstyle和其他工具一样。由于未使用的方法既不在内部使用(在src/java/main中),也没有外部测试(在src/java/test中),它们似乎已经过时了。那么为什么不遵循格言“当你犹豫时,把它扔掉”呢?

在重构时,这通常是一个正确的建议。 但如果我们正在开发一个旨在被其他代码库(来自外部的模块/依赖项)使用的库/API,那么我们更应该回答“当未使用时,请搞清楚”。

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

然后选择合适的解决方案

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

  • 通过你的代码进行沟通,这样每个IDE和开发者都可以理解(例如添加一个测试以便它被使用)
  • 表达你的意图(例如通过重新配置Code Inspection告诉IntelliJ)

配置检查或禁用

如先前的回答所述。附有屏幕截图和导航提示,指向IntelliJ的 Code Inspection 设置

添加测试

如果你为未使用的内容(方法、类等)添加一个测试,你将从以下三个方面受益:

  1. 正确性:测试未使用的测试主体(SUT)
  2. 沟通:你清晰地向每个读者传达了你未使用的内容应该如何使用
  3. 清除:现在未使用的内容终于被使用了。因此,IntelliJ的检查不再会发现并警告。

添加或标记为入口点

我多次看到了这个建议:

我认为更好的方法是将类标记为“入口点”。- Tanya Jivvca Aug 18 at 8:46

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

2
我刚刚点击了“抑制语句”按钮,WebStorm 自动添加了以下代码:
//noinspection JSUnusedGlobalSymbols

0
也许可以使用“入口点”函数,您可以在其中指定可以禁用警告的代码模式
设置 | 检查 | 声明冗余性 | 未使用的声明 | 入口点

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接