Kotlin 1.0 Release Candidate is Out!

Finally, Kotlin has graduated the Beta and we are happy to present the Release Candidate Build!

NOTE: as we announced earlier, RC requires all code to be recompiled to make sure no code compiled with older versions is kept around (please recompile even if you were on the EAP version!).

This blog post gives an overview of the changes made since Beta 4. Library changes are the biggest in this build. Also, some bugs have been fixed. Full list of changes is available here.

Kotlin 1.0 RC

See the discussions on Hacker News and Reddit.

Language

First of all, as promised before, there has been a clean-up:

  • All previously deprecated language constructs are now errors, not warnings.
  • All deprecated declarations previously generated in the byte code (such as static fields in interfaces etc) have been removed.

Most other language changes are minor tweaks and bug fixes. Some highlights are given below. See the full list here.

Annotations on delegate fields

The new @delegate: annotation target (use-site) is now supported. For example, to mark the delegate object as @Transient, we can say:

In the byte code, the field holding the delegate will be annotated.

Type checking for use-site variance

We have fixed a number of annoying bugs connected with use-site variance (type projections). As a result, the compiler may find some previously missed bugs in your code.
For example, in the following case:

This code was mistakenly accepted before and is rejected now on the last line with the message:

Java Interoperability

Some improvements to synthesized properties derived from Java’s get/set pairs:

  • such declarations (as well as SAM-converted methods) are now resolved on par with members;
  • support added for Java setters that return values.

Support added for @Nullable/@NotNull annotations from various popular libraries such as javax.annotations, Android SDK, etc.
EAP users report:

Android annotations being recognized broke a lot of my code in a good way

And highlighted bug fixes:

  • Private top-level Kotlin classes are now compiled to package-private Java classes
  • Members of private classes can-not be accessed from non-private inline functions

Standard Library

  • Library code rearranged into more granular packages (no source changes should be required)
  • Some functions have been made inline
  • Many inline functions (most of them one-liners) can no longer be called from Java code. This will help us reduce the size of the runtime library in the future.
  • All old deprecations have been removed
  • Map.getOrElse() and Map.getOrPut() now treat keys associated with null values as missing.
  • mutableListOf, mutableSetOf, mutableMapOf added to construct mutable collections.
  • toMutableList added instead of toArrayList. The latter is deprecated
  • associate and associateBy are added to aid construction of maps (instead of toMap/toMapBy)
  • Comparator- and comparison-related functions are moved to kotlin.comparisons package (not imported by default)

More changes here

Tooling

To enable Android Extensions in Gradle in a more idiomatic way, we now say:

in the build.gradle file (individually for each project).

The old way doesn’t work any more and prints fixing instructions to the output.

IDE Changes

  • Intention to replace iteration over map entries with a loop using a destructuring declaration
  • Inspection and quickfix to cleanup redundant visibility modifiers
  • Inspection to replace ‘assert’ calls checking that a variable is not null with !! or ?: error(...)
  • Show “Kotlin not configured” notification when opening a .kt file in the IDE if the Kotlin runtime is not configured for the corresponding module
  • Action to generate the toString() method
  • Support for implementing members by primary constructor parameters
  • Parameter info popup works for showing type parameters
  • Completion offers name variants based on unresolved identifiers in current file
  • Quickfix for adding missing branches to a when expression
  • Support for moving nested classes to the upper level or into another top-level class
  • @Suppress now works for IDE inspections

Installation Instructions

For the users of IntelliJ IDEA, automatic updates may not work in the IDE, so you’ll need to download the plugin and install it from a zip file:

  • Download here
  • Go to Preferences | Plugins and click Install plugin from disk…

Sorry for the inconvenience.

Stay tuned

The final release is approaching, meanwhile — have a nice Kotlin! :)

P.S. See the discussions on Hacker News and Reddit.

About Andrey Breslav

Andrey is the lead language designer of Kotlin at JetBrains.
This entry was posted in Releases. Bookmark the permalink.

