Vista previa de Android Studio 3.0 Faltan importaciones cuando se refabrica el código de Kotlin

Cada vez que trato de refactorizar el código Koltin en Android Studio 3.0, simplemente elimina todas mis importaciones de "nivel superior" y comienza a usar importaciones "in situ".

Al refactorizar, quiero decir, en este caso, mover el código. Entonces digamos que tengo una class en el package com.myapp . Si lo muevo a com.myapp.anotherpackage este problema ocurre

Un hecho curioso acerca de esto parece que solo sucede cuando mueves más de un file al mismo time

Como se ve:

//Before refactoring I have this import import android.support.v7.app.AppCompatActivity; class MyActivity : AppCompatActivity() { //code } 

Luego, después de refactorizar, va así

 //"top level" import is gone class MyActivity : android.support.v7.app.AppCompatActivity() { //"inline" import //code } 

enter image description here

Se vuelve aún peor si tengo que refactorizar el código nuevamente, ya que cada import está "en línea", el estudio de Android no las refactoriza, y tengo que arreglarlas a mano. Esto ya se está poniendo realmente molesto, ya que tuve que arreglar más de 100 de estos. ¿Alguna idea sobre como arreglar esto?

Esto es muy similar al error que se solucionó no hace mucho time. Los cambios relevantes no se incluyeron en el complemento de Kotlin incluido con una vista previa de As3.0. Pero estarán disponibles en la próxima actualización del complemento.

Parece que podría tratarse de un error: logré recrear el problema en IntelliJ y creé este informe de errores: https://youtrack.jetbrains.com/issue/KT-18205

Llegó tarde para join a la fiesta, pero, de todos modos. Kotlin es un lenguaje relativamente nuevo (en términos de que es oficial para Android, hace apenas un mes), por lo que el desarrollo está en pleno desarrollo en JetBrains. Y, la versión de Android Studio (3.0) no es una versión estable, así que aquí están todos los problemas conocidos de Kotlin con Android Studio. Verifique estos problemas aquí .

Ahí dice claramente:

Algunas refactorizaciones no disponibles con Kotlin

No todas las refactorizaciones de código funcionan con Kotlin, especialmente las de Android. Por ejemplo, la refacturación de código para modular Kotlin cude actualmente no funciona con Kotlin.

El Android Studio amigable con Java no está familiarizado con las funcionalidades en línea de Kotlin. Dado que esta es una nueva inclusión en Kotlin, hace que el código sea más legible (¿en realidad?) Pero no tan amigable con los progtwigdores , per se.

Habiendo dicho eso, en este momento no hay casi ninguna fuente (comprobamos algunas, otras son bienvenidas) confirmando que su problema es un problema o una mejora de Kotlin sobre Java (nuevamente muy debatible) ya que inline inlineing estaba destinado a ser una funcionalidad mejorada .

Ahora, ya es hora de que esta característica se dirija a una label oficial .

Parece que esta "refactorización" ocurre después de que se movió el file y se actualizó el package.

Como solución hasta que se solucione el error de IDE / Plugin, puede hacer lo siguiente:

Después de mover su file (refactorización), haga clic derecho en el file,

  1. Seleccionar historial local → Mostrar historial
  2. Seleccione la revisión anterior donde eliminó todas las importaciones
  3. Seleccionar revertir

Asegúrate de verificar dos veces el resultado, ya sabes que debe tener la versión correctamente movida / refactorizada.


Ocasionalmente, esto no parece funcionar, pero puede intentar Deshacer (Mover) y moverlo de nuevo.

Probado en AS 3.0 Canary 3

  • Kotlin filter lambda array usando el índice de iteración
  • ¿Cómo dividir una cadena y plantar los delimitadores entre las partes divididas en Kotlin?
  • En Kotlin, por qué Jackson falla al desmantelar el object no anotado en algunos casos y no en otros
  • Generando jar para proyecto JavaFX en Kotlin
  • Tamaño de file grande al convertir bitmap a PDF
  • No se puede "findViewById" en Kotlin. Obteniendo el error "Falló la inferencia de tipo"
  • La request de permiso en time de ejecución no funciona
  • Métodos de interfaz de anulación de Android kotlin dentro del método onCreateView ()
  • Cómo usar Kotlin coroutines await () en el hilo principal
  • cómo acceder al object complementario desde la instancia del object en kotlin?
  • Array / List iteration sin asignaciones de objects adicionales