我想为Intellij IDEA编写一个应该修改Java和Kotlin代码的插件。
我使用方法
PsiClass.getMethods()
以获取Java和Kotlin类的所有方法。到目前为止一直很好,所以我使用像
这样的方法PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore()
一旦在Java文件上调用它们一切正常,但开始抛出异常
IncorrectOperationException
一旦我在Kotlin班上打电话给他们。
我很欣赏任何关于如何修改Kotlin和Java类的提示(最好使用相同的方法)。
答案 0 :(得分:4)
当你通过JavaPsiFacade
搜索Kotlin类时,它会返回一个浅层表示,它只是基于类文件中的信息。要添加PSI元素,您必须在其上调用navigationElement
。然后,IJ将解析源代码并构建一个可以修改的完整PSI树。
但是,如果该课程是Kotlin课程,navigationElement
将返回KtClass
,而该PsiClass
不是来自PsiMethod
。您将不得不使用Kotlin层次结构中的工具来修改它。 Kotlin中的方法实例也不是KtMethod
的实例,而是{{1}}的实例。
为了以一种常见的方式分析Java和Kotlin源,有一种称为" UAST"的不同语法树,但是对于修改,您需要一种特定于语言的方法。