gpt4 book ai didi

intellij-idea - 使 Intellij Idea 插件与 Kotlin 文件一起使用

转载 作者:行者123 更新时间:2023-12-02 12:54:54 25 4
gpt4 key购买 nike

我创建了这个非常简单的 Intellij Idea 插件 它折叠了一些引用表达式。它适用于 Java 文件,但不适用于 Kotlin。

来源:https://github.com/nodes-android/nstack-translation-folding .
我将在这里包括重要部分:

插件.xml

</idea-plugin>
<depends>com.intellij.modules.all</depends>

<application-components>
<component>
<implementation-class>com.nodes.folding.TranslationFoldingBuilder</implementation-class>
</component>
</application-components>

<extensions defaultExtensionNs="com.intellij">
<lang.foldingBuilder language="JAVA" implementationClass="com.nodes.folding.TranslationFoldingBuilder"/>
</extensions>

</idea-plugin>

TranslationFoldingBuilder.kt
class TranslationFoldingBuilder : FoldingBuilderEx() {

override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array<FoldingDescriptor> {
if (root !is PsiJavaFile) {
return FoldingDescriptor.EMPTY
}

val descriptors = ArrayList<FoldingDescriptor>()
// Get all the reference expressions in this Java file
val referenceExpressions = PsiTreeUtil.findChildrenOfType(root, PsiReferenceExpression::class.java)

// Some logic

return descriptors.toTypedArray()
}
}

我的问题是,对于 Kotlin 文件, buildFoldRegions() 根本没有被调用。

最佳答案

当然,它不适用于 kotlin,因为您的

if (root !is PsiJavaFile) { return FoldingDescriptor.EMPTY }



对于 kotlin 文件,文件为 org.jetbrains.kotlin.psi.KtFile实例,而不是 PsiJavaFile
更新:
  • 您需要在 plugin.xml
  • 中添加 kotlin 插件作为插件的依赖项
  • Kotlin 的 psi api 与 Java 不同(它们是不同的语言)。您需要编写一个不同的类(但有些可以相同,我只是复制您的原始代码并进行编辑,因此在我的 kt 实现中有一些重复。

  • 你可以在这里查看我的提交 https://github.com/aristotll/nstack-translation-folding/commit/45286e6ec10d3b50defe25d55f8fbd8f122a148b .

    关于intellij-idea - 使 Intellij Idea 插件与 Kotlin 文件一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47439843/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com