Haga que el complemento Intellij Idea funcione con los files de Kotlin

Creé este plugin Intellij Idea muy simple que dobla algunas expresiones de reference. Funciona muy bien para los files Java, pero no funciona para Kotlin.

Aquí está la fuente: https://github.com/nodes-android/nstack-translation-folding .
Incluiré aquí las partes importantes:
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() } } 

Mi problema es que para los files de Kotlin, buildFoldRegions () no se llama en absoluto.

Por supuesto, no funcionará para kotlin, ya que su

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

Para los files de kotlin, el file es org.jetbrains.kotlin.psi.KtFile instancia, en lugar de PsiJavaFile


Actualizar:

  1. Necesita agregar el complemento de Kotlin como la dependencia de su complemento en plugin.xml
  2. La API api de Kotlin no es lo mismo que Java (Son idiomas diferentes). Necesitas escribir una class diferente (pero algunas pueden ser iguales, solo copio tu código de origen y lo edito para que haya algún duplicado en mi implementación de kt).

Puedes ver mi confirmación aquí https://github.com/aristotll/nstack-translation-folding/commit/45286e6ec10d3b50defe25d55f8fbd8f122a148b .

  • Cuerda de relleno en Kotlin
  • Combine security nula y assertNotNull
  • Firebase Admin SDK no se puede conectar a la database desde el file jar
  • ¿Es posible restringir el tipo de una Lista a una implementación de una interfaz en Kotlin?
  • Cómo evitar la cobertura parcial con campos tardíos en Kotlin
  • No se puede mostrar el error EditText en el código de Kotlin
  • split kotlin de arguments nullable
  • Tengo dos methods de extensión de Kotlin para la misma class, pero con una firma genérica diferente y el comstackdor se queja
  • Convierta methods obsoletos de Java a Kotlin
  • ¿Puede un object de class creado "sobre la marcha" en Kotlin tener un constructor?
  • Kotlin: ¿cómo usar múltiples generics en class?