修改一个Kotlin类

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

我使用的方法

PsiClass.getMethods() 

以获得Java和Kotlin类的所有方法。 到目前为止好,那么我使用类似的方法

 PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore() 

一旦它们被调用到Java文件上,它们都可以正常工作,但是却开始抛出一个exception

 IncorrectOperationException 

一旦我把他们叫做Kotlin课堂。

我很感激任何提示,我可以修改Kotlin和Java类(最好使用相同的方法)。

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

但是,如果类是Kotlin类,则navigationElement将返回不是从PsiClass派生的PsiClass 。 您将不得不使用Kotlin层次结构中的工具对其进行修改。 Kotlin中的方法实例也不是PsiMethod实例,而是KtMethod实例。

为了以一种常见的方式分析Java和Kotlin源代码,有一种叫做“UAST”的不同的语法树,但是对于修改,你需要一种特定于语言的方法。