Intellij idea 修改Kotlin类
我想为Intellij IDEA编写一个插件,可以修改Java和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 有一次我在科特林的课上给他们
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的源代码。