intellij-idea - 修改 Kotlin 类

标签 intellij-idea kotlin intellij-plugin

我想为 Intellij IDEA 编写一个插件,它应该修改 Java 和 Kotlin 代码。

我用的方法

PsiClass.getMethods()

为了获取Java和Kotlin类的所有方法。到目前为止一切顺利,所以我使用像

这样的方法
PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore()

在 Java 文件上调用它们后一切正常,但开始抛出异常

IncorrectOperationException

有一次我在 Kotlin 类(class)上给他们打电话。

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

最佳答案

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

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

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

关于intellij-idea - 修改 Kotlin 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41705925/

相关文章:

intellij-idea - IntelliJ 在 .gitignore 文件中提到的项目窗口中隐藏文件夹,如何在项目窗口中显示该文件夹?

angular - 如何在 IntelliJ IDEA 社区版中开发 Angular/React

java - 无法从 IntelliJ 插件运行程序 "adb"

java - 有没有办法动态更改 JScrollPane 的边框标题?

android - 在 Intellij 中设置 Android/Maven 库项目

kotlin - 衡量Kotlin协程的性能

kotlin - 如何使用 Kotlin 从带有内部列表的列表创建 map

functional-programming - Kotlin中如何用动态编程实现纯函数?

java - 如何通过代码调用 IntelliJ 内联方法操作?

intellij-idea - 无法解析符号 kotlinOptions(在 Gradle 版本中)