【问题标题】:Custom Android Lint for kotlin only (no java)仅适用于 kotlin 的自定义 Android Lint(无 java)
【发布时间】:2019-04-20 08:27:42
【问题描述】:

我决定为 Android 编写自定义 lint 检查,并且我坚信 Android Lint,所以我不想使用 detektktlint 来检查代码(它们无法解析 xml 文件等我想使用一个工具)。

但是当我阅读 Android Lint 的文档时,我发现他们有这个新的 UASTPSIcom.intellij.psi 包)的东西,当 detekt 使用它的孩子时(仅限 Kotlin org.jetbrains.kotlin.psi) .

我的项目中没有 java 代码,我想编写 kotlin 特定的 lint 规则。

我明白了,com.android.tools.lint.detector.api.Detector 有一个方法createPsiVisitor,它返回JavaElementVisitor,而这个JavaElementVisitorcom.intellij.psi.PsiElementVisitor 的子类。有没有可能改用org.jetbrains.kotlin.psi.KtVisitor

或者我如何在Detector.UastScanner 中编写 kotlin 特定检查?

我想(例如)为

写规则

Kotlin 隐藏成本集文章(123

附:我在detekt 中成功做到了这一点,但我想使用默认的 Android Lint。

[UPD] 我找到了com.android.tools.lint.checks.InteroperabilityDetector。可能可以写成KotlinVisitor(在这个类中就像JavaVisitor)。而这个KotlinVisitor 将只是KtVisitor 的包装?

【问题讨论】:

    标签: java android kotlin lint


    【解决方案1】:

    在 3.4 版中,Kotlin PSI 可直接用于自定义 lint 检查(位于类路径中)。当您收到一个 UFile(Java 和 Kotlin AST 之上的 UAST 抽象)时,它有一个 sourcePsi 字段,可以为您提供 KtFile。

    您可以阅读/加入一个“lint-dev”Google 小组,以更详细地讨论 lint 检查开发。

    【讨论】:

    • 你是说3.4的android gradle插件?
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2020-12-16
    • 2017-03-09
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多