我已经创建了这个非常简单的 Intellij Idea插件,它会折叠一些引用表达式。它适用于Java文件,但它对Kotlin不起作用。
以下是来源:https://github.com/nodes-android/nstack-translation-folding。
我将在这里列出重要的部分:
的 plugin.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()。
答案 0 :(得分:0)
当然,对于kotlin来说,它不适用于你的
if(root!是PsiJavaFile){ 返回FoldingDescriptor.EMPTY }
对于kotlin文件,该文件为org.jetbrains.kotlin.psi.KtFile
实例,而不是PsiJavaFile
更新
您可以在此处查看我的提交https://github.com/aristotll/nstack-translation-folding/commit/45286e6ec10d3b50defe25d55f8fbd8f122a148b。
答案 1 :(得分:0)
就我而言,将kotlin-compiler
库添加到项目中解决了缺少类KtFile
和其他与 Kotlin Psi 相关的问题。