I've recently installed IntelliJ IDEA in an attempt to learn Kotlin. I've set up a Kotlin project and configured IDEA to use the latest stable release of the Kotlin plugin (1.2.71-release-IJ2018.2-1).
The following code works fine if executed in a project file (e.g. src/main.kt
):
sealed class Port
class InputPort<in T> : Port()
class OutputPort<out T> : Port()
However, if I try to execute this in a scratch file instead, I get these errors:
scratch.kts:2:25: error: cannot access '<init>': it is private in 'Port'
class InputPort<in T> : Port()
^
scratch.kts:2:25: error: this type is sealed, so it can be inherited by only its own nested classes or objects
class InputPort<in T> : Port()
^
scratch.kts:3:27: error: cannot access '<init>': it is private in 'Port'
class OutputPort<out T> : Port()
^
scratch.kts:3:27: error: this type is sealed, so it can be inherited by only its own nested classes or objects
class OutputPort<out T> : Port()
^
From the Kotlin documentation, I can see that this is because this usage of sealed classes is only valid in Kotlin 1.1+. This implies that the project files are being executed with >= Kotlin 1.1, whereas scratch files are using < Kotlin 1.1.
What I'm wondering is why Kotlin scratch files don't appear to use the same version of Kotlin as the main project files do, and how I can specify the Kotlin version to use for executing the scratch files.
Below is an example of a run/debug configuration I use for my scratch files:
When executing the scratch file, I see the following command appear in the scratch output pane (formatting altered for clarity):
"C:\Program Files\Java\jdk-11\bin\java.exe" ^
-javaagent:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\182.4505.22\lib\idea_rt.jar=53595:C:\Users\<me>\AppData\Local\JetBrains\Toolbox\apps\IDEA-C\ch-0\182.4505.22\bin ^
-Dfile.encoding=windows-1252 ^
-classpath C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-compiler.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-reflect.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-stdlib.jar;C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc\lib\kotlin-script-runtime.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler ^
-kotlin-home C:\Users\<me>\.IdeaIC2018.2\config\plugins\Kotlin\kotlinc
-script C:/Users/<me>/.IdeaIC2018.2/config/scratches/scratch_2.kts
It isn't a problem with your configuration. Currently sealed class can be inherited only by its own nested class in Kotlin scripts.
There is an issue in YouTrack: https://youtrack.jetbrains.com/issue/KT-20180