modificar una class Kotlin

Me gustaría escribir un complemento para Intellij IDEA que debería modificar un código de Java y Kotlin.

Yo uso el método

PsiClass.getMethods() 

para get todos los methods de las classs de Java y Kotlin. Hasta aquí todo bien, entonces uso methods como

 PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore() 

que todo funciona bien una vez que son llamados en los files Java, pero comienzan a lanzar una exception

 IncorrectOperationException 

una vez que los llamé a una class de Kotlin.

Agradecería cualquier sugerencia sobre cómo puedo modificar las classs de Kotlin y Java (preferiblemente utilizando el mismo enfoque).

Cuando busca una class de Kotlin a través de JavaPsiFacade , devuelve la class de luz que es una representación superficial que solo se basa en la información del file de class. Para agregar elementos PSI, debe llamar a navigationElement en él. Entonces, IJ analizará la fuente y buildá un tree de PSI completo que se puede modificar.

Sin embargo, si la class es una class Kotlin, navigationElement devolverá una KtClass que no se deriva de PsiClass . Tendrá que usar las instalaciones en la jerarquía de Kotlin para modificarlo. Las instancias de método en Kotlin tampoco son instancias de PsiMethod , sino instancias de KtMethod .

Para analizar las fonts de Java y Kotlin de forma común, hay un tree de syntax diferente llamado "UAST", pero para las modificaciones necesita un enfoque específico del idioma.

  • advertencia: los files JAR en time de ejecución de Kotlin en el classpath deben tener la misma versión
  • Cómo detener el service de notificación en Android Oreo
  • Android Retrofit + SimpleXmlConverter con entidad vacía
  • error: no se pudo encontrar o cargar la class principal Hello.class
  • Gradle sinc falló con la extensión de kotlin. para cadena de input: "" en el module de file build.gradle (aplicación)
  • empaqueta un file .class de Kotlin en un JAR para su ejecución
  • No se permite declarar una tarea 'limpia' personalizada cuando se usan los complementos estándar de ciclo de vida de Gradle
  • Manera simple de averiguar si una class es anónima / object y get el nombre de class concreto de la instancia en Kotlin
  • Cliente de Android y server de Java en el mismo proyecto de git
  • ffmpeg errores de desencoding legítimos
  • usando intellij-markdown en el proyecto de Kotlin para Android