我正在为 IntelliJ IDE 构建一个插件来操作项目中的 Kotlin 文件。我已经能够编写大量测试来获取 Kotlin 文件并根据其内容生成新文件。当我在 IDE 中运行此插件时,我无法将文件检测为 Kotlin 文件。当查看调试器时,我的文件显示它是来自
org.jetbrains.kotlin.psi
库的 KtFile。但如果我尝试将其转换为 KtFile,则会收到错误:
java.lang.ClassCastException: org.jetbrains.kotlin.psi.KtFile cannot be cast to org.jetbrains.kotlin.psi.KtFile
显然库版本在运行时和编译时之间是关闭的。我需要做什么才能配置我的插件以在插件运行时使用正确的 Kotlin PSI?
我的
plugin.xml
看起来像这样:
<idea-plugin>
<id>...</id>
<name>...</name>
<vendor email="..." url="...">...</vendor>
<description><...</description>
<depends>com.intellij.modules.all</depends>
<depends>org.jetbrains.kotlin</depends>
<actions>...</actions>
</idea-plugin>
我的
build.gradle.kts
看起来像:
plugins {
id("org.jetbrains.intellij") version "0.4.16"
kotlin("jvm") version "1.3.61"
}
group = "..."
version = "..."
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation(kotlin("compiler-embeddable", "1.3.61"))
implementation(kotlin("gradle-plugin", "1.3.61"))
testImplementation(group = "junit", name = "junit", version = "4.12")
}
buildscript {
repositories { mavenCentral() }
dependencies {
classpath(kotlin("compiler-embeddable", "1.3.61"))
classpath(kotlin("gradle-plugin", "1.3.61"))
}
}
intellij {
version = "2019.1.4"
setPlugins("Kotlin")
}
tasks {
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
}
tasks.getByName<org.jetbrains.intellij.tasks.PatchPluginXmlTask>("patchPluginXml") {
changeNotes("...")
}
我已经知道如何在用 Kotlin 编写的 Intellij IDEA Gradle 插件项目中包含 Kotlin PSI 类(例如 KtClass)?和如何将 Kotlin PSI 源文件添加到 IDEA 插件项目配置,这本质上就是我想要的得到答复,但没有得到任何东西来解决我的问题。也许有一些关于这个问题的文档,但它逃避了我的搜索。
您的
dependencies
应包括 implementation(kotlin("reflect"))
并且 plugin.xml
应包括 <depends>org.jetbrains.kotlin</depends>
我也有同样的问题。 通过添加解决了
plugins.set(listOf("Kotlin"))
在 gradle 的 intellij 部分