mirror of
https://github.com/apple/pkl.git
synced 2026-01-11 22:30:54 +01:00
Update Kotlin to 2.0 (#900)
- update Kotlin from 1.7.10 to 2.0.21
- Kotlin 1.6 dependencies in Gradle lock files are expected because kotlinc,
which is also used by some tests, internally uses some 1.6 dependencies
for backwards compatibility reasons.
- update kotlinx-html and kotlinx-serialization
- adapt Kotlin code where necessary
- use Kotlin stdlib Path APIs where possible
- fix IntelliJ Kotlin inspection warnings
- reformat code with `./gradlew spotlessApply`
- ktfmt adds lots of trailing commas
- Add workaround to fix IntelliJ "unresolved reference" errors
This commit is contained in:
@@ -4,24 +4,30 @@
|
||||
com.github.ajalt.clikt:clikt-jvm:3.5.4=compileClasspath
|
||||
com.github.ajalt.clikt:clikt:3.5.4=compileClasspath,compileOnlyDependenciesMetadata
|
||||
net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
net.java.dev.jna:jna:5.6.0=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeOnlyDependenciesMetadata
|
||||
org.assertj:assertj-core:3.27.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.7.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.7.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.7.10=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.7.10=kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.7.10=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.7.10=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.7.10=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.7.10=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10=kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10=compileClasspath,compileOnlyDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10=compileClasspath,compileOnlyDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10=compileClasspath,compileOnlyDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.7.10=compileClasspath,compileOnlyDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains:annotations:13.0=compileClasspath,compileOnlyDependenciesMetadata,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:2.0.21=compileClasspath,compileOnlyDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=compileClasspath,compileOnlyDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=compileClasspath,compileOnlyDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:2.0.21=compileClasspath,compileOnlyDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
|
||||
org.junit.jupiter:junit-jupiter-api:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||
org.junit.jupiter:junit-jupiter-engine:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata
|
||||
org.junit.jupiter:junit-jupiter-params:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -53,7 +53,13 @@ sourceSets {
|
||||
test {
|
||||
// Remove Gradle distribution JARs from test compile classpath.
|
||||
// This prevents a conflict between Gradle's and Pkl's Kotlin versions.
|
||||
compileClasspath = compileClasspath.filter { !(it.path.contains("dists")) }
|
||||
//
|
||||
// For some reason, IntelliJ import turns pklCommonsTest into a runtime dependency
|
||||
// if `compileClasspath` is filtered, causing "unresolved reference" errors in IntelliJ.
|
||||
// As a workaround, don't perform filtering for IntelliJ (import).
|
||||
if (System.getProperty("idea.sync.active") == null) {
|
||||
compileClasspath = compileClasspath.filter { !(it.path.contains("dists")) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,4 +105,6 @@ signing {
|
||||
// (Apparently, gradle-api.jar now contains metadata that causes kotlinc to enforce Gradle's Kotlin
|
||||
// version.)
|
||||
// A more robust solution would be to port plugin tests to Java.
|
||||
tasks.compileTestKotlin { kotlinOptions { freeCompilerArgs += "-Xskip-metadata-version-check" } }
|
||||
tasks.compileTestKotlin {
|
||||
compilerOptions { freeCompilerArgs.add("-Xskip-metadata-version-check") }
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,14 +17,14 @@ package org.pkl.gradle
|
||||
|
||||
import java.net.URI
|
||||
import java.nio.file.Path
|
||||
import kotlin.io.path.createParentDirectories
|
||||
import kotlin.io.path.writeText
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.gradle.testkit.runner.BuildResult
|
||||
import org.gradle.testkit.runner.GradleRunner
|
||||
import org.gradle.testkit.runner.UnexpectedBuildFailure
|
||||
import org.junit.jupiter.api.io.TempDir
|
||||
import org.pkl.commons.createParentDirectories
|
||||
import org.pkl.commons.readString
|
||||
import org.pkl.commons.writeString
|
||||
|
||||
abstract class AbstractTest {
|
||||
private val gradleVersion: String? = System.getProperty("testGradleVersion")
|
||||
@@ -57,10 +57,10 @@ abstract class AbstractTest {
|
||||
}
|
||||
|
||||
protected fun writeFile(fileName: String, contents: String): Path {
|
||||
return testProjectDir
|
||||
.resolve(fileName)
|
||||
.apply { createParentDirectories() }
|
||||
.writeString(contents.trimIndent())
|
||||
return testProjectDir.resolve(fileName).apply {
|
||||
createParentDirectories()
|
||||
writeText(contents.trimIndent())
|
||||
}
|
||||
}
|
||||
|
||||
protected fun checkFileContents(file: Path, contents: String) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -31,7 +31,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
val baseDir = testProjectDir.resolve("build/generated/java/foo/bar")
|
||||
val moduleFile = baseDir.resolve("Mod.java")
|
||||
|
||||
assertThat(baseDir.listDirectoryEntries().count()).isEqualTo(1)
|
||||
assertThat(baseDir.listDirectoryEntries().size).isEqualTo(1)
|
||||
assertThat(moduleFile).exists()
|
||||
|
||||
val text = moduleFile.readText()
|
||||
@@ -44,7 +44,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
"""
|
||||
|public final class Mod {
|
||||
| public final @Nonnull Object other;
|
||||
"""
|
||||
""",
|
||||
)
|
||||
|
||||
checkTextContains(
|
||||
@@ -54,7 +54,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
| public final @Nonnull String name;
|
||||
|
|
||||
| public final @Nonnull List<Address> addresses;
|
||||
"""
|
||||
""",
|
||||
)
|
||||
|
||||
checkTextContains(
|
||||
@@ -64,7 +64,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
| public final @Nonnull String street;
|
||||
|
|
||||
| public final long zip;
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
""",
|
||||
)
|
||||
|
||||
val result = runTask("evalTest", true)
|
||||
@@ -139,7 +139,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ class JavaCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
|
||||
other = 42
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -31,7 +31,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
val baseDir = testProjectDir.resolve("build/generated/kotlin/foo/bar")
|
||||
val kotlinFile = baseDir.resolve("Mod.kt")
|
||||
|
||||
assertThat(baseDir.listDirectoryEntries().count()).isEqualTo(1)
|
||||
assertThat(baseDir.listDirectoryEntries().size).isEqualTo(1)
|
||||
assertThat(kotlinFile).exists()
|
||||
|
||||
val text = kotlinFile.readText()
|
||||
@@ -39,11 +39,14 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
// shading must not affect generated code
|
||||
assertThat(text).doesNotContain("org.pkl.thirdparty")
|
||||
|
||||
checkTextContains(text, """
|
||||
checkTextContains(
|
||||
text,
|
||||
"""
|
||||
|data class Mod(
|
||||
| val other: Any?
|
||||
|)
|
||||
""")
|
||||
""",
|
||||
)
|
||||
|
||||
checkTextContains(
|
||||
text,
|
||||
@@ -52,7 +55,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
| val name: String,
|
||||
| val addresses: List<Address>
|
||||
| )
|
||||
"""
|
||||
""",
|
||||
)
|
||||
|
||||
checkTextContains(
|
||||
@@ -62,7 +65,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
| open val street: String,
|
||||
| open val zip: Long
|
||||
| )
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -97,7 +100,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
""",
|
||||
)
|
||||
|
||||
val result = runTask("evalTest", true)
|
||||
@@ -148,7 +151,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
}
|
||||
}
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -170,7 +173,7 @@ class KotlinCodeGeneratorsTest : AbstractTest() {
|
||||
}
|
||||
|
||||
other = 42
|
||||
"""
|
||||
""",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user