簡體   English   中英

使Intellij Idea插件與Kotlin文件一起使用

[英]Make Intellij Idea plugin work with Kotlin files

我創建了這個非常簡單的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()

當然,這對於Kotlin不起作用,因為您

如果(根!是PsiJavaFile){返回FoldingDescriptor.EMPTY}

對於kotlin文件,該文件是org.jetbrains.kotlin.psi.KtFile實例,而不是PsiJavaFile


更新:

  1. 您需要在plugin.xml中添加kotlin插件作為插件的依賴項
  2. Kotlin的psi api與Java不同(它們是不同的語言)。 您需要編寫一個不同的類(但有些可以相同,我只是復制您的原始代碼並進行編輯,因此我的kt實現中有一些重復項。

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

就我而言,向項目添加kotlin-compiler庫解決了缺少KtFile和其他與Kotlin Psi相關的類的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM