Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Kotlin 1.7 #45

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
target/
.idea
.idea
.bsp
5 changes: 3 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
2 changes: 1 addition & 1 deletion project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")
28 changes: 22 additions & 6 deletions src/main/scala/KotlinCompile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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

/**
Expand All @@ -27,6 +27,7 @@ object KotlinCompile {

def compile(options: Seq[String],
jvmTarget: String,
kotlinVersion: String,
sourceDirs: Seq[File],
kotlinPluginOptions: Seq[String],
classpath: Classpath,
Expand All @@ -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"

Expand Down Expand Up @@ -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 = {
Expand Down
3 changes: 2 additions & 1 deletion src/main/scala/KotlinPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ object KotlinPlugin extends AutoPlugin {
}
},
kotlinVersion := "1.3.50",
kotlincJvmTarget := "1.6",
kotlincJvmTarget := "1.8",
kotlincOptions := Nil,
kotlincPluginOptions := Nil,
watchSources ++= {
Expand All @@ -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)
Expand Down
5 changes: 0 additions & 5 deletions src/sbt-test/kotlin/basic-android/build.sbt

This file was deleted.

1 change: 0 additions & 1 deletion src/sbt-test/kotlin/basic-android/project.properties

This file was deleted.

1 change: 0 additions & 1 deletion src/sbt-test/kotlin/basic-android/project/android.sbt

This file was deleted.

9 changes: 0 additions & 9 deletions src/sbt-test/kotlin/basic-android/project/plugins.sbt

This file was deleted.

15 changes: 0 additions & 15 deletions src/sbt-test/kotlin/basic-android/src/main/AndroidManifest.xml

This file was deleted.

14 changes: 0 additions & 14 deletions src/sbt-test/kotlin/basic-android/src/main/kotlin/MainActivity.kt

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
13 changes: 0 additions & 13 deletions src/sbt-test/kotlin/basic-android/src/main/res/layout/main.xml

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions src/sbt-test/kotlin/basic-android/test

This file was deleted.

23 changes: 0 additions & 23 deletions src/sbt-test/kotlin/basic-android/tests.sbt

This file was deleted.

10 changes: 1 addition & 9 deletions src/sbt-test/kotlin/basic-tests/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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)
}
addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
10 changes: 1 addition & 9 deletions src/sbt-test/kotlin/basic/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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)
}
addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
13 changes: 0 additions & 13 deletions src/sbt-test/kotlin/extensions-android/build.sbt

This file was deleted.

1 change: 0 additions & 1 deletion src/sbt-test/kotlin/extensions-android/project.properties

This file was deleted.

1 change: 0 additions & 1 deletion src/sbt-test/kotlin/extensions-android/project/android.sbt

This file was deleted.

11 changes: 0 additions & 11 deletions src/sbt-test/kotlin/extensions-android/project/plugins.sbt

This file was deleted.

This file was deleted.

This file was deleted.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions src/sbt-test/kotlin/extensions-android/test

This file was deleted.

23 changes: 0 additions & 23 deletions src/sbt-test/kotlin/extensions-android/tests.sbt

This file was deleted.

2 changes: 1 addition & 1 deletion src/sbt-test/kotlin/kotlin-1.1-compat/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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"))
2 changes: 1 addition & 1 deletion src/sbt-test/kotlin/kotlin-1.2-compat/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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"))
2 changes: 1 addition & 1 deletion src/sbt-test/kotlin/kotlin-1.3-compat/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -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"))
10 changes: 10 additions & 0 deletions src/sbt-test/kotlin/kotlin-1.5-compat/build.sbt
Original file line number Diff line number Diff line change
@@ -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)
}
1 change: 1 addition & 0 deletions src/sbt-test/kotlin/kotlin-1.5-compat/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin(sys.props("plugin.org") % sys.props("plugin.name") % sys.props("plugin.version"))
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
println("Hello world!")
16 changes: 16 additions & 0 deletions src/sbt-test/kotlin/kotlin-1.5-compat/src/main/kotlin/simple.kt
Original file line number Diff line number Diff line change
@@ -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("")
}
4 changes: 4 additions & 0 deletions src/sbt-test/kotlin/kotlin-1.5-compat/test
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
> compile
> listClasses
$ exists target/scala-2.12/classes/demo/SimpleKt.class
$ exists target/scala-2.12/classes/SimpleScript.class
10 changes: 10 additions & 0 deletions src/sbt-test/kotlin/kotlin-1.6-compat/build.sbt
Original file line number Diff line number Diff line change
@@ -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)
}
Loading