Kotlin 1.1.3 is out

Posted on by Dmitry Jemerov

We’re happy to announce the release of Kotlin 1.1.3, a new bugfix and tooling update for Kotlin 1.1. The update brings a number of new IDE features, performance improvements in the compiler and IDE, efficiency improvements for generated bytecode, and lots of bugfixes. 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 Canary.

Note: There is an issue with Android Studio 3.0 Canary 4 which prevents correct loading of Kotlin plugin updates, so you won’t be able to install this update into Canary 4. Kotlin 1.1.3 will be bundled into Android Studio 3.0 Canary 5.

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: AJ Alt, Chris Horner, Gaetan Zoritchak, Jonathan Leitschuh, Kirill Rakhman, Marek Langiewicz, Nadia Humbert-Labeaumaz, Shaun Reich, Yoshinori Isogai, and last but not least Yuli Fiterman (who contributed an initial implementation of one of the major new features in this release, parameter/type hints). Thanks to everyone who tried the EAP builds and sent us feedback, too!

JDK 9 Support

This release adds initial support of compiling Kotlin code against a Java 9 JDK. Note that module-based visibility checks will be supported in future 1.1.x updates; as of 1.1.3, Kotlin doesn’t use information from module-info.java in any way.

Maven Parallel Builds

The Kotlin Maven plugin now supports parallel builds, so if you run Maven with the -T option, it will now be able to compile multiple Kotlin modules in parallel.

kapt Incremental Compilation

kapt now builds Java stubs incrementally, which makes builds using annotation processing significantly faster.

TODO Highlighting

Usages of the TODO() method are now highlighted in the editor as TODOs and shown in the TODO view.

kotlin113-todo

Semantic Highlighting

If you enable semantic highlighting in the Colors & Fonts settings, Kotlin will highlight the definition and all occurrences of every local variable and parameter with a distinct color.

kotlin113-semantic-highlighting

Parameter Name Hints

Following the lead of IntelliJ IDEA’s Java support, Kotlin now supports showing editor hints for parameter names in calls where the meaning of the arguments may not be clear from the context. This is particularly useful for calling Java code from Kotlin – in pure Kotlin code, such situations should be resolved through the use of named arguments.

kotlin113-parameter-name

Type Hints

Similarly to the previous feature, the Kotlin plugin now supports showing inferred types of variables, functions and parameters in editor hints. This functionality is disabled by default; you can enable it in the editor appearance settings.

kotlin113-type-hints

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!

Comments below can no longer be edited.

