修改一个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”的不同的语法树,但是对于修改,你需要一种特定于语言的方法。