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"))