45 Responses to Kotlin 1.1.3 is out

  1. Ladislav Thon says:

    February 17, 2014

    Okay, the instance initializer hack makes me sad. Almost sounds like we can’t do better with Kotlin… I’ll try to think about alternatives; IMHO, spek should be a function just like given, on and it.

    • Hadi Hariri says:

      February 17, 2014

      Ladislav,

      Originally a spec was just a function. The problem is that right now we’re using JUnit to leverage and not have to re-write all the functionality of plugins etc. That’s why the base class (not too keen on it either ). But open to alternatives.

  2. Guangyu HE says:

    February 17, 2014

    Does AndroidStudio support Spek? Can I use it for android development?
    It seems that Test writen in java could be executed as general junit test and as android test, kotlin tests could be executed only as junit test, so kotlin tests couldn’t be executed now.

    • Hadi Hariri says:

      February 17, 2014

      It should work. If you have any issues, please file it on GitHub and we’ll get to it.

  3. Bruno Santos says:

    February 20, 2014

    Hadi,

    Small typo in Spec usage page. Maven dependency should be something like:

    org.spek
    spek
    0.1-SNAPSHOT
    test

  4. Bruno Santos says:

    February 20, 2014

    Hadi,

    Small typo in Spec usage page. Maven dependency should be something like:

    groupId: org.spek
    artifactId: spek
    version: 0.1-SNAPSHOT
    scope: test

    • Hadi Hariri says:

      March 19, 2014

      Thanks will fix. Also it’s all OSS, so PR’s are more than welcome 🙂

  5. Bruno Santos says:

    February 20, 2014

    A couple of things:

    – It would be nice to also have support for given/when/then
    – It uses a JUnit Runner. This prevents users from using other runners like Spring JUnit Runner. Any plans to go around this limitation in a near future?

    • Hadi Hariri says:

      February 21, 2014

      Bruno,

      Given/On/It is pretty much the same thing as Given/When/Then. The issue is that When is a keyword in Kotlin. I guess in output formatters we could make the option to spit out these keywords if absolutely required. In terms of JUnit runner, right now we’re leveraging a whole bunch of functionality, such as the integrated JUnit test runner in IDEA and it would be quite a bit of work to replace. On the flip side, relying on JUnit does bring some limitations that would be nice to remove. Basically, the cards are on the table for it.

  6. Даниил Водопьян says:

    February 25, 2014

    Aren’t you afraid of having such short two-letter names in your framework? I mean, it is pretty ok to have short keywords in stdlib, but if you create a separate lib, there could be a conflict with others frameworks.

    I can not come up with better keywords now, but maybe I would prefer ‘itShould’ instead of ‘it’.

    • Hadi Hariri says:

      February 26, 2014

      I guess in those cases we could alias things.

  7. Даниил Водопьян says:

    March 21, 2014

    Hi again!

    Some time ago I faced a problem that I did not know the file where the particular team had its tests for a particular function. So I had to guess and look over the tests till I found the one I needed.

    Thus I would request for an annotation ‘testedBy()’, which will contain the path or the full package name for the function or class it is attached to.

    Also it would be cool to have navigation on such specifications.

    Thank you

    PS By the way, where should I write my thoughts on Spec? Is there a forum or an issue tracker?

    • Hadi Hariri says:

      March 21, 2014

      Hi,

      Best place is the issue tracker on GitHub.

      https://github.com/JetBrains/spek/issues/new

      Wouldn’t this case more be solved using code coverage for instance? Many code coverage tools allow ability to see what section of code is covered by which tests.

  8. David Leppik says:

    April 16, 2015

    Spek runs on top of JUnit. Can it be run alongside JUnit 3, or does it require JUnit 4?

    • Hadi Hariri says:

      April 16, 2015

      We use JUnit 4 internally. I’m not sure if it will work with 3. However, we’re looking at decoupling from JUnit.

  9. Christian says:

    October 12, 2015

    I’d like to see an additional “flat” style, like ScalaTest FlatSpec:

    "Something" should "do it right" in {
      something.doIt()
      assert(...)
    }
    

    Deeply nested APIs tend to be confusing. The Spek API adds three levels of indentation compared to flat styles. And, as nice as the idea is in principle, it doesn’t add that much. It is still far away from “real specs” like Cucumber specs. From my point of view it is more a polished unit test – sorry. But I like the effort and I think that Kotlin should have a test framework. Nice table driven tests for example are not possible with TestNG and JUnit.

  10. doubtful says:

    June 23, 2017

    any support for incremental support for the command line tools ? or at least the ability to compile a single unit of code regardless of interdependencies…. we don’t all love the one or two supported IDE’s

    • Dmitry Jemerov says:

      June 24, 2017

      With both Maven and Gradle, you have full support for incremental compilation, and they can be used entirely from the command line, without any IDE. Not sure what you mean by “compiling a single unit of code regardless of interdependencies”; Kotlin does require access to the dependencies of the code you’re compiling, and it’s not really possible to change that.

  11. Alexander says:

    June 24, 2017

    What are precise implications of this? Doesn’t Gradle still disable incremental compilation when annotation processors are present on classpath? Or does kapt support incremental compilation already? If so, what’s incremental and what is not?

  12. Sanny says:

    June 24, 2017

    I always turn off parameter name hints as it pollutes code most of the time (I like brief code). And I will not use type hints because of same reason.

    Cool thing would be to have type hints still right in the code but displayed on manner of variable values in the code during debugging. So, while debugging you would see values, and while coding you would see types instead. All in beautiful grey.

    • junkdog says:

      June 30, 2017

      I’ve mapped CTRL-Insert to toggling type hints; it can be pretty useful when coding against a verbose or unfamiliar API.

  13. Hans says:

    June 24, 2017

    Great update! Love the parameter name hints.

  14. Daniel Gronau says:

    June 24, 2017

    Hey, could someone confirm this problem?

    I installed the Kotlin-Plugin Version: 1.1.3-release-IJ2017.2-1, set the Kotlin-Version in Gradle to 1.1.3. After this, the DSL from graphkool (GraphQL lib) freaks the compiler out. Things like

    .field(“content” .. contentType dataFetcher DataUtils.contentFetcher)

    lead to an exception, while the desugared version works just fine:

    .field(“content”.rangeTo(contentType).dataFetcher(DataUtils.contentFetcher))

    The exception is:

    Error:Kotlin: [Internal Error] org.jetbrains.kotlin.util.KotlinFrontEndException: Exception while analyzing expression at (17,28) in D:/Code/runar/src/main/kotlin/runar/schema/Schema.kt:
    “content”..contentType
    dataFetcher DataUtils.contentFetcher

    at org.jetbrains.kotlin.types.expressions.ExpressionTypingVisitorDispatcher.logOrThrowException(ExpressionTypingVisitorDispatcher.java:250)
    


    Caused by: java.lang.IndexOutOfBoundsException: Empty list doesn’t contain element at index 0.
    at kotlin.collections.EmptyList.get(Collections.kt:45)

    • Dmitry Jemerov says:

      June 27, 2017

      Could you please file a YouTrack issue with a full stacktrace? Thanks!

  15. atliwen says:

    June 26, 2017

    [ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.1.3:compile (compile) on project hello-world: Execution compile of goal org.jetbrains.kotlin:kotlin-m
    aven-plugin:1.1.3:compile failed: A required class was missing while executing org.jetbrains.kotlin:kotlin-maven-plugin:1.1.3:compile: org/apache/maven/plugin/compiler/Depende
    ncyCoordinate
    [ERROR] —————————————————–
    [ERROR] realm = plugin>org.jetbrains.kotlin:kotlin-maven-plugin:1.1.3
    [ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
    [ERROR] urls[0] = file:/B:/maven/Repository/org/jetbrains/kotlin/kotlin-maven-plugin/1.1.3/kotlin-maven-plugin-1.1.3.jar
    [ERROR] urls[1] = file:/B:/maven/Repository/org/sonatype/aether/aether-util/1.13.1/aether-util-1.13.1.jar
    [ERROR] urls[2] = file:/B:/maven/Repository/org/sonatype/sisu/sisu-inject-bean/2.3.0/sisu-inject-bean-2.3.0.jar
    [ERROR] urls[3] = file:/B:/maven/Repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0-no_aop.jar
    [ERROR] urls[4] = file:/B:/maven/Repository/org/sonatype/sisu/sisu-guava/0.9.9/sisu-guava-0.9.9.jar
    [ERROR] urls[5] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-interpolation/1.14/plexus-interpolation-1.14.jar
    [ERROR] urls[6] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-utils/2.0.6/plexus-utils-2.0.6.jar
    [ERROR] urls[7] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar
    [ERROR] urls[8] = file:/B:/maven/Repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar
    [ERROR] urls[9] = file:/B:/maven/Repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar
    [ERROR] urls[10] = file:/B:/maven/Repository/org/apache/maven/plugin-tools/maven-plugin-annotations/3.4/maven-plugin-annotations-3.4.jar
    [ERROR] urls[11] = file:/B:/maven/Repository/org/jetbrains/kotlin/kotlin-compiler/1.1.3/kotlin-compiler-1.1.3.jar
    [ERROR] urls[12] = file:/B:/maven/Repository/org/apache/maven/plugins/maven-compiler-plugin/3.5.1/maven-compiler-plugin-3.5.1.jar
    [ERROR] urls[13] = file:/B:/maven/Repository/org/apache/maven/shared/maven-shared-utils/3.0.0/maven-shared-utils-3.0.0.jar
    [ERROR] urls[14] = file:/B:/maven/Repository/commons-io/commons-io/2.4/commons-io-2.4.jar
    [ERROR] urls[15] = file:/B:/maven/Repository/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.jar
    [ERROR] urls[16] = file:/B:/maven/Repository/org/apache/maven/shared/maven-shared-incremental/1.1/maven-shared-incremental-1.1.jar
    [ERROR] urls[17] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-compiler-api/2.7/plexus-compiler-api-2.7.jar
    [ERROR] urls[18] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-compiler-manager/2.7/plexus-compiler-manager-2.7.jar
    [ERROR] urls[19] = file:/B:/maven/Repository/org/codehaus/plexus/plexus-compiler-javac/2.7/plexus-compiler-javac-2.7.jar
    [ERROR] Number of foreign imports: 1
    [ERROR] import: Entry[import from realm ClassRealm[maven.api, parent: null]]
    [ERROR]
    [ERROR] —————————————————–: org.apache.maven.plugin.compiler.DependencyCoordinate
    [ERROR] -> [Help 1]

  16. Kotlin 1.1.3 veröffentlicht: Java 9 Support & buntes Highlighting - JAXenter says:

    June 26, 2017

    […] Farbiges semantisches Highlighting / Quelle: JetBrains Blog […]

  17. Laszlo says:

    June 26, 2017

    Since I updated to this version of plugin Android Studio is freezing after couple of seconds of usage and only option at that point is to kill it. I can’t even use older plugin with latest android studio because it doesn’t let me to install it.

    • Dmitry Jemerov says:

      June 27, 2017

      Could you please file a YouTrack issue and attach the entire contents of the logs directory? (To locate the directory, use Help | Show Log in…)

    • TIAGO LOUIS ZONTAG says:

      July 4, 2017

      Same problem here, random freezes.. some solutions for that?

      • Dmitry Jemerov says:

        July 4, 2017

        Please try Kotln 1.1.3-2, which has been released today.

  18. Jan says:

    June 26, 2017

    Thumb up for parameter name hints.
    JavaScript compilation is now 2x slower though. Our project compile time was:
    <1.1 Kotlin – 30s
    1.1.2 – 60s
    1.1.3 – 120s
    Tested on multiple workstations. Shall I raise a ticket for that?

    • Dmitry Jemerov says:

      July 4, 2017

      This should be fixed in Kotlin 1.1.3-2.

  19. Max says:

    June 26, 2017

    As it is possible to target java7 with kotlin it would be just consequent to also support jdk7 as compile engine. Right now it is not possible because kotlin-gradle-plugin is compiled with target java8 – resulting in a major.minor error when trying to use kotlin with a jdk7. There are still legacy projects based on jdk7 (even if jdk7 is not maintained any more), but it is not possible to introduce kotlin like this.

    I know that it is possible to use jdk8 and set the compile-target as java7, but that bears always the danger that a developer uses a jdk8 class which ultimately will not be found in the java7 environment – resulting in a run-time error.

    • Dmitry Jemerov says:

      June 27, 2017

      The JDK under which Kotlin runs is not related to the JDK against which the project is compiled. You can run Kotlin under JDK 8 and compile against JDK 7 (using -jdk-home command line argument for kotlinc or the equivalent options in Maven, Gradle and IntelliJ), and in that case an attempt to use a JDK 8 class will be a compilation error.

  20. Mark Vedder says:

    June 26, 2017

    I’m loving the Type Hints!

  21. Daniel Gomez says:

    June 27, 2017

    Semantic hightlights and param names are just for Android Studio 3.0 Canary? I cant find those options on 2.3

    • Dmitry Jemerov says:

      June 28, 2017

      Yes, they depend on platform features added in a later version of the IntelliJ Platform than the one used in AS 2.3.

      • DANIEL GOMEZ RICO says:

        July 1, 2017

        Ok thanks

  22. Jack Zhu says:

    June 28, 2017

    has 1.1.3 solved the “accidental override getter/setter methods defined in superTypes” ??
    this issue really really sucks, and causes too much redundant coding work.

    • Dmitry Jemerov says:

      June 28, 2017

      No. This is a fairly difficult design issue, and we don’t have any definite plans to change Kotlin’s behavior at this time.

      • Jack Zhu says:

        June 28, 2017

        thank you for reply. expecting a decent solution in future.

  23. Miguel says:

    July 12, 2017

    Type Hints are useful but it’s just a bandaid for the problem of too much type inference. Type Hints are not going to help you when you’re reading code on GitHub or somewhere else. In adopting Kotlin I’m encouraging my team to be avoid too much inference and to write out the types explicitly.

  24. Daniel Huhn says:

    July 18, 2017

    Are there any plans to support CTRL-Click onto type hints?

    I often want to jump to the decompiled definition of a variable, currently I click on the methods, look for the return type and click there. It works but is complictated in case the return type is a generic parameter.

    • Dmitry Jemerov says:

      July 18, 2017

      No, we don’t plan to make the hints interactive at this time. To go to the variable type, you can use the Navigate | Type Declaration action (Ctrl-Shift-B or Cmd-Shift-B if you’re on Mac OS).