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 .

  • ¿Cuándo se instancian los singleton de Kotlin (declarados con el modificador de object)?
  • ¿Puedo usar @autowire (spring-context) para una aplicación de escritorio kotlin?
  • Cualquier forma de decirle al comstackdor de Kotlin que la function anterior invocable ya hizo una comprobación de nulo
  • Regex no coincide en Kotlin
  • Androide. Mockito usa objects reales en lugar de simulacro
  • ¿Cómo declarar el valor del array en las annotations de Kotlin?
  • Contrato de testing DSL comportamiento incorrecto / error
  • Android Studio Versión 3.0 Canary Channel Not Rendering Support Libraries
  • Ventana cornetworkingera RxJava
  • Crear una ArrayList de elementos únicos en una ArrayList
  • Llamar a un constructor por defecto desde otro en Kotlin