跳至主要內容

Kotlin @Suppress 的取值

guodongAndroid大约 2 分钟

最近在 Kotlin 中使用 @Suppress 注解时不知道要填入哪些值。查找了一些资料,在这里记录一下。

@Suppress 注解如何使用,这里不再赘述。

@Suppress 注解的取值在 Kotlin 中称为编译器诊断名称。

话不多说,下面直接给出取值来源,目前笔者了解的来源主要有三个:

  1. Kotlin 编译器支持的诊断名称
  2. Kotlin 编译器插件扩展的诊断名称
  3. Java 编译器支持的部分诊断名称

下面对三个取值来源罗列一下:

Kotlin 编译器

Kotlin 编译器内置支持的诊断名称可以在编译器源码中找到,地址如下:

Kotlin 编译器插件

官方的 Kotlin 编译插件有的会扩展诊断名称,举几个例子:

Android Extensions Plugin

NoArg Plugin

Java 编译器

在 Java 中可以使用 @SuppressWarnings 注解,而 Kotlin 中的 @Suppress 注解支持 @SuppressWarnings 注解的部分诊断名称。至于具体支持哪些,没有查到相关资料,只能在实际使用时自己摸索了。

如何使用/找到正确的诊断名称

在实际使用时,如何才能使用/找到正确的诊断名称并给 @Suppress 注解传值呢?下面介绍两种笔者在实际使用过程中总结的经验:

  1. 根据 IDEA 或 Android Studio 的提示
  2. 在 Kotlin 编译器内置支持的诊断名称提示信息中搜索

IDEA / AS

如以下代码,编辑器会提示警告信息:

same parameter value

在提示的代码处使用快捷键 ALT + ENTER 打开上下文菜单,选择 Suppress 'SameParameterValue' for parameter message

same parameter value suppress

最后,代码如下所示,警告信息消失:

same parameter value suppressed

搜索 Kotlin 内置诊断名称

如以下代码,编辑器会提示警告信息:

platform class mapped to kotlin error

这时候我们记录下提示的信息:"This class shouldn't be used in Kotlin",然后在 DefaultErrorMessages.javaopen in new window 中搜索:

kotlin compiler source code

我们可以在 DefaultErrorMessages.javaopen in new window 中搜索到对应的提示信息,其前面的参数就是诊断名称:PLATFORM_CLASS_MAPPED_TO_KOTLIN,把它填入 @Suppress 注解:

platform class mapped to kotlin supressed

当然,对于 PLATFORM_CLASS_MAPPED_TO_KOTLIN,同样可以使用第一种方式:

platform class mapped to kotlin supress