修改一个 Kotlin class

modify a Kotlin class

我想为 Intellij IDEA 编写一个插件,应该修改 Java 和 Kotlin 代码。

我用的方法

PsiClass.getMethods()

为了获得Java和Kotlin classes的所有方法。到目前为止一切顺利,所以我使用

之类的方法
PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore()

在 Java 文件上调用后一切正常,但开始抛出异常

IncorrectOperationException

有一次我在 Kotlin 上给他们打电话 class。

对于如何修改 Kotlin 和 Java classes(最好使用相同的方法)的任何提示,我将不胜感激。

当您通过 JavaPsiFacade 搜索 Kotlin class 时,它 return 是光 class,这是一种仅基于信息的浅层表示在 class 文件中。为了添加 PSI 元素,您必须对其调用 navigationElement。然后,IJ会解析源码,构建完整的PSI树,可以修改。

但是,如果 class 是 Kotlin class,navigationElement 将 return 不是从 PsiClass 派生的 KtClass .您将不得不使用 Kotlin 层次结构中的工具来修改它。 Kotlin 中的方法实例也不是 PsiMethod 的实例,而是 KtMethod.

的实例

为了以通用方式分析 Java 和 Kotlin 源代码,有一个名为 "UAST" 的不同语法树,但对于修改,您需要 language-specific 方法。