Lint 修复 UClass 中的添加方法

Lint Fix add method inside a UClass

我目前正在为我创建的库编写自定义 lint,并且我已经实现了大部分内容。

困扰我的是如何创建 quickDataFix 以在 UClass.

中添加方法

例如:我有以下代码,其中将应用 LintFix

class TestClass {
}

应用修复后,它应该变成

class TestClass {
    fun method1() { }
}

到目前为止,我一直在尝试这条规则。

val fix = LintFix.create()
    .replace()
    .name("Add method")
    .pattern("TestClass(.*)")
    .with("TestClass {\nfun method1() { }\n")
    .shortenNames()
    .range(context.getLocation(clazz.scope)) // 'context' is JavaContext & 'clazz' is UClass
    .build()

但似乎没有任何效果,我尝试使用谷歌搜索并查找具有 lint 检查的项目,以便我可以阅读源代码并尝试解决我的问题,但没有成功。

任何帮助将不胜感激。

经过大量的试错方法终于成功了。我知道怎么做了。

好吧,与 UMethod 不同,UClass 提供上下文直到它成为 className。所以我们需要修改它的范围,使整个 class 范围都可用。这可以通过 JavaContext.getRangeLocation()

轻松完成
val fix = LintFix.create()
    .replace()
    .name("Add method")
    .pattern("TestClass(.*)")
    .with("TestClass {\nfun method1() { }\n")
    .shortenNames()
    .range(context.getRangeLocation(clazz.navigationElement, 0, clazz.asSourceString().length))
    .build()

这里 fromDelta 是 0 & toDelta 是整个 class 文本的长度。