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.
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.
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.
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.
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!
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
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.
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?
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.
I’ve mapped CTRL-Insert to toggling type hints; it can be pretty useful when coding against a verbose or unfamiliar API.
Great update! Love the parameter name hints.
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
…
Caused by: java.lang.IndexOutOfBoundsException: Empty list doesn’t contain element at index 0.
at kotlin.collections.EmptyList.get(Collections.kt:45)
Could you please file a YouTrack issue with a full stacktrace? Thanks!
[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]
Pingback: Kotlin 1.1.3 veröffentlicht: Java 9 Support & buntes Highlighting - JAXenter
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.
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…)
Same problem here, random freezes.. some solutions for that?
Please try Kotln 1.1.3-2, which has been released today.
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?
This should be fixed in Kotlin 1.1.3-2.
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.
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.
I’m loving the Type Hints!
Semantic hightlights and param names are just for Android Studio 3.0 Canary? I cant find those options on 2.3
Yes, they depend on platform features added in a later version of the IntelliJ Platform than the one used in AS 2.3.
Ok thanks
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.
No. This is a fairly difficult design issue, and we don’t have any definite plans to change Kotlin’s behavior at this time.
thank you for reply. expecting a decent solution in future.
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.
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.
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).