41 Responses to Kotlin 1.0 Release Candidate is Out!

  1. jugglingcats says:

    Exciting!

  2. Christoph Lingg says:

    final spurt!

  3. Pingback: Kotlin awesome tricks for Android - Antonio Leiva

  4. Dzmitry says:

    Cool!

  5. Dave says:

    Very very good!! :)

    What do we do about dependencies? Anko, Injekt, Kotson? Do I have to go back to beta version meanwhile? How do I go back until things are working?

    Thanks.

  6. Dave says:

    It looks like Anko 0.8.2 and Injekt 1.12.+ resolves the problem, and issue was posted for Kotson…

  7. John D says:

    Did kapt() get removed from the gradle plugin?

    • John D says:

      Nevermind- I changed
      apply plugin: ‘kotlin-android’
      to
      apply plugin: ‘kotlin-android-extensions’

      which is incorrect.

  8. Pingback: Kotlin 1.0 Release Candidate is Out! | Kotlin Blog – Temporary index

  9. Denis says:

    What about Idea 14? I’m having trouble installing plugin from disk.
    Error message states that “Plugin ‘Kotlin’ is incompatible with this installation”.

    I’m using Idea 14.1.5

    Thanks!

  10. Dmitry Kalita says:

    After updating from beta, I have a trouble with @get:JvmName annotation, that works fine before. So the next code:

    interface AppItem {
    @get:JvmName(“hasIcon”)
    val hasIcon: Boolean
    }

    throws compile-time error: “Error:(43, 2) ”@JvmName” annotation is not applicable to this declaration”.

    What is the right way to annotate getter now?

    • This is the right way, but renaming virtual members is forbidden, so you can’t annotate a getter in a interface

      • Dmitry Kalita says:

        May be it will good idea, if kotlin will not add “get” prefix to getter of property, that name starts with “has”. Like kotlin already does, if name starts with “is”. What do you think?

  11. Eugene says:

    Does Android module require both now to use kotlin-android-extensions?
    1. apply plugin: ‘kotlin-android-extensions’
    2. buildscript {
    dependencies {
    classpath “org.jetbrains.kotlin:kotlin-android-extensions:kotlinVersion”
    }
    }

    • yanex says:

      You don’t need to add the “org.jetbrains.kotlin:kotlin-android-extensions:…” artifact dependency.

      • Eugene says:

        Not true for me.
        If I remove #2 dependency and try to clean & rebuild the project, I see errors
        Error:(39, 8) Unresolved reference: kotlinx
        and so on.

      • Eugene says:

        Ok, I went thru Stackoverflow question by link bellow. If I put “org.jetbrains.kotlin:kotlin-gradle-plugin” dependency instead, it works. But it strange, guys :) You have to fix it. If plugin dependency defined in global script, why it is required in module script also?

  12. vasea says:

    1.0.0-rc-1036 sources jar, doesn’t contain sources for basic types
    like Array or String
    Instead they have .kotlin_class extension,

    • Dmitry Jemerov says:

      These sources don’t exist. Kotlin’s String is simply java.lang.String for which you can find source in the JDK, and Kotlin’s Array is a Java array which is defined by the JVM directly.

      • vasea says:

        but Intellij IDEA 15 doesn’t know that, it shows decompiled version instead, so thats the problem, you cannot see source for some basic types in IDEA.

  13. Pingback: Kotlin 1.0 RC announced, the Visa Developer Platform, and Python 3 comes to Scrapy—SD Times news digest: Feb. 5, 2016 - SD Times

  14. Pingback: Kotlin RC and kotlinx – XRubio.com

  15. Pingback: Kotlin 1.0 RC announced, the Visa Developer Platform, and Python 3 comes to Scrapy—SD Times news digest: Feb. 5, 2016 | OnBrave Software

  16. mintori says:

    Kotlin is the best JVM language out there. Thanks so much!!!

  17. Pingback: Kotlin dilinin 1.0 RC sürümü anons edildi | BTninja

  18. Yiyo Castillo says:

    Please, someone can help me? I have a problem with this release candidate. I can’t import nothing from kotlinx package even using apply “kotlin-android-extensions”. The full description of problem is here: http://stackoverflow.com/questions/35299825/unresolved-reference-kotlinx-kotlin-1-0-0-rc-1036

  19. Max says:

    While the list of changes is great, there’s little additional information about what defines the release candidate here. What makes it different from a beta? What sort of changes can we expect to find or not find between now and 1.0? Is there a roadmap or timeline for 1.0, now that we’re relatively close, or is it still a “when it’s done” sort of thing? What are the main factors in determining when to release 1.0?

  20. Pingback: Szumma #026 – 2016 4-6. hét | d/fuel

  21. Pingback: IntelliJ IDEA 16 EAP: Viel Neues für Spring Boot - JAXenter

  22. Pingback: Revue de Presse Xebia | Blog Xebia France

  23. Pingback: Mobile digest #3 February 01-15.02.2016 | mfp.HELP()

  24. Pingback: Kotlin, el nuevo lenguaje de programación para Android | Androideity

Comments are closed.