修改Kotlin类

时间:2017-01-17 20:02:11

标签: intellij-idea kotlin intellij-plugin

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

我使用方法

PsiClass.getMethods()

以获取Java和Kotlin类的所有方法。到目前为止一直很好,所以我使用像

这样的方法
PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore()

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

IncorrectOperationException

一旦我在Kotlin班上打电话给他们。

我很欣赏任何关于如何修改Kotlin和Java类的提示(最好使用相同的方法)。

1 个答案:

答案 0 :(得分:4)

当你通过JavaPsiFacade搜索Kotlin类时,它会返回一个浅层表示,它只是基于类文件中的信息。要添加PSI元素,您必须在其上调用navigationElement。然后,IJ将解析源代码并构建一个可以修改的完整PSI树。

但是,如果该课程是Kotlin课程,navigationElement将返回KtClass,而该PsiClass不是来自PsiMethod。您将不得不使用Kotlin层次结构中的工具来修改它。 Kotlin中的方法实例也不是KtMethod的实例,而是{{1}}的实例。

为了以一种常见的方式分析Java和Kotlin源,有一种称为" UAST"的不同语法树,但是对于修改,您需要一种特定于语言的方法。