如何使用 intellij-idea 查找 kotlin 中已弃用代码的用法

问题描述 投票:0回答:3

我想自动查找我的 kotlin 应用程序中使用已弃用代码的所有情况(主要是注释为已弃用的方法)

我说的不是 kotlin 规范中已弃用的 kotlin 代码,我指的是调用已弃用函数/方法的 kotlin 代码。

已弃用函数所在的源可能是 kotlin 或 java 库。

我发现了非常好的工具,可以通过 intellij idea 在 java 代码中查找类似问题,例如:

  • 代码 -> 检查代码
  • 代码 -> 分析代码 -> 按名称检查 -> 已弃用的 API 用法
  • 编辑 -> 查找 -> 结构查找 -> 选择模板已弃用的方法(仅适用于 java)

但我没有找到任何类似的 kotlin 搜索选项的方法。

我尝试自己构建一个“已弃用的 api 使用结构搜索”模板,但 kotlin 似乎不支持归档此模板的基本功能。

唯一有效的非手动功能是我当前所在文件的本地代码分析(右上角的这个小后面,您可以在其中看到问题的数量(并且可以单击它们将它们放入列表中) ))

这可行,但如果我对洞文件夹进行代码分析,则不推荐使用的用法不存在。

我需要一个扫描漏洞代码库的解决方案,而不是手动从一个文件单击到另一个文件。

编辑: 请注意,现在已经为 jetbrains 创建了一张票证:https://youtrack.jetbrains.com/issue/IDEA-311206

因为目前似乎没有解决方案或解决方法。

kotlin intellij-idea refactoring
3个回答
0
投票

@Deprecated 警告是编译器警告,目前还无法通过 IDE 检查搜索找到它。请关注问题 — https://youtrack.jetbrains.com/issue/KTIJ-12494/Analyze-Inspect-code-Inspection-results-show-compiler-warnings


0
投票

我现在从 jetbrains 上针对该主题的(第二张)票证中得到了答案和可行的解决方案(一张票用于检查代码分析,一张票用于结构搜索): https://youtrack.jetbrains.com/issue/KTIJ-24477

事实证明,我在

Reference
变量上使用的结构搜索模板
$MethodCall$
属性“已弃用的方法”(与现有模板“方法调用弃用方法”中的 java 的方式相同)不支持Kotlin 模板。

事实上,这个

Reference
属性的工作方式与我想象的不同,但它也更通用和强大。您可以选择任何结构搜索模板作为“预处理”搜索,这会限制当前模板的输入(至少目前这是我的概念模型)

这适合我从 jetbrains 获得的解决方案,这意味着我正在执行以下操作:

首先创建一个新模板来查找标记为已弃用的 kotlin 方法:

@Deprecated($Parameters$) 
fun $MethodCall$($Parameter$)

然后用类似

deprecated kotlin methods
的名称保存它。

然后创建一个新模板来查找调用此类已弃用方法的代码。模板看起来像:

$MethodCall$.($Parameters$)

参数设置范围为

0 - *
之间。 现在将
Reference
属性设置为预先编写的自定义模板(在本示例中,其名称为
deprecated kotlin methods

现在找到了这些对已弃用的 kotlin 方法的调用!

如果您想找到您的 kotlin 代码库调用的已弃用的 java 代码(例如,位于库内部),那么您可以执行相同的方法。但这次您为

Reference
属性创建一个自定义模板,该模板基于 Java 并使用 Java Deprecated 注释。将其组合到 kotlin 模板中似乎可行。


0
投票

虽然 Intellij 不支持开箱即用,但我解决问题的方法是:

  1. 从编译器收集警告
./gradlew :classes :testClasses | grep ' is deprecated' > deprecated.txt
  1. 之后,“代码 -> 分析堆栈跟踪或线程转储”并粘贴
    deprecated.txt
    的内容,以便轻松导航到使用已弃用的 API 的代码行。
© www.soinside.com 2019 - 2024. All rights reserved.