Intellij idea 修改Kotlin类

Intellij idea 修改Kotlin类,intellij-idea,kotlin,intellij-plugin,Intellij Idea,Kotlin,Intellij Plugin,我想为Intellij IDEA编写一个插件,可以修改Java和Kotlin代码 我使用这个方法 PsiClass.getMethods() 以获取Java和Kotlin类的所有方法。到目前为止还不错,所以我就用这样的方法 PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore() 一旦在Java文件上调用它们,所有这些都可以正常工作,但开始抛出异常 IncorrectOperationException 有一次我在科特林的课上给他们

我想为Intellij IDEA编写一个插件,可以修改Java和Kotlin代码

我使用这个方法

PsiClass.getMethods()
以获取Java和Kotlin类的所有方法。到目前为止还不错,所以我就用这样的方法

PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore()
一旦在Java文件上调用它们,所有这些都可以正常工作,但开始抛出异常

IncorrectOperationException
有一次我在科特林的课上给他们打电话


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

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

但是,如果类是Kotlin类,
navigationElement
将返回一个不是从
PsiClass
派生的
KtClass
。您必须使用Kotlin层次结构中的工具来修改它。Kotlin中的方法实例也不是
PsiMethod
的实例,而是
KtMethod
的实例


对于以通用方式分析Java和Kotlin源代码,有一个称为“UAST”的不同语法树,但对于修改,您需要一种特定于语言的方法。

您的建议似乎有效。非常感谢。你能给我提供一些资源,让我在那里能找到更多关于这个话题的信息吗?我还没有在JetBrain网站的教程中找到这样的信息。我想你应该看看IJ和Kotlin的源代码。