diff --git a/.github/workflows/auto-merge.yml b/.github/workflows/auto-merge.yml index d798db3aeb..9dcb01c337 100644 --- a/.github/workflows/auto-merge.yml +++ b/.github/workflows/auto-merge.yml @@ -46,20 +46,10 @@ jobs: echo Picking $TO_PICK if [ -n "$TO_PICK" ]; then git cherry-pick -x $TO_PICK; fi - - name: Setup Java 9 + - name: Setup Java 17 uses: actions/setup-java@v1.4.3 with: - java-version: '9' - java-package: jdk - architecture: x64 - - name: set JDK_9 environment variable for kotlin compiler - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - run: echo ::set-env name=JDK_9::$(echo $JAVA_HOME) - - name: Setup Java 11 - uses: actions/setup-java@v1.4.3 - with: - java-version: '11' + java-version: '17' java-package: jdk architecture: x64 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a50c948704..30ba7c13ff 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -34,21 +34,10 @@ jobs: minimum-size: 8 maximum-size: 16 disk-root: "D:" - - name: Setup Java 9 + - name: Setup Java 17 uses: actions/setup-java@v1.4.3 with: - java-version: '9' - java-package: jdk - architecture: x64 - - name: set JDK_9 environment variable for kotlin compiler - shell: bash - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - run: echo ::set-env name=JDK_9::$(echo $JAVA_HOME) - - name: Setup Java 11 - uses: actions/setup-java@v1.4.3 - with: - java-version: '11' + java-version: '17' java-package: jdk architecture: x64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 39120246d7..feef4a1e20 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,20 +13,10 @@ jobs: runs-on: ubuntu-latest steps: - - name: Setup Java 9 + - name: Setup Java 17 uses: actions/setup-java@v1.4.3 with: - java-version: '9' - java-package: jdk - architecture: x64 - - name: set JDK_9 environment variable for kotlin compiler - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - run: echo ::set-env name=JDK_9::$(echo $JAVA_HOME) - - name: Setup Java 11 - uses: actions/setup-java@v1.4.3 - with: - java-version: '11' + java-version: '17' java-package: jdk architecture: x64 diff --git a/benchmark/build.gradle.kts b/benchmark/build.gradle.kts index c4c104fe33..71a9ec7f4d 100644 --- a/benchmark/build.gradle.kts +++ b/benchmark/build.gradle.kts @@ -31,13 +31,13 @@ dependencies { application { applicationName = "BenchRunner" group = "com.google.devtools.ksp" - mainClassName = "com.google.devtools.ksp.BenchRunner" + mainClass = "com.google.devtools.ksp.BenchRunner" } tasks.withType { - kotlinOptions.jvmTarget = "1.8" + compilerOptions.jvmTarget = "1.8" } tasks.withType { manifest { - attributes(mapOf("Main-Class" to application.mainClassName)) + attributes(mapOf("Main-Class" to application.mainClass.get())) } } diff --git a/build.gradle.kts b/build.gradle.kts index 0b162f118f..f91c394941 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,8 @@ import com.google.devtools.ksp.configureKtlint import com.google.devtools.ksp.configureKtlintApplyToIdea +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion val sonatypeUserName: String? by project val sonatypePassword: String? by project @@ -25,7 +28,7 @@ plugins { // Adding plugins used in multiple places to the classpath for centralized version control id("com.github.johnrengelman.shadow") version "7.1.2" apply false - id("org.jetbrains.dokka") version "1.8.10" apply false + id("org.jetbrains.dokka") version "1.9.20" apply false } nexusPublishing { @@ -64,7 +67,7 @@ subprojects { } maven { name = "test" - url = uri("${rootProject.buildDir}/repos/test") + url = uri("${rootProject.layout.buildDirectory.get().asFile}/repos/test") } } publishExtension.publications.whenObjectAdded { @@ -94,32 +97,24 @@ subprojects { } } - tasks.withType().configureEach { - sourceCompatibility = JavaVersion.VERSION_1_8.toString() - targetCompatibility = JavaVersion.VERSION_1_8.toString() - javaCompiler.set( - javaToolchains.compilerFor { - languageVersion.set(JavaLanguageVersion.of(17)) - } - ) - } + val compileJavaVersion = JavaLanguageVersion.of(17) - tasks.withType().configureEach { - // Java 11 is required to run tests - javaLauncher.set( - javaToolchains.launcherFor { - languageVersion.set(JavaLanguageVersion.of(11)) + pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + configure { + toolchain.languageVersion.set(compileJavaVersion) + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + configure { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + languageVersion.set(KotlinVersion.KOTLIN_1_9) + apiVersion.set(languageVersion) } - ) - } - - tasks.withType().configureEach { - // Java 11 is required to run - javaLauncher.set( - javaToolchains.launcherFor { - languageVersion.set(JavaLanguageVersion.of(17)) + jvmToolchain { + languageVersion = compileJavaVersion } - ) + } } tasks.withType().configureEach { diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2a6aebeb60..41676fcd73 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,12 +1,10 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { - kotlin("jvm") version "1.9.0" + kotlin("jvm") version embeddedKotlinVersion } kotlin { jvmToolchain { - languageVersion.set(JavaLanguageVersion.of(11)) + languageVersion.set(JavaLanguageVersion.of(17)) } } @@ -14,11 +12,3 @@ repositories { mavenCentral() maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/") } - -// As per https://docs.gradle.org/7.2/userguide/validation_problems.html#implementation_unknown -tasks.withType().configureEach { - kotlinOptions { - apiVersion = "1.4" - languageVersion = "1.4" - } -} diff --git a/buildSrc/src/main/kotlin/com/google/devtools/ksp/Ktlint.kt b/buildSrc/src/main/kotlin/com/google/devtools/ksp/Ktlint.kt index 341f19ff40..4cd0d91763 100644 --- a/buildSrc/src/main/kotlin/com/google/devtools/ksp/Ktlint.kt +++ b/buildSrc/src/main/kotlin/com/google/devtools/ksp/Ktlint.kt @@ -84,7 +84,9 @@ private fun JavaExec.configureCommonKtlintParams( it.exclude("**/.*/**") it.exclude("**/resources/**") } - val outputFile = project.buildDir.resolve("reports/ktlint/ktlint-checkstyle-report.xml").toRelativeString(project.projectDir) + val outputFile = project.layout.buildDirectory.file("reports/ktlint/ktlint-checkstyle-report.xml") + .map{ it.asFile.toRelativeString(project.layout.projectDirectory.asFile) } + .get() inputs.files(ktlintInputFiles).withPropertyName("ktlintInputFiles").withPathSensitivity(PathSensitivity.RELATIVE) classpath = project.getKtlintConfiguration() mainClass.set("com.pinterest.ktlint.Main") diff --git a/compiler-plugin/build.gradle.kts b/compiler-plugin/build.gradle.kts index c167edd98e..c228a108b8 100644 --- a/compiler-plugin/build.gradle.kts +++ b/compiler-plugin/build.gradle.kts @@ -1,3 +1,4 @@ +import com.google.devtools.ksp.RelativizingPathProvider import org.jetbrains.kotlin.gradle.tasks.KotlinCompile evaluationDependsOn(":common-util") @@ -10,8 +11,8 @@ val kotlinBaseVersion: String by project val junitVersion: String by project val junit5Version: String by project val junitPlatformVersion: String by project -val libsForTesting by configurations.creating -val libsForTestingCommon by configurations.creating +val libsForTesting: Configuration by configurations.creating +val libsForTestingCommon: Configuration by configurations.creating tasks.withType { compilerOptions.freeCompilerArgs.add("-Xjvm-default=all-compatibility") @@ -81,23 +82,23 @@ val dokkaJavadocJar by tasks.register("dokkaJavadocJar") { archiveClassifier.set("javadoc") } -tasks.register("CopyLibsForTesting") { - from(configurations.get("libsForTesting")) +val copyLibsForTesting by tasks.registering(Copy::class) { + from(configurations["libsForTesting"]) into("dist/kotlinc/lib") val escaped = Regex.escape(kotlinBaseVersion) rename("(.+)-$escaped\\.jar", "$1.jar") } -tasks.register("CopyLibsForTestingCommon") { - from(configurations.get("libsForTestingCommon")) +val copyLibsForTestingCommon by tasks.registering(Copy::class) { + from(configurations["libsForTestingCommon"]) into("dist/common") val escaped = Regex.escape(kotlinBaseVersion) rename("(.+)-$escaped\\.jar", "$1.jar") } tasks.test { - dependsOn("CopyLibsForTesting") - dependsOn("CopyLibsForTestingCommon") + dependsOn(copyLibsForTesting) + dependsOn(copyLibsForTestingCommon) maxHeapSize = "2g" useJUnitPlatform() @@ -110,16 +111,10 @@ tasks.test { events("passed", "skipped", "failed") } - lateinit var tempTestDir: File - doFirst { - val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!! - jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("idea.home.path", ideaHomeDir)) - - tempTestDir = createTempDir() - jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("java.io.tmpdir", tempTestDir)) - } - - doLast { - delete(tempTestDir) - } + val ideaHomeDir = layout.buildDirectory.dir("tmp/ideaHome") + .get() + .asFile + .apply { if (!exists()) mkdirs() } + jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) + jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", temporaryDir)) } diff --git a/gradle-plugin/build.gradle.kts b/gradle-plugin/build.gradle.kts index 2536b64e6f..fcc1181cf9 100644 --- a/gradle-plugin/build.gradle.kts +++ b/gradle-plugin/build.gradle.kts @@ -99,17 +99,13 @@ signing { * Create a properties file with that can be read from the gradle-plugin tests to setup test * projects. */ -val testPropsOutDir = project.layout.buildDirectory.dir("test-config") +val testPropsOutDir = layout.buildDirectory.dir("test-config") val writeTestPropsTask = tasks.register("prepareTestConfiguration") { description = "Generates a properties file with the current environment for gradle integration tests" - this.setOutputFile( - testPropsOutDir.map { - it.file("testprops.properties") - } - ) + destinationFile = testPropsOutDir.map { it.file("testprops.properties") } property("kspVersion", version) - property("mavenRepoDir", File(rootProject.buildDir, "repos/test").absolutePath) - property("kspProjectRootDir", rootProject.projectDir.absolutePath) + property("mavenRepoDir", rootProject.layout.buildDirectory.dir("repos/test").get().asFile.absolutePath) + property("kspProjectRootDir", rootDir.absolutePath) property("processorClasspath", project.tasks["compileTestKotlin"].outputs.files.asPath) } @@ -147,35 +143,37 @@ tasks.named("test").configure { dependsOn(":symbol-processing-aa-embeddable:publishAllPublicationsToTestRepository") } -abstract class WriteVersionSrcTask @Inject constructor( - @get:Input val kspVersion: String, - @get:Input val kotlinVersion: String, - @get:org.gradle.api.tasks.OutputDirectory val outputSrcDir: File -) : DefaultTask() { +abstract class WriteVersionSrcTask : DefaultTask() { + @get:Input + abstract val kspVersion: Property + @get:Input + abstract val kotlinVersion: Property + + @get:OutputDirectory + abstract val outputSrcDir: DirectoryProperty + @TaskAction fun generate() { - File(outputSrcDir, "KSPVersions.kt").writeText( + outputSrcDir.file("KSPVersions.kt").get().asFile.writeText( """ package com.google.devtools.ksp.gradle - val KSP_KOTLIN_BASE_VERSION = "$kotlinVersion" - val KSP_VERSION = "$kspVersion" + val KSP_KOTLIN_BASE_VERSION = "${kotlinVersion.get()}" + val KSP_VERSION = "${kspVersion.get()}" """.trimIndent() ) } } -val kspVersionDir = File(project.buildDir, "generated/ksp-versions") -val writeVersionSrcTask = tasks.register( - "generateKSPVersions", - version.toString(), - kotlinBaseVersion, - kspVersionDir -) +val writeVersionSrcTask = tasks.register("generateKSPVersions") { + kspVersion = version.toString() + kotlinVersion = kotlinBaseVersion + outputSrcDir = layout.buildDirectory.dir("generated/ksp-versions") +} kotlin { sourceSets { main { - kotlin.srcDir(writeVersionSrcTask.map { it.outputSrcDir }) + kotlin.srcDir(writeVersionSrcTask) } } } diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt index 11f977cee8..be5e8c4043 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspAATask.kt @@ -226,7 +226,7 @@ abstract class KspAATask @Inject constructor( } } ) - val logLevel = LogLevel.values().first { + val logLevel = LogLevel.entries.first { project.logger.isEnabled(it) } cfg.logLevel.value(logLevel) @@ -252,17 +252,13 @@ abstract class KspAATask @Inject constructor( // TODO: set proper jdk home cfg.jdkHome.value(File(System.getProperty("java.home"))) - val jvmDefaultMode = project.provider { - compilerOptions.freeCompilerArgs.get().lastOrNull { - it.startsWith("-Xjvm-default=") - }?.substringAfter("=") ?: "disable" - } + val jvmDefaultMode = compilerOptions.freeCompilerArgs + .map { args -> args.filter { it.startsWith("-Xjvm-default=") } } + .map { it.lastOrNull()?.substringAfter("=") ?: "disable" } + cfg.jvmDefaultMode.value(jvmDefaultMode) - val jvmTarget = project.provider { - compilerOptions.jvmTarget.get().target - } - cfg.jvmTarget.value(jvmTarget) + cfg.jvmTarget.value(compilerOptions.jvmTarget.map { it.target }) } cfg.platformType.value(kotlinCompilation.platformType) diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt index 030cb2cafd..96f62d0627 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspExtension.kt @@ -71,6 +71,7 @@ abstract class KspExtension @Inject constructor(project: Project) { // Instruct KSP to pickup sources from compile tasks, instead of source sets. // Note that it depends on behaviors of other Gradle plugins, that may bring surprises and can be hard to debug. // Use your discretion. + @Deprecated("This feature is broken in recent versions of Gradle and is no longer supported in KSP2.") open var allowSourcesFromOtherPlugins: Boolean = false // Treat all warning as errors. diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt index 77952dfd9f..67112c27d3 100644 --- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt +++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt @@ -89,7 +89,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool @JvmStatic fun getKspOutputDir(project: Project, sourceSetName: String, target: String) = - File(project.project.buildDir, "generated/ksp/$target/$sourceSetName") + project.layout.buildDirectory.file("generated/ksp/$target/$sourceSetName").get().asFile @JvmStatic fun getKspClassOutputDir(project: Project, sourceSetName: String, target: String) = @@ -337,6 +337,7 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool resourceOutputDir ) + @Suppress("DEPRECATION") if (kspExtension.allowSourcesFromOtherPlugins) { val kotlinCompileTask = kotlinCompileProvider.get() fun setSource(source: FileCollection) { diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt index 5e5133e012..acb7f411ce 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt @@ -186,7 +186,6 @@ class GradleCompilationTest { testRule.addProvider(Provider::class) testRule.runner() - .withDebug(true) .withArguments("app:assemble") .forwardOutput() .build() @@ -347,7 +346,7 @@ class GradleCompilationTest { } """.trimIndent() ) - val result = testRule.runner().withDebug(true).withArguments(":app:assembleDebug").build() + val result = testRule.runner().withArguments(":app:assembleDebug").build() val pattern1 = Regex.escape("apoption=room.schemaLocation=") val pattern2 = Regex.escape(testRule.appModule.moduleRoot.resolve("schemas-kspDebugKotlin").path) val pattern3 = Regex.escape("commandLine=[") diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt index d0e45a47b3..5744fcf186 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt @@ -181,10 +181,10 @@ class SourceSetConfigurationsTest { val variantData = baseVariant::class.java.getMethod("getVariantData").invoke(baseVariant) as com.android.build.gradle.internal.variant.BaseVariantData variantData.extraGeneratedSourceFoldersOnlyInModel.forEach { - println("SRC:" + it.relativeTo(buildDir).path) + println("SRC:" + it.relativeTo(layout.buildDirectory.get().asFile).path) } variantData.allPreJavacGeneratedBytecode.forEach { - println("BYTE:" + it.relativeTo(buildDir).path) + println("BYTE:" + it.relativeTo(layout.buildDirectory.get().asFile).path) } } } @@ -196,7 +196,7 @@ class SourceSetConfigurationsTest { } """.trimIndent() ) - val result = testRule.runner().withDebug(true).withArguments(":app:printSources").build() + val result = testRule.runner().withArguments(":app:printSources").build() data class SourceFolder( val variantName: String, diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt index 088fa89b36..2407eade0d 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt @@ -125,6 +125,7 @@ class KspIntegrationTestRule( testProject.appModule.buildFileAdditions.add( """ android { + namespace = "com.example.kspandroidtestapp" compileSdkVersion(31) defaultConfig { minSdkVersion(24) @@ -138,9 +139,7 @@ class KspIntegrationTestRule( }.writeText( """ - - + """.trimIndent() ) } diff --git a/gradle.properties b/gradle.properties index 1b1bba0378..d03f0593b6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Duser.country=US -Dkotlin.daemon.jvm.options=-Xmx4096m -Dfile.encoding=UTF-8 kotlinBaseVersion=2.0.20 -agpBaseVersion=7.2.0 +agpBaseVersion=8.0.2 intellijVersion=233.13135.103 junitVersion=4.13.1 junit5Version=5.8.2 @@ -23,5 +23,5 @@ compilerTestEnabled=false kotlin.jvm.target.validation.mode=warning # Build or runtime dependencies of this project -buildKotlinVersion=1.9.23 -buildKspVersion=1.9.23-1.0.20 \ No newline at end of file +buildKotlinVersion=2.0.20 +buildKspVersion=2.0.20-1.0.25 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832f0..a4b76b9530 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 068cdb2dc2..79eb9d003f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb6c2..f5feea6d6b 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +82,12 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +134,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +201,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 53a6b238d4..9b42019c79 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -26,6 +28,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -42,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/integration-tests/build.gradle.kts b/integration-tests/build.gradle.kts index c549826c9e..9160be47b6 100644 --- a/integration-tests/build.gradle.kts +++ b/integration-tests/build.gradle.kts @@ -25,20 +25,16 @@ tasks.withType { systemProperty("kotlinVersion", kotlinBaseVersion) systemProperty("kspVersion", version) systemProperty("agpVersion", agpBaseVersion) - jvmArgumentProviders.add(RelativizingInternalPathProvider("testRepo", File(rootProject.buildDir, "repos/test"))) + jvmArgumentProviders.add( + RelativizingInternalPathProvider( + "testRepo", + rootProject.layout.buildDirectory.dir("repos/test").get().asFile + ) + ) dependsOn(":api:publishAllPublicationsToTestRepository") dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository") dependsOn(":common-deps:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing-cmdline:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing-aa-embeddable:publishAllPublicationsToTestRepository") - - // JDK_9 environment property is required. - // To add a custom location (if not detected automatically) follow https://docs.gradle.org/current/userguide/toolchains.html#sec:custom_loc - if (System.getenv("JDK_9") == null) { - val launcher9 = javaToolchains.launcherFor { - languageVersion.set(JavaLanguageVersion.of(9)) - } - environment["JDK_9"] = launcher9.map { it.metadata.installationPath } - } } diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt new file mode 100644 index 0000000000..fb90b6bdb1 --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/AGP731IT.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2020 Google LLC + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.gradle.testkit.runner.TaskOutcome +import org.junit.Assert +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import java.io.File + +@RunWith(Parameterized::class) +class AGP731IT(useKSP2: Boolean) { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("playground-android-multi", "playground", useKSP2) + + @Test + fun testRunsKSP() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root).withGradleVersion("7.6.3") + + File(project.root, "gradle.properties").appendText("\nagpVersion=7.3.1") + gradleRunner.withArguments(":workload:compileDebugKotlin").build().let { result -> + Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspDebugKotlin")?.outcome) + } + } + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "KSP2={0}") + fun params() = listOf(arrayOf(true), arrayOf(false)) + } +} diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/IncrementalCPIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/IncrementalCPIT.kt index 4044d5f38e..bd9ef41906 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/IncrementalCPIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/IncrementalCPIT.kt @@ -103,7 +103,7 @@ class IncrementalCPIT(val useKSP2: Boolean) { // Value changes func2Dirty.forEach { (src, _) -> File(project.root, src).writeText("package p1\n\nfun MyTopFunc1(): Int = 1") - gradleRunner.withArguments("assemble").withDebug(true).build().let { result -> + gradleRunner.withArguments("assemble").build().let { result -> // Value changes should not result in re-processing. Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspKotlin")?.outcome) val dirties = result.output.lines().filter { it.startsWith("w: [ksp]") }.toSet() @@ -149,7 +149,7 @@ class IncrementalCPIT(val useKSP2: Boolean) { // Value changes prop2Dirty.forEach { (src, _) -> File(project.root, src).writeText("package p1\n\nval MyTopProp1: Int = 1") - gradleRunner.withArguments("assemble").withDebug(true).build().let { result -> + gradleRunner.withArguments("assemble").build().let { result -> // Value changes should not result in re-processing. Assert.assertEquals(TaskOutcome.SUCCESS, result.task(":workload:kspKotlin")?.outcome) val dirties = result.output.lines().filter { it.startsWith("w: [ksp]") }.toSet() @@ -170,7 +170,7 @@ class IncrementalCPIT(val useKSP2: Boolean) { } private fun toggleFlags(vararg extras: String) { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withDebug(true) + val gradleRunner = GradleRunner.create().withProjectDir(project.root) gradleRunner.withArguments( *extras, diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KotlinConstsInJavaIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KotlinConstsInJavaIT.kt index 1b406d6530..16ad8d95d4 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KotlinConstsInJavaIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/KotlinConstsInJavaIT.kt @@ -36,7 +36,7 @@ class KotlinConstsInJavaIT(useKSP2: Boolean) { fun testKotlinConstsInJava() { // FIXME: `clean` fails to delete files on windows. Assume.assumeFalse(System.getProperty("os.name").startsWith("Windows", ignoreCase = true)) - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withDebug(true) + val gradleRunner = GradleRunner.create().withProjectDir(project.root) gradleRunner.buildAndCheck(":workload:kspKotlin") File(project.root, "workload/src/main/java/com/example/JavaClass.java").appendText("\n") diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt index d71f39fe34..26d8cab0f6 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnErrorIT.kt @@ -77,7 +77,7 @@ class OnErrorIT(useKSP2: Boolean) { @Test fun testCreateTwice() { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withDebug(true) + val gradleRunner = GradleRunner.create().withProjectDir(project.root) File(project.root, "workload/build.gradle.kts").appendText("\nksp { arg(\"exception\", \"createTwice\") }\n") gradleRunner.withArguments("clean", "assemble").buildAndFail().let { result -> @@ -96,7 +96,7 @@ class OnErrorIT(useKSP2: Boolean) { @Test fun testCreateTwiceNotOkOnError() { - val gradleRunner = GradleRunner.create().withProjectDir(project.root).withDebug(true) + val gradleRunner = GradleRunner.create().withProjectDir(project.root) File(project.root, "workload/build.gradle.kts").appendText("\nksp { arg(\"exception\", \"createTwice\") }\n") File(project.root, "gradle.properties").appendText("\nksp.return.ok.on.error=false") diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt index 4514d17d2d..511294e91a 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/PlaygroundIT.kt @@ -106,29 +106,6 @@ class PlaygroundIT(val useKSP2: Boolean) { project.restore("workload/build.gradle.kts") } - @Test - fun testAllowSourcesFromOtherPlugins() { - Assume.assumeFalse(useKSP2) - fun checkGBuilder() { - val artifact = File(project.root, "workload/build/libs/workload-1.0-SNAPSHOT.jar") - - JarFile(artifact).use { jarFile -> - Assert.assertTrue(jarFile.getEntry("g/GBuilder.class").size > 0) - } - } - - val gradleRunner = GradleRunner.create().withProjectDir(project.root) - - File(project.root, "workload/build.gradle.kts") - .appendText("\nksp {\n allowSourcesFromOtherPlugins = true\n}\n") - gradleRunner.buildAndCheck("clean", "build") { checkGBuilder() } - gradleRunner.buildAndCheckOutcome("build", "--info", outcome = TaskOutcome.UP_TO_DATE) { - Assert.assertEquals(TaskOutcome.UP_TO_DATE, it.task(":workload:kspKotlin")?.outcome) - checkGBuilder() - } - project.restore("workload/build.gradle.kts") - } - /** Regression test for https://github.com/google/ksp/issues/518. */ @Test fun testBuildWithConfigureOnDemand() { @@ -268,18 +245,23 @@ class PlaygroundIT(val useKSP2: Boolean) { @Test fun testVersions() { - val kotlinCompile = "org.jetbrains.kotlin.gradle.tasks.KotlinCompile" val buildFile = File(project.root, "workload/build.gradle.kts") - buildFile.appendText("\ntasks.withType<$kotlinCompile> {") - buildFile.appendText("\n kotlinOptions.apiVersion = \"1.5\"") - buildFile.appendText("\n kotlinOptions.languageVersion = \"1.5\"") - buildFile.appendText("\n}") + buildFile.appendText( + """ + kotlin { + compilerOptions { + apiVersion.set(org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_1_6) + languageVersion.set(compilerOptions.apiVersion) + } + } + """.trimIndent() + ) val kotlinVersion = System.getProperty("kotlinVersion").split('-').first() val gradleRunner = GradleRunner.create().withProjectDir(project.root) gradleRunner.buildAndCheck("clean", "build") { result -> - Assert.assertTrue(result.output.contains("language version: 1.5")) - Assert.assertTrue(result.output.contains("api version: 1.5")) + Assert.assertTrue(result.output.contains("language version: 1.6")) + Assert.assertTrue(result.output.contains("api version: 1.6")) if (!useKSP2) { // In case KSP 1 and KSP 2 uses different compiler versions, ignore this test for KSP 2 for now. Assert.assertTrue(result.output.contains("compiler version: $kotlinVersion")) @@ -322,7 +304,7 @@ class PlaygroundIT(val useKSP2: Boolean) { val kotlinCompile = "org.jetbrains.kotlin.gradle.tasks.KotlinCompile" val buildFile = File(project.root, "workload/build.gradle.kts") buildFile.appendText("\ntasks.withType<$kotlinCompile> {") - buildFile.appendText("\n kotlinOptions.freeCompilerArgs += \"-Xjvm-default=all\"") + buildFile.appendText("\n compilerOptions.freeCompilerArgs.add(\"-Xjvm-default=all\")") buildFile.appendText("\n}") val gradleRunner = GradleRunner.create().withProjectDir(project.root) diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt index 4c25f40c9e..c2bea5d517 100644 --- a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/TemporaryTestProject.kt @@ -27,7 +27,7 @@ class TemporaryTestProject( appendProperty("kspVersion=$kspVersion") appendProperty("agpVersion=$agpVersion") appendProperty("testRepo=$testRepo") - appendProperty("org.gradle.unsafe.configuration-cache=true") + appendProperty("org.gradle.configuration-cache=true") appendProperty("kotlin.jvm.target.validation.mode=warning") appendProperty("ksp.incremental.log=true") appendProperty("android.useAndroidX=true") diff --git a/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts b/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts index 63d60babed..51b0630bd5 100644 --- a/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts +++ b/integration-tests/src/test/resources/android-view-binding/app/build.gradle.kts @@ -10,6 +10,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.6.1") } android { + namespace = "com.example.kspandroidtestapp" defaultConfig { minSdkVersion(24) } diff --git a/integration-tests/src/test/resources/android-view-binding/app/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/android-view-binding/app/src/main/AndroidManifest.xml index 831aa9affb..568741e54f 100644 --- a/integration-tests/src/test/resources/android-view-binding/app/src/main/AndroidManifest.xml +++ b/integration-tests/src/test/resources/android-view-binding/app/src/main/AndroidManifest.xml @@ -1,4 +1,2 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/integration-tests/src/test/resources/incremental-multi-chain/workload/build.gradle.kts b/integration-tests/src/test/resources/incremental-multi-chain/workload/build.gradle.kts index 2f6a0fc5e0..e48bb0b0b9 100644 --- a/integration-tests/src/test/resources/incremental-multi-chain/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/incremental-multi-chain/workload/build.gradle.kts @@ -20,5 +20,5 @@ dependencies { } application { - mainClassName = "MainKt" + mainClass = "MainKt" } diff --git a/integration-tests/src/test/resources/incremental-removal/workload/build.gradle.kts b/integration-tests/src/test/resources/incremental-removal/workload/build.gradle.kts index caa2c8c2e0..d217a14a1f 100644 --- a/integration-tests/src/test/resources/incremental-removal/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/incremental-removal/workload/build.gradle.kts @@ -23,5 +23,5 @@ dependencies { } application { - mainClassName = "p1.MainKt" + mainClass = "p1.MainKt" } diff --git a/integration-tests/src/test/resources/incremental-removal2/workload/build.gradle.kts b/integration-tests/src/test/resources/incremental-removal2/workload/build.gradle.kts index caa2c8c2e0..d217a14a1f 100644 --- a/integration-tests/src/test/resources/incremental-removal2/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/incremental-removal2/workload/build.gradle.kts @@ -23,5 +23,5 @@ dependencies { } application { - mainClassName = "p1.MainKt" + mainClass = "p1.MainKt" } diff --git a/integration-tests/src/test/resources/on-error/workload/build.gradle.kts b/integration-tests/src/test/resources/on-error/workload/build.gradle.kts index 015259a890..d7f638f8af 100644 --- a/integration-tests/src/test/resources/on-error/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/on-error/workload/build.gradle.kts @@ -19,5 +19,5 @@ dependencies { } tasks.withType().configureEach { - kotlinOptions.freeCompilerArgs += "-opt-in=MyOptIn" + compilerOptions.freeCompilerArgs.add("-opt-in=MyOptIn") } diff --git a/integration-tests/src/test/resources/playground-android-multi/application/build.gradle.kts b/integration-tests/src/test/resources/playground-android-multi/application/build.gradle.kts index dfde8c6c5d..0616367a80 100644 --- a/integration-tests/src/test/resources/playground-android-multi/application/build.gradle.kts +++ b/integration-tests/src/test/resources/playground-android-multi/application/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { } android { + namespace = "com.example.myapplication" compileSdkVersion(34) defaultConfig { applicationId = "org.gradle.kotlin.dsl.samples.androidstudio" diff --git a/integration-tests/src/test/resources/playground-android-multi/application/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/playground-android-multi/application/src/main/AndroidManifest.xml index 81a4ba30d7..568741e54f 100644 --- a/integration-tests/src/test/resources/playground-android-multi/application/src/main/AndroidManifest.xml +++ b/integration-tests/src/test/resources/playground-android-multi/application/src/main/AndroidManifest.xml @@ -1,4 +1,2 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts b/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts index e6c0980213..c57146de1a 100644 --- a/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/playground-android-multi/workload/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { } android { + namespace = "com.example.mylibrary" compileSdkVersion(34) defaultConfig { minSdkVersion(34) diff --git a/integration-tests/src/test/resources/playground-android-multi/workload/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/playground-android-multi/workload/src/main/AndroidManifest.xml deleted file mode 100644 index 522bce61b2..0000000000 --- a/integration-tests/src/test/resources/playground-android-multi/workload/src/main/AndroidManifest.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - \ No newline at end of file diff --git a/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts b/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts index 1a44d31299..076e0f5816 100644 --- a/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/playground-android/workload/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { } android { + namespace = "com.example.myapplication" compileSdkVersion(34) defaultConfig { applicationId = "org.gradle.kotlin.dsl.samples.androidstudio" diff --git a/integration-tests/src/test/resources/playground-android/workload/src/main/AndroidManifest.xml b/integration-tests/src/test/resources/playground-android/workload/src/main/AndroidManifest.xml index 81a4ba30d7..568741e54f 100644 --- a/integration-tests/src/test/resources/playground-android/workload/src/main/AndroidManifest.xml +++ b/integration-tests/src/test/resources/playground-android/workload/src/main/AndroidManifest.xml @@ -1,4 +1,2 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/integration-tests/src/test/resources/playground/workload/build.gradle.kts b/integration-tests/src/test/resources/playground/workload/build.gradle.kts index 6cb48fad09..baa316f8a2 100644 --- a/integration-tests/src/test/resources/playground/workload/build.gradle.kts +++ b/integration-tests/src/test/resources/playground/workload/build.gradle.kts @@ -29,7 +29,7 @@ ksp { val compileKotlin: AbstractKotlinCompileTool<*> by tasks tasks.register("copyG") { from("G.kt") - into(File(buildDir, "generatedSources").apply { mkdirs() }) + into(layout.buildDirectory.file("generatedSources")) }.let { // Magic. `map` creates a provider to propagate task dependency. compileKotlin.setSource(it.map { it.destinationDir }) diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index 6cfb9941ba..e3508e11a8 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -1,4 +1,5 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import com.google.devtools.ksp.RelativizingPathProvider import java.io.ByteArrayOutputStream description = "Kotlin Symbol Processing implementation using Kotlin Analysis API" @@ -11,8 +12,8 @@ val kotlinBaseVersion: String by project val junitVersion: String by project val junit5Version: String by project val junitPlatformVersion: String by project -val libsForTesting by configurations.creating -val libsForTestingCommon by configurations.creating +val libsForTesting: Configuration by configurations.creating +val libsForTestingCommon: Configuration by configurations.creating val aaKotlinBaseVersion: String by project val aaIntellijVersion: String by project @@ -31,9 +32,9 @@ plugins { signing } -val depSourceJars by configurations.creating -val depJarsForCheck by configurations.creating -val compilerJar by configurations.creating +val depSourceJars: Configuration by configurations.creating +val depJarsForCheck: Configuration by configurations.creating +val compilerJar: Configuration by configurations.creating dependencies { listOf( @@ -132,11 +133,11 @@ sourceSets.main { java.srcDirs("src/main/kotlin") } -fun Project.javaPluginConvention(): JavaPluginConvention = the() -val JavaPluginConvention.testSourceSet: SourceSet +fun Project.javaPluginExtension(): JavaPluginExtension = the() +val JavaPluginExtension.testSourceSet: SourceSet get() = sourceSets.getByName("test") val Project.testSourceSet: SourceSet - get() = javaPluginConvention().testSourceSet + get() = javaPluginExtension().testSourceSet repositories { flatDir { @@ -150,7 +151,7 @@ tasks.withType { archiveClassifier.set("real") } -tasks.withType() { +tasks.withType().configureEach { dependencies { exclude(project(":api")) } @@ -253,23 +254,23 @@ kotlin { } } -tasks.register("CopyLibsForTesting") { - from(configurations.get("libsForTesting")) +val copyLibsForTesting by tasks.registering(Copy::class) { + from(configurations["libsForTesting"]) into("dist/kotlinc/lib") val escaped = Regex.escape(aaKotlinBaseVersion) rename("(.+)-$escaped\\.jar", "$1.jar") } -tasks.register("CopyLibsForTestingCommon") { - from(configurations.get("libsForTestingCommon")) +val copyLibsForTestingCommon by tasks.registering(Copy::class) { + from(configurations["libsForTestingCommon"]) into("dist/common") val escaped = Regex.escape(aaKotlinBaseVersion) rename("(.+)-$escaped\\.jar", "$1.jar") } tasks.test { - dependsOn("CopyLibsForTesting") - dependsOn("CopyLibsForTestingCommon") + dependsOn(copyLibsForTesting) + dependsOn(copyLibsForTestingCommon) maxHeapSize = "2g" useJUnitPlatform() @@ -282,16 +283,10 @@ tasks.test { events("passed", "skipped", "failed") } - lateinit var tempTestDir: File - doFirst { - val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!! - jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("idea.home.path", ideaHomeDir)) - - tempTestDir = createTempDir() - jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("java.io.tmpdir", tempTestDir)) - } - - doLast { - delete(tempTestDir) - } + val ideaHomeDir = layout.buildDirectory.dir("tmp/ideaHome") + .get() + .asFile + .apply { if (!exists()) mkdirs() } + jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) + jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", temporaryDir)) } diff --git a/kotlin-analysis-api/testData/javaModifiers.kt b/kotlin-analysis-api/testData/javaModifiers.kt index de0cd0b0bb..6bfa88672c 100644 --- a/kotlin-analysis-api/testData/javaModifiers.kt +++ b/kotlin-analysis-api/testData/javaModifiers.kt @@ -22,7 +22,6 @@ // C.InnerC: PUBLIC : PUBLIC // C.NestedC.: FINAL PUBLIC : FINAL PUBLIC // C.NestedC: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC -// C.foo: ABSTRACT JAVA_STRICT : ABSTRACT JAVA_STRICT // C.i1: JAVA_STATIC JAVA_VOLATILE PROTECTED : JAVA_STATIC JAVA_VOLATILE PROTECTED // C.intFun: JAVA_DEFAULT JAVA_SYNCHRONIZED : JAVA_DEFAULT JAVA_SYNCHRONIZED // C.s1: FINAL JAVA_TRANSIENT : FINAL JAVA_TRANSIENT @@ -41,7 +40,6 @@ // DependencyOuterJavaClass.staticProtectedMethod: FINAL JAVA_STATIC PROTECTED : FINAL JAVA_STATIC PROTECTED // DependencyOuterJavaClass.staticPublicField: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC // DependencyOuterJavaClass.staticPublicMethod: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC -// DependencyOuterJavaClass.strictfpFun: OPEN : JAVA_STRICT // DependencyOuterJavaClass.synchronizedFun: OPEN : JAVA_SYNCHRONIZED // DependencyOuterJavaClass.transientField: OPEN : JAVA_TRANSIENT // DependencyOuterJavaClass.volatileField: OPEN : JAVA_VOLATILE @@ -61,7 +59,6 @@ // DependencyOuterKotlinClass.DependencyInnerKotlinClass: FINAL INNER PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.DependencyNestedKotlinClass.: FINAL PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.DependencyNestedKotlinClass: OPEN PUBLIC : PUBLIC -// DependencyOuterKotlinClass.strictfpFun: FINAL PUBLIC : FINAL JAVA_STRICT PUBLIC // DependencyOuterKotlinClass.synchronizedFun: FINAL PUBLIC : FINAL JAVA_SYNCHRONIZED PUBLIC // DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC // DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC @@ -95,7 +92,6 @@ // OuterKotlinClass.InnerKotlinClass: INNER : FINAL PUBLIC // OuterKotlinClass.NestedKotlinClass.: FINAL PUBLIC : FINAL PUBLIC // OuterKotlinClass.NestedKotlinClass: OPEN : PUBLIC -// OuterKotlinClass.strictfpFun: : FINAL JAVA_STRICT PUBLIC // OuterKotlinClass.synchronizedFun: : FINAL JAVA_SYNCHRONIZED PUBLIC // OuterKotlinClass.transientProperty: : FINAL JAVA_TRANSIENT PUBLIC // OuterKotlinClass.volatileProperty: : FINAL JAVA_VOLATILE PUBLIC @@ -121,7 +117,6 @@ public class DependencyOuterJavaClass { transient String transientField = ""; volatile String volatileField = ""; synchronized String synchronizedFun() { return ""; } - strictfp String strictfpFun() { return ""; } } // FILE: DependencyOuterKotlinClass.kt typealias DependencyCustomJvmStatic=JvmStatic @@ -149,9 +144,6 @@ open class DependencyOuterKotlinClass { @Volatile var volatileProperty: String = "" - @Strictfp - fun strictfpFun(): String = "" - @Synchronized fun synchronizedFun(): String = "" } @@ -194,8 +186,6 @@ public abstract class C { return 1; } - abstract strictfp void foo() {} - public static class NestedC { } @@ -244,9 +234,6 @@ open class OuterKotlinClass { @Volatile var volatileProperty: String = "" - @Strictfp - fun strictfpFun(): String = "" - @Synchronized fun synchronizedFun(): String = "" } diff --git a/symbol-processing-aa-embeddable/build.gradle.kts b/symbol-processing-aa-embeddable/build.gradle.kts index cf9fa4578a..b2189696c0 100644 --- a/symbol-processing-aa-embeddable/build.gradle.kts +++ b/symbol-processing-aa-embeddable/build.gradle.kts @@ -169,7 +169,7 @@ fun String.replaceWithKsp() = .replace("import $f", "import $t") } -val DEP_SOURCES_DIR = "$buildDir/source-jar" +val depSourceDir: Provider = layout.buildDirectory.dir("source-jar") val validPaths = prefixesToRelocate.map { it.second.split('.').filter { it.isNotEmpty() }.joinToString("/") @@ -215,14 +215,13 @@ tasks { from(zipTree(it)) } from(project(":common-util").sourceSets.main.get().allSource) - into("$DEP_SOURCES_DIR/ksp") + into(depSourceDir.map { it.dir("ksp") }) } val sourcesJar by creating(Jar::class) { - dependsOn(copyDeps) duplicatesStrategy = DuplicatesStrategy.EXCLUDE archiveClassifier.set("sources") from(project(":kotlin-analysis-api").sourceSets.main.get().allSource) - from(DEP_SOURCES_DIR) + from(copyDeps) filter { it.replaceWithKsp() } } @@ -275,29 +274,32 @@ signing { sign(extensions.getByType().publications) } -abstract class WriteVersionSrcTask @Inject constructor( - @get:Input val kotlinVersion: String, - @get:OutputDirectory val outputResDir: File -) : DefaultTask() { +abstract class WriteVersionSrcTask : DefaultTask() { + @get:Input + abstract val kotlinVersion: Property + + @get:OutputDirectory + abstract val outputResDir: DirectoryProperty + @TaskAction fun generate() { - val metaInfDir = File(outputResDir, "META-INF") + val metaInfDir = outputResDir.get().asFile.resolve("META-INF") metaInfDir.mkdirs() - File(metaInfDir, "ksp.compiler.version").writeText(kotlinVersion) + File(metaInfDir, "ksp.compiler.version").writeText(kotlinVersion.get()) } } -val kspVersionDir = File(project.buildDir, "generated/ksp-versions/META-INF") val writeVersionSrcTask = tasks.register( - "generateKSPVersions", - aaKotlinBaseVersion, - kspVersionDir -) + "generateKSPVersions" +) { + kotlinVersion = aaKotlinBaseVersion + outputResDir = layout.buildDirectory.dir("generated/ksp-versions/META-INF") +} kotlin { sourceSets { main { - resources.srcDir(writeVersionSrcTask.map { it.outputResDir }) + resources.srcDir(writeVersionSrcTask) } } } diff --git a/test-utils/testData/api/javaModifiers.kt b/test-utils/testData/api/javaModifiers.kt index cd458f23dc..9afb4aa90a 100644 --- a/test-utils/testData/api/javaModifiers.kt +++ b/test-utils/testData/api/javaModifiers.kt @@ -22,7 +22,6 @@ // C.InnerC: PUBLIC : PUBLIC // C.NestedC.: FINAL PUBLIC : FINAL PUBLIC // C.NestedC: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC -// C.foo: ABSTRACT JAVA_STRICT : ABSTRACT JAVA_STRICT // C.i1: JAVA_STATIC JAVA_VOLATILE PROTECTED : JAVA_STATIC JAVA_VOLATILE PROTECTED // C.intFun: JAVA_DEFAULT JAVA_SYNCHRONIZED : JAVA_DEFAULT JAVA_SYNCHRONIZED // C.s1: FINAL JAVA_TRANSIENT : FINAL JAVA_TRANSIENT @@ -41,7 +40,6 @@ // DependencyOuterJavaClass.staticProtectedMethod: JAVA_STATIC PROTECTED : JAVA_STATIC PROTECTED // DependencyOuterJavaClass.staticPublicField: FINAL JAVA_STATIC PUBLIC : FINAL JAVA_STATIC PUBLIC // DependencyOuterJavaClass.staticPublicMethod: JAVA_STATIC PUBLIC : JAVA_STATIC PUBLIC -// DependencyOuterJavaClass.strictfpFun: JAVA_STRICT OPEN : JAVA_STRICT // DependencyOuterJavaClass.synchronizedFun: JAVA_SYNCHRONIZED OPEN : JAVA_SYNCHRONIZED // DependencyOuterJavaClass.transientField: FINAL JAVA_TRANSIENT : FINAL JAVA_TRANSIENT // DependencyOuterJavaClass.volatileField: FINAL JAVA_VOLATILE : FINAL JAVA_VOLATILE @@ -61,7 +59,6 @@ // DependencyOuterKotlinClass.DependencyInnerKotlinClass: FINAL INNER PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.DependencyNestedKotlinClass.: FINAL PUBLIC : FINAL PUBLIC // DependencyOuterKotlinClass.DependencyNestedKotlinClass: OPEN PUBLIC : PUBLIC -// DependencyOuterKotlinClass.strictfpFun: FINAL PUBLIC : FINAL JAVA_STRICT PUBLIC // DependencyOuterKotlinClass.synchronizedFun: FINAL PUBLIC : FINAL JAVA_SYNCHRONIZED PUBLIC // DependencyOuterKotlinClass.transientProperty: FINAL PUBLIC : FINAL JAVA_TRANSIENT PUBLIC // DependencyOuterKotlinClass.volatileProperty: FINAL PUBLIC : FINAL JAVA_VOLATILE PUBLIC @@ -95,7 +92,6 @@ // OuterKotlinClass.InnerKotlinClass: INNER : FINAL PUBLIC // OuterKotlinClass.NestedKotlinClass.: FINAL PUBLIC : FINAL PUBLIC // OuterKotlinClass.NestedKotlinClass: OPEN : PUBLIC -// OuterKotlinClass.strictfpFun: : FINAL JAVA_STRICT PUBLIC // OuterKotlinClass.synchronizedFun: : FINAL JAVA_SYNCHRONIZED PUBLIC // OuterKotlinClass.transientProperty: : FINAL JAVA_TRANSIENT PUBLIC // OuterKotlinClass.volatileProperty: : FINAL JAVA_VOLATILE PUBLIC @@ -121,7 +117,6 @@ public class DependencyOuterJavaClass { transient String transientField = ""; volatile String volatileField = ""; synchronized String synchronizedFun() { return ""; } - strictfp String strictfpFun() { return ""; } } // FILE: DependencyOuterKotlinClass.kt typealias DependencyCustomJvmStatic=JvmStatic @@ -149,9 +144,6 @@ open class DependencyOuterKotlinClass { @Volatile var volatileProperty: String = "" - @Strictfp - fun strictfpFun(): String = "" - @Synchronized fun synchronizedFun(): String = "" } @@ -194,8 +186,6 @@ public abstract class C { return 1; } - abstract strictfp void foo() {} - public static class NestedC { } @@ -244,9 +234,6 @@ open class OuterKotlinClass { @Volatile var volatileProperty: String = "" - @Strictfp - fun strictfpFun(): String = "" - @Synchronized fun synchronizedFun(): String = "" }