¡Liberado Kotlin 1.1.60!

Nos complace anunciar la liberación de la versión 1.1.60 de Kotlin, una actualización con corrección de errores y actualización de herramientas para la 1.1. En esta actualización:

  • Se añade soporte experimental para la compilación incremental en Kotlin/JS
  • Se añaden nuevas características al soporte de anotaciones de nulabilidad personalizadas de la JSR-305
  • Incluye un montón de corrección de errores en la implementación del generador automático de Parcelable y proporciona soporte en el IDE
  • Mejora las builds incrementales de Gradle
  • Introduce inspecciones nuevas, mejoras de rendimiento y corrección de errores en el plugin de IntelliJ

Esta actualización es compatible con todas las versiones de IntelliJ IDEA desde la 2016.3 hasta la 2017.3, así como con Android Studio 2.3, 3.0 y 3.1 Canary.
Podéis encontrar la lista completa de cambios aquí.

Nos gustaría agradecer a los contribuyentes externos cuyas PRs están incluídas en esta versión:
Toshiaki Kameyama, Kirill Rakhman, Paul Merlin, Raluca Sauciuc, Yoshinori Isogai, Andrey Mischenko, Francesco Vasco, Jonathan Leitschuh, Denis Grachev, y pivotal-vladimir.

Compilación incremental de Kotlin/JS

Kotlin 1.1.60 introduce soporte experimental para la compilación incremental en los proyectos Gradle de Kotlin/JS, que puede reducir los tiempos de build de forma significativa durante el desarrollo, haciendo que un pequeño cambio local tome segundos, en vez de hasta un minuto entero en una reconstrucción no incremental.

Está deshabilitado por defecto y debe habilitarse poniendo kotlin.incremental.js=true en el gradle.properties o en el local.properties.

Sentíos libres de probarlo e informar de cualquier problema que os encontréis en el issue tracker de Kotlin.

Soporte para la JSR-305

Hemos mejorado y corregido errores en esta versión para el soporte para las anotaciones de nulabilidad de la JSR-305, que ya se extendió con apodos de tipo y calificadors por defecto en Kotlin 1.1.50.

Calificadores de tipo por defecto para todos los usos de tipo

Los calificadores de tipo por defecto de la JSR-305 ya permiten especificar ElementType.TYPE_USE para afectar a todos los usos de tipos dentro del ámbito de anotación, incluyendo tipos de argumentos, límites superiores de tipos deparámetro y tipos comodín:

@Nonnull(when = When.MAYBE)
@TypeQualifierDefault({ElementType.TYPE_USE})
public @interface NullableApi {
}
 
@NullableApi
interface Foo<T extends Bar> { // Upper bound T : Bar? in Kotlin
    List<String> baz(List<? extends Qux> qux);
    // in Kotlin: fun baz(qux: List<out Qux?>?): List<String?>?
}

Estado de migración de las anotaciones de nulabilidad personalizadas

Para los que mantenéis librerías proporcionando apodos de calificación y calificación de tipos de anotaciones por defecto, podéis ahora controlar el estado de migración de las anotaciones, marcando los tipos de anotación con @UnderMigration. Esta anotación está disponible dentro de un nuevo artefacto kotlin-annotations-jvm que se debe añadir como dependencia para la librería. Ejemplo: compile "org.jetbrains.kotlin:kotlin-annotations-jvm:1.1.60" en Gradle.

El @UnderMigration(status = ...) valor especifica cómo trata el compilador las violaciones de nulabilidad detectadas en los usos de anotaciones de API y pueden ser uno de MigrationStatus.STRICT, MigrationStatus.WARN y MigrationStatus.IGNORE, haciendo que el compilador produzca errores, warnings o ninguna de las dos cosas respectivamente.

Nota: MigrationStatus.STRICT se considera experimental en cuanto a que no ofrece garantías de que el código compilado con la vcersión actual con esta opción siga siendo correcto en versiones futuras de Kotlin. Es bien probable que las comprobaciones sean más estrictas en Kotlin 1.2.x o en Kotlin 1.3.

Flags de compilador para el control del estado de migración

Los usuarios de librerías que por algún motivo necesiten un estado de migración diferente del ofrecido por alguien encargado de mantener de librería pueden establecer las comprobaciones de nulabilidad pasando los flags del compilador en algunas de las siguientes formas:

  • -Xjsr305={strict|warn|ignore} que ahora afecta únicamente a todas las anotaciones que no tengan el estado @UnderMigration
  • -Xjsr305=under-migration:{strict|warn|ignore} sobreesctibe el comportamiento para todas las anotaciones @UnderMigration
  • -Xjsr305=@<fq.name>:{strict|warn|ignore} donde fq.name es el nombre completamente calificado de una anotación específica para sobreescribir el estado de migración

El modo strict es experimental, y no proporciona garantías de que el código compilado con Kotlin 1.1.60 siga compilando en versiones futuras.

Estos flags se pueden combinar. Por ejemplo: -Xjsr305=ignore -Xjsr305=under-migration:ignore -Xjsr305=@org.library.MyNullable:warn hace que el compilador ignore todas las anotaciones de nulabilidad, excepto org.library.MyNullable y informa de advertencias para el resto.

Soporte de Parcelable

Esta versión corrige un montón de progblemas conocidos con la implementación experimental automática del generador de Parcelable que se presentó en Kotlin 1.1.4 (ver la especificación) y también proporciona soporte para el IDE en forma de quick fixes y diagnóistico que asisten en la utilización de @Parcelize.

Builds incrementales de Gradle

Con Kotlin 1.1.60, el código Kotlin en el source set de test se recompila de forma incremental cuando cambia el código en main.

De la misma forma, hemos hecho algunas correcciones para que las comprobaciones de up-to-date sean más robustas para asegurarnos de que se recompilan cuando cambian opciones como el target de la JVM, configuraciones de los plugins del compilador y otras cosas cambian.

Mejoras en el plugin de IntelliJ IDEA

Esta nueva versión trae un montón de mejoras en el plugin de IntelliJ de Kotlin:

  • Un nuevo asistente de proyecto para crear proyectos de Gradle usando Kotlin DSL
  • Un quickfix para convertir Iterable, Sequence y Array entre ellos en el caso de que el tipo no coincida.
  • Un quickfix para hacer un parámetro de tipo reificado cuando se requiere por su uso.
  • Un montón de correcciones de errores y mejoras de rendimiento.

Cómo actualizar

Par aactualizar el plugin, usar Tools | Kotlin | Configure Kotlin Plugin Updates y pulsad el botón Check for updates now (para Android Studio 3.1, descargar el plugin desde un canal separado en el Plugin Repository). También, no os olvidéis de actualizar las versiones del compilador y de la librería estándar en vuestros scripts de compilación de Maven y de Gradle.
Como de costumbre, si os encontráis con algún problema con esta versión, sois bienvenidos a pedir ayuda en los foros, en Slack o informar de cualquier problema en el issue tracker.

¡A Kotlinear!