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 <code class="highlighter-rouge">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 <code class="highlighter-rouge">kotlin.incremental.js=true en el <code class="highlighter-rouge">gradle.properties o en el <code class="highlighter-rouge">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 <code class="highlighter-rouge">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@interfaceNullableApi{}@NullableApiinterfaceFoo<TextendsBar>{// Upper bound T : Bar? in Kotlin List<String>baz(ListextendsQux>qux);// in Kotlin: fun baz(qux: List?): List? }```
### 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 <code class="highlighter-rouge">@UnderMigration. Esta anotación está disponible dentro de un nuevo artefacto <code class="highlighter-rouge">kotlin-annotations-jvm que se debe añadir como dependencia para la librería. Ejemplo: <code class="highlighter-rouge">compile "org.jetbrains.kotlin:kotlin-annotations-jvm:1.1.60" en Gradle.

El <code class="highlighter-rouge">@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 <code class="highlighter-rouge">MigrationStatus.STRICT, <code class="highlighter-rouge">MigrationStatus.WARN y <code class="highlighter-rouge">MigrationStatus.IGNORE, haciendo que el compilador produzca errores, warnings o ninguna de las dos cosas respectivamente.

Nota: <code class="highlighter-rouge">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:

  • <code class="highlighter-rouge">-Xjsr305={strict|warn|ignore} que ahora afecta únicamente a todas las anotaciones que no tengan el estado <code class="highlighter-rouge">@UnderMigration
  • <code class="highlighter-rouge">-Xjsr305=under-migration:{strict|warn|ignore} sobreesctibe el comportamiento para todas las anotaciones <code class="highlighter-rouge">@UnderMigration
  • <code class="highlighter-rouge">-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 <code class="highlighter-rouge">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: <code class="highlighter-rouge">-Xjsr305=ignore -Xjsr305=under-migration:ignore -Xjsr305=@org.library.MyNullable:warn hace que el compilador ignore todas las anotaciones de nulabilidad, excepto <code class="highlighter-rouge">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 <code class="highlighter-rouge">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 <code class="highlighter-rouge">@Parcelize.

Builds incrementales de Gradle

Con Kotlin 1.1.60, el código Kotlin en el source set de <code class="highlighter-rouge">test se recompila de forma incremental cuando cambia el código en <code class="highlighter-rouge">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 <code class="highlighter-rouge">Iterable, <code class="highlighter-rouge">Sequence y <code class="highlighter-rouge">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 <code class="highlighter-rouge">Tools | Kotlin | Configure Kotlin Plugin Updates y pulsad el botón <code class="highlighter-rouge">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!