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 .

  • El receptor de difusión onReceive () no se llama
  • Cómo evitar los files de kotlin con Findbugs
  • ¿Cómo negar una expresión booleana cuando se usa el operador elvis en kotlin?
  • ¿Por qué Kotlin no permite ningún código en el constructor primario?
  • Cómo usar la class ContextWrapper con subscribeWith
  • Usando Kotlin con Dagger
  • ¿Hay alguna manera de escribir una function de extensión que cambie el valor del object?
  • Array / List iteration sin asignaciones de objects adicionales
  • La mejor forma de manejar instancias de objects múltiples
  • Implementación de properties declaradas en interfaces en Kotlin
  • Clase de datos de Kotlin: ¿cómo leer el valor de la propiedad si no sé su nombre en el momento de la compilation?