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

Я создал этот очень простой плагин Intellij Idea, который сбрасывает некоторые ссылочные выражения. Он отлично работает для файлов Java, но он не работает для Kotlin.

Вот источник: https://github.com/nodes-android/nstack-translation-folding. Я буду включать здесь важные части: plugin.xml

<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">
 </lang.foldingbuilder></extensions>

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.************()
 }
}
</foldingdescriptor></foldingdescriptor>

Моя проблема в том, что для файлов Kotlin buildFoldRegions() вообще не вызывается.

2 ответа

В моем случае добавление библиотеки kotlin-compiler в проект разрешило проблему с отсутствующими классами как KtFile и другими, связанными с Kotlin Psi.


Конечно, это не будет работать для 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/45286***********************************.

licensed under cc by-sa 3.0 with attribution.