使Intellij Idea插件与Kotlin文件一起工作

我已经创建了这个非常简单的Intellij Idea插件 ,它可以折叠一些引用expression式。 它适用于Java文件,但对Kotlin不起作用。

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

 com.intellij.modules.all   com.nodes.folding.TranslationFoldingBuilder       

TranslationFoldingBuilder.kt

 class TranslationFoldingBuilder : FoldingBuilderEx() { override fun buildFoldRegions(root: PsiElement, document: Document, quick: Boolean): Array { if (root !is PsiJavaFile) { return FoldingDescriptor.EMPTY } val descriptors = ArrayList() // Get all the reference expressions in this Java file val referenceExpressions = PsiTreeUtil.findChildrenOfType(root, PsiReferenceExpression::class.java) // Some logic return descriptors.toTypedArray() } } 

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

当然,它不适合科林,因为你的

如果(root!是PsiJavaFile){return FoldingDescriptor.EMPTY}

对于kotlin文件,该文件是org.jetbrains.kotlin.psi.KtFile实例,而不是PsiJavaFile


更新:

  1. 您需要添加kotlin插件作为插件在plugin.xml中的依赖关系
  2. Kotlin的psi api与Java不同(它们是不同的语言)。 你需要写一个不同的类(但有些可以是相同的,我只是复制你的源代码和编辑,所以有一些重复在我的KT实现。

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