Создайте плагин Intellij Idea с файлами Kotlin

Я создал этот очень простой плагин 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, так как ваш

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

Для файлов kotlin файл является экземпляром org.jetbrains.kotlin.psi.KtFile , а не PsiJavaFile


Обновить:

  1. Вам нужно добавить плагин kotlin в качестве зависимости вашего плагина в plugin.xml
  2. Psi api Kotlin не такой же, как Java (они разные языки). Вам нужно написать другой класс (но некоторые из них могут быть одинаковыми, я просто копирую исходный код и редактирую, поэтому в моей реализации kt есть несколько дубликатов.

Вы можете увидеть мою фиксацию здесь https://github.com/aristotll/nstack-translation-folding/commit/45286e6ec10d3b50defe25d55f8fbd8f122a148b .