Kotlin 1.1.4 is out

Posted on by

We’re happy to announce the release of Kotlin 1.1.4, a new bugfix and tooling update for Kotlin 1.1. This update:

Fixes a major performance regression in the IntelliJ IDEA plugin

Adds support for package-default nullability annotations

Improves Java 9 support

Adds initial, experimental support for generating Android Parcelable implementations using the @Parcelize annotation

Adds a tool for JavaScript dead code elimination, improves sourcemap support for JS debugging and JS unit testing support

Generates more efficient bytecode

Adds many new features to the IntelliJ IDEA plugin

The update is compatible with all versions of IntelliJ IDEA from 2016.2 until 2017.2, as well as with Android Studio 2.3 and 3.0 Beta.

The complete list of changes in this release can be found in the changelog.

We’d like to thank our external contributors whose pull requests were included in this release: Andrius Semionovas, Bill Collins, Derek Alexander, Dimach, Ilya Zorin, Kirill Rakhman, Stuart Kent, takahirom, Toshiaki Kameyama, Vasily Kirichenko, Vitaly Khudobakhshov, Vladimir Koshelev, Yoshinori Isogai, Yuli Fiterman, and Zoltan Polgar.

Package-default nullability annotations

Starting with this release, Kotlin supports package-default nullability annotations (such as JSR-305’s @ParametersAreNonnullByDefault and the @NonNullApi annotation introduced in Spring Framework 5.0). To facilitate migration and avoid compilation errors due to more precise nullability information on used Java APIs, the support for such annotations is off by default, and needs to be enabled by passing the -Xjsr305-annotations=enable command line option to the compiler. To enable this in a Gradle build, use the freeCompilerArgs option; in a Maven build, use <args>. For more information, see the proposed specification.

Java 9 support

We’re moving forward with Java 9 support. Starting with this release, Kotlin performs module-based visibility checks based on information from module-info.java . Running the compiler under JDK 9 is now also supported.

Android Extensions plugin enhancements

Android Extensions plugin now supports not only Activities and Fragments, but also custom Views and even custom layout containers such as a ViewHolder. Also, variants are now fully supported.

You can read more about the new features in the KEEP proposal. All of them are considered experimental, so you will need to turn on an experimental flag in your build.gradle file:

androidExtensions { experimental = true }

Parcelable support

Android Extensions plugin now includes an automatic Parcelable implementation generator. Declare the serialized properties in a primary constructor and add a @Parcelize annotation, and writeToParcel() / createFromParcel() methods will be created automatically:

@Parcelize class User(val firstName: String, val lastName: String) : Parcelable

Parcelable generator is also in experimental status. We make no compatibility guarantees related to it and welcome your feedback on the API. For more information, see the proposed specification.

JavaScript dead code elimination

Kotlin 1.1.4 adds a new tool to eliminate dead code from the .js files produced by the Kotlin/JS compiler. The tool is only supported in Gradle builds at this time; to enable, add apply plugin: 'kotlin-dce-js' to your build.gradle. See the documentation for more information.

JavaScript debugging

Kotlin 1.1.4 improves support for JavaScript sourcemap generation, making it easier to debug JS in browser debuggers such as Chrome DevTools. See the tutorial for more information.

JavaScript unit testing

This update extends JavaScript unit testing support to work with a broader variety of libraries. See the forum post for more information and links to sample projects.

Bytecode quality improvements

In this update, we’ve implemented many improvements for the quality of generated bytecode. Exceptions from named suspending functions now originate from the function itself, which makes their stack-tracer easier to read, and the bytecode performs better in many cases.

IntelliJ IDEA plugin improvements

The new release brings many improvements to the IntelliJ IDEA plugin:

Major performance improvements

New refactoring “Copy Class”

“Inline” refactoring can now be used on properties with accessors

Renaming labels is now supported

Many new options in the code style settings

Data flow analysis support (Analyze | Analyze Data Flow from/to Here)

“Configure Kotlin in project” now supports projects using Gradle Kotlin DSL

Many new inspections and quickfixes

How to update

To update the plugin, use Tools | Kotlin | Configure Kotlin Plugin Updates and press the “Check for updates now” button. Also, don’t forget to update the compiler and standard library version in your Maven and Gradle build scripts.

As usual, if you run into any problems with the new release, you’re welcome to ask for help on the forums, on Slack (get an invite here), or to report issues in the issue tracker.

Let’s Kotlin!