diff --git a/.gitignore b/.gitignore
index 58d1ff7..36eb4ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
target/
-.idea
\ No newline at end of file
+.idea
+.bsp
diff --git a/build.sbt b/build.sbt
index e5ba767..bb34b31 100644
--- a/build.sbt
+++ b/build.sbt
@@ -36,5 +36,6 @@ bintrayOrganization := None
// scripted
scriptedLaunchOpts ++= Seq(
"-Xmx1024m",
- "-Dplugin.version=" + version.value
-)
+ "-Dplugin.org=" + organization.value,
+ "-Dplugin.name=" + name.value,
+ "-Dplugin.version=" + version.value)
diff --git a/project/plugins.sbt b/project/plugins.sbt
index 966fde3..e1a2bc9 100644
--- a/project/plugins.sbt
+++ b/project/plugins.sbt
@@ -1,4 +1,4 @@
libraryDependencies += "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value
addSbtPlugin("org.foundweekends" % "sbt-bintray" % "0.5.4")
-addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
\ No newline at end of file
+addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
diff --git a/src/main/scala/KotlinCompile.scala b/src/main/scala/KotlinCompile.scala
index 9b506cc..2029597 100644
--- a/src/main/scala/KotlinCompile.scala
+++ b/src/main/scala/KotlinCompile.scala
@@ -3,13 +3,13 @@ package kotlin
import java.io.File
import java.lang.reflect.{Field, Method}
import java.util.jar.JarEntry
-
import sbt.Keys.{Classpath, TaskStreams}
import sbt._
import sbt.io._
import sbt.internal.inc.classpath.ClasspathUtilities
import collection.JavaConverters._
+import scala.math.Ordered.orderingToOrdered
import scala.util.Try
/**
@@ -27,6 +27,7 @@ object KotlinCompile {
def compile(options: Seq[String],
jvmTarget: String,
+ kotlinVersion: String,
sourceDirs: Seq[File],
kotlinPluginOptions: Seq[String],
classpath: Classpath,
@@ -35,7 +36,7 @@ object KotlinCompile {
import language.reflectiveCalls
val stub = KotlinStub(s, kotlinMemo(compilerClasspath))
val args = stub.compilerArgs
- stub.parse(args.instance, options.toList)
+ stub.parse(kotlinVersion, args.instance, options.toList)
val kotlinFiles = "*.kt" || "*.kts"
val javaFiles = "*.java"
@@ -147,16 +148,31 @@ case class KotlinStub(s: TaskStreams, kref: KotlinReflection) {
Proxy.newProxyInstance(cl, Array(messageCollectorClass), messageCollectorInvocationHandler)
}
- def parse(args: Object, options: List[String]): Unit = {
+ def parse(kotlinVersion: String, args: Object, options: List[String]): Unit = {
// TODO FIXME, this is much worse than it used to be, the parsing api has been
// deeply in flux since 1.1.x
val parser = kref.cl.loadClass(
"org.jetbrains.kotlin.cli.common.arguments.ParseCommandLineArgumentsKt")
val commonToolArguments = cl.loadClass(
- "org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments")
- val parserMethod = parser.getMethod("parseCommandLineArguments", classOf[java.util.List[java.lang.String]], commonToolArguments)
+ "org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments"
+ )
import collection.JavaConverters._
- parserMethod.invoke(null, options.asJava, args)
+ if (KotlinVersion(kotlinVersion) < KotlinVersion("1.7.0")) {
+ val parserMethod = parser.getMethod(
+ "parseCommandLineArguments",
+ classOf[java.util.List[java.lang.String]],
+ commonToolArguments
+ )
+ parserMethod.invoke(null, options.asJava, args)
+ } else {
+ val parserMethod = parser.getMethod(
+ "parseCommandLineArguments",
+ classOf[java.util.List[java.lang.String]],
+ commonToolArguments,
+ classOf[Boolean]
+ )
+ parserMethod.invoke(null, options.asJava, args, false: java.lang.Boolean)
+ }
}
def compilerArgs = {
diff --git a/src/main/scala/KotlinPlugin.scala b/src/main/scala/KotlinPlugin.scala
index 151b634..062b331 100644
--- a/src/main/scala/KotlinPlugin.scala
+++ b/src/main/scala/KotlinPlugin.scala
@@ -57,7 +57,7 @@ object KotlinPlugin extends AutoPlugin {
}
},
kotlinVersion := "1.3.50",
- kotlincJvmTarget := "1.6",
+ kotlincJvmTarget := "1.8",
kotlincOptions := Nil,
kotlincPluginOptions := Nil,
watchSources ++= {
@@ -80,6 +80,7 @@ object KotlinPlugin extends AutoPlugin {
kotlinCompile := Def.task {
KotlinCompile.compile(kotlincOptions.value,
kotlincJvmTarget.value,
+ kotlinVersion.value,
sourceDirectories.value, kotlincPluginOptions.value,
dependencyClasspath.value, (managedClasspath in KotlinInternal).value,
classDirectory.value, streams.value)
diff --git a/src/sbt-test/kotlin/basic-android/build.sbt b/src/sbt-test/kotlin/basic-android/build.sbt
deleted file mode 100644
index 513bf22..0000000
--- a/src/sbt-test/kotlin/basic-android/build.sbt
+++ /dev/null
@@ -1,5 +0,0 @@
-enablePlugins(AndroidApp)
-
-kotlinClasspath(Compile, bootClasspath in Android)
-
-kotlinLib("stdlib")
diff --git a/src/sbt-test/kotlin/basic-android/project.properties b/src/sbt-test/kotlin/basic-android/project.properties
deleted file mode 100644
index 68a9814..0000000
--- a/src/sbt-test/kotlin/basic-android/project.properties
+++ /dev/null
@@ -1 +0,0 @@
-target=android-22
diff --git a/src/sbt-test/kotlin/basic-android/project/android.sbt b/src/sbt-test/kotlin/basic-android/project/android.sbt
deleted file mode 100644
index 52df55a..0000000
--- a/src/sbt-test/kotlin/basic-android/project/android.sbt
+++ /dev/null
@@ -1 +0,0 @@
-addSbtPlugin("org.scala-android" % "sbt-android" % "2.0.0-SNAPSHOT")
diff --git a/src/sbt-test/kotlin/basic-android/project/plugins.sbt b/src/sbt-test/kotlin/basic-android/project/plugins.sbt
deleted file mode 100644
index e12d712..0000000
--- a/src/sbt-test/kotlin/basic-android/project/plugins.sbt
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
\ No newline at end of file
diff --git a/src/sbt-test/kotlin/basic-android/src/main/AndroidManifest.xml b/src/sbt-test/kotlin/basic-android/src/main/AndroidManifest.xml
deleted file mode 100644
index 487bf68..0000000
--- a/src/sbt-test/kotlin/basic-android/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/sbt-test/kotlin/basic-android/src/main/kotlin/MainActivity.kt b/src/sbt-test/kotlin/basic-android/src/main/kotlin/MainActivity.kt
deleted file mode 100644
index 49cc92c..0000000
--- a/src/sbt-test/kotlin/basic-android/src/main/kotlin/MainActivity.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package sbt.kotlin.test
-
-import android.app.Activity
-import android.os.Bundle
-
-class MainActivity : Activity()
-{
- /** Called when the activity is first created. */
- override fun onCreate(savedInstanceState: Bundle?)
- {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.main)
- }
-}
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-hdpi/ic_launcher.png b/src/sbt-test/kotlin/basic-android/src/main/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 96a442e..0000000
Binary files a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-ldpi/ic_launcher.png b/src/sbt-test/kotlin/basic-android/src/main/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 9923872..0000000
Binary files a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-ldpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-mdpi/ic_launcher.png b/src/sbt-test/kotlin/basic-android/src/main/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 359047d..0000000
Binary files a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-xhdpi/ic_launcher.png b/src/sbt-test/kotlin/basic-android/src/main/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d76..0000000
Binary files a/src/sbt-test/kotlin/basic-android/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/layout/main.xml b/src/sbt-test/kotlin/basic-android/src/main/res/layout/main.xml
deleted file mode 100644
index e745f63..0000000
--- a/src/sbt-test/kotlin/basic-android/src/main/res/layout/main.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
diff --git a/src/sbt-test/kotlin/basic-android/src/main/res/values/strings.xml b/src/sbt-test/kotlin/basic-android/src/main/res/values/strings.xml
deleted file mode 100644
index 0be1647..0000000
--- a/src/sbt-test/kotlin/basic-android/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- MainActivity
-
diff --git a/src/sbt-test/kotlin/basic-android/test b/src/sbt-test/kotlin/basic-android/test
deleted file mode 100644
index 472120d..0000000
--- a/src/sbt-test/kotlin/basic-android/test
+++ /dev/null
@@ -1,3 +0,0 @@
-> android:package
-$ exists target/android/output/basic-android-debug.apk
-> checkDex
diff --git a/src/sbt-test/kotlin/basic-android/tests.sbt b/src/sbt-test/kotlin/basic-android/tests.sbt
deleted file mode 100644
index de14985..0000000
--- a/src/sbt-test/kotlin/basic-android/tests.sbt
+++ /dev/null
@@ -1,23 +0,0 @@
-import android.Keys._
-import sys.process._
-
-val androidBuilder = SettingKey[Logger => com.android.builder.core.AndroidBuilder]("android-builder") in Android
-
-TaskKey[Unit]("checkDex") := {
- val p = androidBuilder.value
- val s = streams.value
- val layout = (projectLayout in Android).value
- implicit val out = outputLayout.value
- val tools = p(s.log).getTargetInfo.getBuildTools.getLocation
- val dexdump = tools / "dexdump"
- val lines = Seq(
- dexdump.getAbsolutePath, "-i",
- (layout.dex / "classes.dex").getAbsolutePath).lineStream
- val hasKotlinClasses = lines map (_.trim) exists { l =>
- l.startsWith("Class descriptor") && l.endsWith("'Lkotlin/Unit;'")
- }
- if (!hasKotlinClasses) {
- lines filter (_.trim.startsWith("Class descriptor")) foreach (l => s.log.info(l))
- sys.error("Kotlin classes not found")
- }
-}
diff --git a/src/sbt-test/kotlin/basic-tests/project/plugins.sbt b/src/sbt-test/kotlin/basic-tests/project/plugins.sbt
index f3894bd..22a28e4 100644
--- a/src/sbt-test/kotlin/basic-tests/project/plugins.sbt
+++ b/src/sbt-test/kotlin/basic-tests/project/plugins.sbt
@@ -1,9 +1 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
\ No newline at end of file
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/basic/project/plugins.sbt b/src/sbt-test/kotlin/basic/project/plugins.sbt
index e12d712..22a28e4 100644
--- a/src/sbt-test/kotlin/basic/project/plugins.sbt
+++ b/src/sbt-test/kotlin/basic/project/plugins.sbt
@@ -1,9 +1 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
\ No newline at end of file
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/extensions-android/build.sbt b/src/sbt-test/kotlin/extensions-android/build.sbt
deleted file mode 100644
index ce387f0..0000000
--- a/src/sbt-test/kotlin/extensions-android/build.sbt
+++ /dev/null
@@ -1,13 +0,0 @@
-enablePlugins(AndroidApp)
-javacOptions in Compile ++= "-source" :: "1.7" :: "-target" :: "1.7" :: Nil
-
-kotlinClasspath(Compile, bootClasspath in Android)
-kotlinPlugin("android-extensions")
-kotlinLib("stdlib")
-kotlincPluginOptions in Compile ++= {
- val plugin = KotlinPluginOptions("org.jetbrains.kotlin.android")
- val layout = (projectLayout in Android).value
- plugin.option("package", applicationId.value) ::
- plugin.option("variant", "main;" + layout.res.getCanonicalPath) ::
- Nil
-}
diff --git a/src/sbt-test/kotlin/extensions-android/project.properties b/src/sbt-test/kotlin/extensions-android/project.properties
deleted file mode 100644
index 68a9814..0000000
--- a/src/sbt-test/kotlin/extensions-android/project.properties
+++ /dev/null
@@ -1 +0,0 @@
-target=android-22
diff --git a/src/sbt-test/kotlin/extensions-android/project/android.sbt b/src/sbt-test/kotlin/extensions-android/project/android.sbt
deleted file mode 100644
index 52df55a..0000000
--- a/src/sbt-test/kotlin/extensions-android/project/android.sbt
+++ /dev/null
@@ -1 +0,0 @@
-addSbtPlugin("org.scala-android" % "sbt-android" % "2.0.0-SNAPSHOT")
diff --git a/src/sbt-test/kotlin/extensions-android/project/plugins.sbt b/src/sbt-test/kotlin/extensions-android/project/plugins.sbt
deleted file mode 100644
index 39ed0d0..0000000
--- a/src/sbt-test/kotlin/extensions-android/project/plugins.sbt
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
-
-
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/AndroidManifest.xml b/src/sbt-test/kotlin/extensions-android/src/main/AndroidManifest.xml
deleted file mode 100644
index 487bf68..0000000
--- a/src/sbt-test/kotlin/extensions-android/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/kotlin/MainActivity.kt b/src/sbt-test/kotlin/extensions-android/src/main/kotlin/MainActivity.kt
deleted file mode 100644
index 5eae48c..0000000
--- a/src/sbt-test/kotlin/extensions-android/src/main/kotlin/MainActivity.kt
+++ /dev/null
@@ -1,17 +0,0 @@
-package sbt.kotlin.test
-
-import android.app.Activity
-import android.os.Bundle
-
-import kotlinx.android.synthetic.main.main.*
-
-class MainActivity : Activity()
-{
- /** Called when the activity is first created. */
- override fun onCreate(savedInstanceState: Bundle?)
- {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.main)
- this_is_test.setText("Wow?")
- }
-}
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-hdpi/ic_launcher.png b/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 96a442e..0000000
Binary files a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-ldpi/ic_launcher.png b/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 9923872..0000000
Binary files a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-ldpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-mdpi/ic_launcher.png b/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 359047d..0000000
Binary files a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-xhdpi/ic_launcher.png b/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d76..0000000
Binary files a/src/sbt-test/kotlin/extensions-android/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/layout/main.xml b/src/sbt-test/kotlin/extensions-android/src/main/res/layout/main.xml
deleted file mode 100644
index 96731b3..0000000
--- a/src/sbt-test/kotlin/extensions-android/src/main/res/layout/main.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
diff --git a/src/sbt-test/kotlin/extensions-android/src/main/res/values/strings.xml b/src/sbt-test/kotlin/extensions-android/src/main/res/values/strings.xml
deleted file mode 100644
index 0be1647..0000000
--- a/src/sbt-test/kotlin/extensions-android/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- MainActivity
-
diff --git a/src/sbt-test/kotlin/extensions-android/test b/src/sbt-test/kotlin/extensions-android/test
deleted file mode 100644
index 1898447..0000000
--- a/src/sbt-test/kotlin/extensions-android/test
+++ /dev/null
@@ -1,3 +0,0 @@
-> android:package
-$ exists target/android/output/extensions-android-debug.apk
-> checkDex
diff --git a/src/sbt-test/kotlin/extensions-android/tests.sbt b/src/sbt-test/kotlin/extensions-android/tests.sbt
deleted file mode 100644
index 60dbe94..0000000
--- a/src/sbt-test/kotlin/extensions-android/tests.sbt
+++ /dev/null
@@ -1,23 +0,0 @@
-import android.Keys._
-import sys.process._
-
-val androidBuilder = SettingKey[Logger => com.android.builder.core.AndroidBuilder]("android-builder") in Android
-
-TaskKey[Unit]("checkDex") := {
- implicit val out = outputLayout.value
- val p = androidBuilder.value
- val s = streams.value
- val layout = (projectLayout in Android).value
- val tools = p(s.log).getTargetInfo.getBuildTools.getLocation
- val dexdump = tools / "dexdump"
- val lines = Seq(
- dexdump.getAbsolutePath, "-i",
- (layout.dex / "classes.dex").getAbsolutePath).lineStream
- val hasKotlinClasses = lines map (_.trim) exists { l =>
- l.startsWith("Class descriptor") && l.endsWith("'Lkotlin/Unit;'")
- }
- if (!hasKotlinClasses) {
- lines filter (_.trim.startsWith("Class descriptor")) foreach (l => s.log.info(l))
- sys.error("Kotlin classes not found")
- }
-}
diff --git a/src/sbt-test/kotlin/kotlin-1.1-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.1-compat/project/plugins.sbt
index ff38770..22a28e4 100644
--- a/src/sbt-test/kotlin/kotlin-1.1-compat/project/plugins.sbt
+++ b/src/sbt-test/kotlin/kotlin-1.1-compat/project/plugins.sbt
@@ -1 +1 @@
-addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % sys.props("plugin.version"))
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.2-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.2-compat/project/plugins.sbt
index ff38770..22a28e4 100644
--- a/src/sbt-test/kotlin/kotlin-1.2-compat/project/plugins.sbt
+++ b/src/sbt-test/kotlin/kotlin-1.2-compat/project/plugins.sbt
@@ -1 +1 @@
-addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % sys.props("plugin.version"))
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.3-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.3-compat/project/plugins.sbt
index ff38770..22a28e4 100644
--- a/src/sbt-test/kotlin/kotlin-1.3-compat/project/plugins.sbt
+++ b/src/sbt-test/kotlin/kotlin-1.3-compat/project/plugins.sbt
@@ -1 +1 @@
-addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % sys.props("plugin.version"))
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.5-compat/build.sbt b/src/sbt-test/kotlin/kotlin-1.5-compat/build.sbt
new file mode 100644
index 0000000..475bd97
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.5-compat/build.sbt
@@ -0,0 +1,10 @@
+kotlinLib("stdlib")
+
+kotlinVersion := "1.5.32"
+
+val listClasses = taskKey[Unit]("listClasses")
+
+listClasses := {
+ val classes = (classDirectory in Compile).value.listFiles()
+ streams.value.log.info("classes: " + classes)
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.5-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.5-compat/project/plugins.sbt
new file mode 100644
index 0000000..22a28e4
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.5-compat/project/plugins.sbt
@@ -0,0 +1 @@
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/SimpleScript.kts b/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/SimpleScript.kts
new file mode 100644
index 0000000..50095f7
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/SimpleScript.kts
@@ -0,0 +1 @@
+println("Hello world!")
diff --git a/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/simple.kt b/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/simple.kt
new file mode 100644
index 0000000..fc99fee
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/simple.kt
@@ -0,0 +1,16 @@
+package demo
+
+sealed interface Polygon
+sealed interface Fillable
+
+class FilledRectangle: Polygon, Fillable
+
+@JvmInline
+value class Password(val s: String)
+
+// Test some Kotlin 1.5 features
+fun main() {
+ val rectangle = FilledRectangle()
+
+ val password = Password("")
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.5-compat/test b/src/sbt-test/kotlin/kotlin-1.5-compat/test
new file mode 100644
index 0000000..3ac0ebe
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.5-compat/test
@@ -0,0 +1,4 @@
+> compile
+> listClasses
+$ exists target/scala-2.12/classes/demo/SimpleKt.class
+$ exists target/scala-2.12/classes/SimpleScript.class
diff --git a/src/sbt-test/kotlin/kotlin-1.6-compat/build.sbt b/src/sbt-test/kotlin/kotlin-1.6-compat/build.sbt
new file mode 100644
index 0000000..5e5f4d2
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.6-compat/build.sbt
@@ -0,0 +1,10 @@
+kotlinLib("stdlib")
+
+kotlinVersion := "1.6.21"
+
+val listClasses = taskKey[Unit]("listClasses")
+
+listClasses := {
+ val classes = (classDirectory in Compile).value.listFiles()
+ streams.value.log.info("classes: " + classes)
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.6-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.6-compat/project/plugins.sbt
new file mode 100644
index 0000000..22a28e4
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.6-compat/project/plugins.sbt
@@ -0,0 +1 @@
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/SimpleScript.kts b/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/SimpleScript.kts
new file mode 100644
index 0000000..50095f7
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/SimpleScript.kts
@@ -0,0 +1 @@
+println("Hello world!")
diff --git a/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/simple.kt b/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/simple.kt
new file mode 100644
index 0000000..49ba8ab
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.6-compat/src/main/kotlin/simple.kt
@@ -0,0 +1,16 @@
+package demo
+
+// Test some Kotlin 1.6 features
+fun getSuspending(suspending: suspend () -> Unit) {}
+
+fun suspending() {}
+
+@Target(AnnotationTarget.TYPE_PARAMETER)
+annotation class BoxContent
+
+class Box<@BoxContent T> {}
+
+fun main() {
+ getSuspending { } // OK
+ getSuspending(::suspending) // OK
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.6-compat/test b/src/sbt-test/kotlin/kotlin-1.6-compat/test
new file mode 100644
index 0000000..3ac0ebe
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.6-compat/test
@@ -0,0 +1,4 @@
+> compile
+> listClasses
+$ exists target/scala-2.12/classes/demo/SimpleKt.class
+$ exists target/scala-2.12/classes/SimpleScript.class
diff --git a/src/sbt-test/kotlin/kotlin-1.7-compat/build.sbt b/src/sbt-test/kotlin/kotlin-1.7-compat/build.sbt
new file mode 100644
index 0000000..89a48e3
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.7-compat/build.sbt
@@ -0,0 +1,10 @@
+kotlinLib("stdlib")
+
+kotlinVersion := "1.7.10"
+
+val listClasses = taskKey[Unit]("listClasses")
+
+listClasses := {
+ val classes = (classDirectory in Compile).value.listFiles()
+ streams.value.log.info("classes: " + classes)
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.7-compat/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-1.7-compat/project/plugins.sbt
new file mode 100644
index 0000000..22a28e4
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.7-compat/project/plugins.sbt
@@ -0,0 +1 @@
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/SimpleScript.kts b/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/SimpleScript.kts
new file mode 100644
index 0000000..50095f7
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/SimpleScript.kts
@@ -0,0 +1 @@
+println("Hello world!")
diff --git a/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/simple.kt b/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/simple.kt
new file mode 100644
index 0000000..3abd38a
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.7-compat/src/main/kotlin/simple.kt
@@ -0,0 +1,30 @@
+package demo
+
+abstract class SomeClass {
+ abstract fun execute(): T
+}
+
+class SomeImplementation : SomeClass() {
+ override fun execute(): String = "Test"
+}
+
+class OtherImplementation : SomeClass() {
+ override fun execute(): Int = 42
+}
+
+object Runner {
+ inline fun , T> run(): T {
+ return S::class.java.getDeclaredConstructor().newInstance().execute()
+ }
+}
+
+// Test some Kotlin 1.7 features
+fun main() {
+ // T is inferred as String because SomeImplementation derives from SomeClass
+ val s = Runner.run()
+ assert(s == "Test")
+
+ // T is inferred as Int because OtherImplementation derives from SomeClass
+ val n = Runner.run()
+ assert(n == 42)
+}
diff --git a/src/sbt-test/kotlin/kotlin-1.7-compat/test b/src/sbt-test/kotlin/kotlin-1.7-compat/test
new file mode 100644
index 0000000..3ac0ebe
--- /dev/null
+++ b/src/sbt-test/kotlin/kotlin-1.7-compat/test
@@ -0,0 +1,4 @@
+> compile
+> listClasses
+$ exists target/scala-2.12/classes/demo/SimpleKt.class
+$ exists target/scala-2.12/classes/SimpleScript.class
diff --git a/src/sbt-test/kotlin/kotlin-script/project/build.properties b/src/sbt-test/kotlin/kotlin-script/project/build.properties
deleted file mode 100644
index c0bab04..0000000
--- a/src/sbt-test/kotlin/kotlin-script/project/build.properties
+++ /dev/null
@@ -1 +0,0 @@
-sbt.version=1.2.8
diff --git a/src/sbt-test/kotlin/kotlin-script/project/plugins.sbt b/src/sbt-test/kotlin/kotlin-script/project/plugins.sbt
index ff38770..22a28e4 100644
--- a/src/sbt-test/kotlin/kotlin-script/project/plugins.sbt
+++ b/src/sbt-test/kotlin/kotlin-script/project/plugins.sbt
@@ -1 +1 @@
-addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % sys.props("plugin.version"))
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/mixed-tests/project/plugins.sbt b/src/sbt-test/kotlin/mixed-tests/project/plugins.sbt
index f3894bd..22a28e4 100644
--- a/src/sbt-test/kotlin/mixed-tests/project/plugins.sbt
+++ b/src/sbt-test/kotlin/mixed-tests/project/plugins.sbt
@@ -1,9 +1 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
\ No newline at end of file
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
diff --git a/src/sbt-test/kotlin/mixed/project/plugins.sbt b/src/sbt-test/kotlin/mixed/project/plugins.sbt
index 39ed0d0..22a28e4 100644
--- a/src/sbt-test/kotlin/mixed/project/plugins.sbt
+++ b/src/sbt-test/kotlin/mixed/project/plugins.sbt
@@ -1,11 +1 @@
-{
- val ver = System.getProperty("plugin.version")
- if (ver == null)
- throw new RuntimeException("""
- |The system property 'plugin.version' is not defined.
- |Specify this property using scriptedLaunchOpts -Dplugin.version."""
- .stripMargin)
- else addSbtPlugin("com.hanhuy.sbt" % "kotlin-plugin" % ver)
-}
-
-
+addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))