A JetBrains liberou o Kotlin 1.3.30. Essa versão é principalmente uma versão de correções de bugs e atualizações para o Kotlin 1.3. O Kotlin 1.3.30 traz melhorias para o Kotlin/Native e KAPT, suporte à mais operações para unsigned types e arrays, melhorias de depuração no IntelliJ IDEA, e mais.
O Kotlin/Native agora suporta o Windows 32 bit (mingw_86). Além disso, usuários do macOS e Windows podem compilar programas Kotlin/Native para o Linux x86-64, arm32, dispositivos Android e Raspberry PI.
O Kotlin/Native teve uma série série de melhorias na plataforma Apple. Com relação às exceções, os desenvolvedores podem encontrar exceções não tratadas registradas nos crash logs do iOS, e o rastreamento de exceção agora contêm informações simbólicas no iOS e no MacOS quando no modo de depuração.
Os desenvolvedores Apple também podem gerar frameworks estáticos usando o parâmetro de linha de comando -Xstatic-framework
, ou o seguinte script gradle para um projeto multiplataforma:
kotlin {
macosX64 {
binaries {
framework {
isStatic = true
}
}
}
}
Os desenvolvedores Apple podem ser beneficiar de uma funcionalidade experimental que fornece integração com o CocoaPods através de um plugin gradle. Essa funcionalidade transforma um projeto Kotlin/Native em um pod, que pode ser incluído em um Podfile
. Dessa maneira, os desenvolvedores deve ter a mesma experiência de quando estão usando pods Swift ou Objective-C no Xcode. Além disso, também é possível importar dependências do CocoaPods em um projeto Kotlin/Native. O plugin gradle responsável por essa funcionalidade lida com toda a configuração necessária para importar um framework dentro de um projeto Kotlin/Native.
// Aplica plugins.
plugins {
id("org.jetbrains.kotlin.multiplatform") version "1.3.30"
/// o novo plugin para suportar o CocoaPods
id("org.jetbrains.kotlin.native.cocoapods") version "1.3.30"
}
// CocoaPods requer que o podspec tenha uma versão.
version = "1.0"
kotlin {
cocoapods {
summary = "a Kotlin/Native module"
homepage = "homepage"
pod("AFNetworking", "~> 3.2.0")
}
}
As seguintes etapas são necessárias para importar um módulo Kotlin/Native em um projeto Xcode existente:
- Certifique-se de que o CocoaPods está instalado;
- Configure um projeto gradle: use o plugin
org.jetbrains.kotlin.native.cocoapods
, adicione e configure os targets, e especifique os campos obrigatórios do podspec; - Execute a task
podspec
. O arquivo podspec descrito acima será gerado; - Adicione uma referência para o podspec gerado em um Podfile no projeto do Xcode;
target 'my-ios-app' do pod 'my_kotlin_library', :path => 'path/to/my-kotlin-library' end
- Execute
pod install
para o projeto do Xcode.
Os processadores de anotações (JSR 269) que já são suportados no Kotlin através do plugin do compilador KAPT também foi melhorado. O KAPT agora suporta uma funcionalidade experimental que permite o processamento de anotações de maneira incremental; os desenvolvedores que desejarem testar essa funcionalidade devem adicionar o seguinte no gradle.properties
:
kapt.incremental.apt=true
Outra funcionalidade interessante a respeito do KAPT é o Compile Avoidance (evitar compilar), que pula o processamento de anotações quando somente o corpo de um método mudou. O Compile Avoidance é possível somente quando todas as dependências KAPT são declaradas explicitamente no processamento de anotações no classpath. Para habilitar o Compile Avoidance, basta adicionar o seguinte ao gradle.properties
:
kapt.include.compile.classpath=false
Kotlin 1.3.30 brings support for more operations for unsigned types and arrays of unsigned types:
fun main() {
val u1 = 2_147_483_649u
val u2 = 4_000_000_000u
println(u1.toDouble())
println(minOf(u1, u2))
val array: UIntArray = uintArrayOf(u1, u2)
println(array.max())
println(array.all { it > Int.MAX_VALUE.toUInt() })
}
Desde que unsigned arrays implementam Collection
( por exemplo Collection<UInt>
para UIntArray
), os desenvolvedores podem usar operações como filter
e map
.
O suporte para o Kotlin foi melhorado no IntelliJ IDEA. Agora é possível depurar coroutines mais facilmente; um painel separado "Async stack trace" exibe as variáveis armazenadas no momento em que foram suspensas.
Outra melhoria de depuração no IntelliJ IDEA é o "Kotlin" mode, que permite que os desenvolvedores vejam as variáveis através dos nomes dados pelo Kotlin, ao invés dos nomes auxiliares da JVM:
(imagem obtida de https://blog.jetbrains.com)
Outras funcionalidade e correções de bugs que valem a pena destacar no IntelliJ IDEA incluem:
- Adicionada intenção para substituir as negações de métodos isEmpty/isNotEmpty. Por exemplo, !isEmpty() -> isNotEmpty() e !isNotEmpty() -> isEmpty();
- Adicionada inspeção + sugestão para substituir Collection.count() por Collection .size. Por exemplo, listOf(1, 2).count() -> listOf(1, 2).size;
- Adicionada inspeção para substituir o Java 8 Map.forEach pelo forEach do Kotlin;
- Adicionado warning com relação ao uso redundante de requireNotNull e checkNotNull;
- Suporte a comentários TODO com várias linhas.
A lista completa de mudanças está disponível no changelog. Para atualizar para o Kotlin 1.3.30, os usuários do IntelliJ IDEA e Android Studio devem ir em Tools>Kotlin>Configure Kotlin Plugin Updates, e clicar em "Check for updates now"; Usuários do Eclipse devem instalar o plugin usando o Marketplace; ou para atualizar via maven, gradle e npm, os usuários devem usar o número de versão 1.3.30 para o compilador. Uma documentação adicional também está disponível.