From 80701a26c55b8fa3810a01c656b55371b405dc34 Mon Sep 17 00:00:00 2001 From: Gasper Kojek Date: Thu, 20 Jul 2023 10:29:50 +0200 Subject: [PATCH 1/2] Moved the test temp directory inside the gradle build directory --- .../ksp/RelativizingInternalPathProvider.kt | 18 ---------- .../ksp/RelativizingLocalPathProvider.kt | 15 +++++++++ compiler-plugin/build.gradle.kts | 18 +++++----- gradle-plugin/build.gradle.kts | 33 ++++++++++--------- .../devtools/ksp/gradle/testing/TestConfig.kt | 11 +++++-- integration-tests/build.gradle.kts | 20 ++++++++--- kotlin-analysis-api/build.gradle.kts | 18 +++++----- 7 files changed, 73 insertions(+), 60 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingInternalPathProvider.kt create mode 100644 buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingLocalPathProvider.kt diff --git a/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingInternalPathProvider.kt b/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingInternalPathProvider.kt deleted file mode 100644 index 675a5201af..0000000000 --- a/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingInternalPathProvider.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.google.devtools.ksp - -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.process.CommandLineArgumentProvider -import java.io.File - -class RelativizingInternalPathProvider( - @Input - val argumentName: String, - @Internal - val file: File -): CommandLineArgumentProvider { - override fun asArguments(): Iterable = listOf("-D$argumentName=${file.absolutePath}") -} diff --git a/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingLocalPathProvider.kt b/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingLocalPathProvider.kt new file mode 100644 index 0000000000..2adf55f6a6 --- /dev/null +++ b/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingLocalPathProvider.kt @@ -0,0 +1,15 @@ +package com.google.devtools.ksp + +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.LocalState +import org.gradle.process.CommandLineArgumentProvider +import java.io.File + +class RelativizingLocalPathProvider( + @Input + val argumentName: String, + @LocalState + val file: File +) : CommandLineArgumentProvider { + override fun asArguments(): Iterable = listOf("-D$argumentName=${file.absolutePath}") +} diff --git a/compiler-plugin/build.gradle.kts b/compiler-plugin/build.gradle.kts index bb7299b20c..5099d7209a 100644 --- a/compiler-plugin/build.gradle.kts +++ b/compiler-plugin/build.gradle.kts @@ -1,4 +1,4 @@ -import com.google.devtools.ksp.RelativizingPathProvider +import com.google.devtools.ksp.RelativizingLocalPathProvider import org.jetbrains.kotlin.gradle.tasks.KotlinCompile evaluationDependsOn(":common-util") @@ -110,17 +110,15 @@ tasks.test { events("passed", "skipped", "failed") } - lateinit var tempTestDir: File - doFirst { - val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!! - jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) + val ideaHomeDir = File(buildDir, "tmp/ideaHome") + jvmArgumentProviders.add(RelativizingLocalPathProvider("idea.home.path", ideaHomeDir)) - tempTestDir = createTempDir() - jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", tempTestDir)) - } + val tempTestDir = File(buildDir, "tmp/test") + jvmArgumentProviders.add(RelativizingLocalPathProvider("java.io.tmpdir", tempTestDir)) - doLast { - delete(tempTestDir) + doFirst { + if (!ideaHomeDir.exists()) ideaHomeDir.mkdirs() + tempTestDir.deleteRecursively() } } diff --git a/gradle-plugin/build.gradle.kts b/gradle-plugin/build.gradle.kts index 64e6e5c4f6..dfe2c4caf6 100644 --- a/gradle-plugin/build.gradle.kts +++ b/gradle-plugin/build.gradle.kts @@ -1,3 +1,4 @@ +import com.google.devtools.ksp.RelativizingLocalPathProvider import org.jetbrains.kotlin.gradle.tasks.KotlinCompile description = "Kotlin Symbol Processor" @@ -94,7 +95,8 @@ 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 tempTestDir = File(buildDir, "tmp/test") +val testPropsOutDir: Provider = project.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( @@ -103,19 +105,14 @@ val writeTestPropsTask = tasks.register("prepareTestConfigurati } ) property("kspVersion", version) - property("mavenRepoDir", File(rootProject.buildDir, "repos/test").absolutePath) - property("kspProjectRootDir", rootProject.projectDir.absolutePath) - property("processorClasspath", project.tasks["compileTestKotlin"].outputs.files.asPath) -} - -normalization { - runtimeClasspath { - properties("**/testprops.properties") { - ignoreProperty("kspProjectRootDir") - ignoreProperty("mavenRepoDir") - ignoreProperty("processorClasspath") - } - } + property("mavenRepoDir", File(rootProject.buildDir, "repos/test").toRelativeString(projectDir)) + property("kspProjectRootDir", rootProject.projectDir.toRelativeString(projectDir)) + property( + "processorClasspath", + project.tasks["compileTestKotlin"].outputs.files + .map { it.toRelativeString(projectDir) } + .joinToString(File.pathSeparator) + ) } java { @@ -134,10 +131,16 @@ tasks.named("processTestResources").configure { dependsOn(writeTestPropsTask) } -tasks.named("test").configure { +tasks.test { dependsOn(":api:publishAllPublicationsToTestRepository") dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing:publishAllPublicationsToTestRepository") + + jvmArgumentProviders.add(RelativizingLocalPathProvider("java.io.tmpdir", tempTestDir)) + + doFirst { + tempTestDir.deleteRecursively() + } } abstract class WriteVersionSrcTask @Inject constructor( diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestConfig.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestConfig.kt index 1c048da64d..f912a7a10c 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestConfig.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestConfig.kt @@ -58,7 +58,7 @@ data class TestConfig( kspProjectProperties["agpBaseVersion"] as String } - val mavenRepoPath = mavenRepoDir.path.replace(File.separatorChar, '/') + val mavenRepoPath = mavenRepoDir.absolutePath.replace(File.separatorChar, '/') companion object { /** @@ -71,10 +71,17 @@ data class TestConfig( } return TestConfig( kspProjectDir = File(props.get("kspProjectRootDir") as String), - processorClasspath = props.get("processorClasspath") as String, + processorClasspath = absoluteClasspath(props.get("processorClasspath") as String), mavenRepoDir = File(props.get("mavenRepoDir") as String), kspVersion = props.get("kspVersion") as String ) } + + private fun absoluteClasspath(classpathString: String): String { + return classpathString + .split(File.pathSeparator) + .map { File(it).absolutePath } + .joinToString(File.pathSeparator) + } } } diff --git a/integration-tests/build.gradle.kts b/integration-tests/build.gradle.kts index 78e1ab9eb2..2f71cb9d8d 100644 --- a/integration-tests/build.gradle.kts +++ b/integration-tests/build.gradle.kts @@ -1,4 +1,4 @@ -import com.google.devtools.ksp.RelativizingInternalPathProvider +import com.google.devtools.ksp.RelativizingLocalPathProvider val junitVersion: String by project val kotlinBaseVersion: String by project @@ -19,15 +19,25 @@ dependencies { } tasks.named("test") { - systemProperty("kotlinVersion", kotlinBaseVersion) - systemProperty("kspVersion", version) - systemProperty("agpVersion", agpBaseVersion) - jvmArgumentProviders.add(RelativizingInternalPathProvider("testRepo", File(rootProject.buildDir, "repos/test"))) dependsOn(":api:publishAllPublicationsToTestRepository") dependsOn(":gradle-plugin:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing:publishAllPublicationsToTestRepository") dependsOn(":symbol-processing-cmdline:publishAllPublicationsToTestRepository") + systemProperty("kotlinVersion", kotlinBaseVersion) + systemProperty("kspVersion", version) + systemProperty("agpVersion", agpBaseVersion) + + val testBuildDir = File(buildDir, "tmp/test") + jvmArgumentProviders.add(RelativizingLocalPathProvider("java.io.tmpdir", testBuildDir)) + val testRepo = File(rootProject.buildDir, "repos/test") + jvmArgumentProviders.add(RelativizingLocalPathProvider("testRepo", testRepo)) + + doFirst { + if (!testRepo.exists()) testRepo.mkdirs() + testBuildDir.deleteRecursively() + } + // 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) { diff --git a/kotlin-analysis-api/build.gradle.kts b/kotlin-analysis-api/build.gradle.kts index 541ebaac9a..03f59441f8 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -1,4 +1,4 @@ -import com.google.devtools.ksp.RelativizingPathProvider +import com.google.devtools.ksp.RelativizingLocalPathProvider description = "Kotlin Symbol Processing implementation using Kotlin Analysis API" @@ -116,17 +116,15 @@ tasks.test { events("passed", "skipped", "failed") } - lateinit var tempTestDir: File - doFirst { - val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!! - jvmArgumentProviders.add(RelativizingPathProvider("idea.home.path", ideaHomeDir)) + val ideaHomeDir = File(buildDir, "tmp/ideaHome") + jvmArgumentProviders.add(RelativizingLocalPathProvider("idea.home.path", ideaHomeDir)) - tempTestDir = createTempDir() - jvmArgumentProviders.add(RelativizingPathProvider("java.io.tmpdir", tempTestDir)) - } + val tempTestDir = File(buildDir, "tmp/test") + jvmArgumentProviders.add(RelativizingLocalPathProvider("java.io.tmpdir", tempTestDir)) - doLast { - delete(tempTestDir) + doFirst { + if (!ideaHomeDir.exists()) ideaHomeDir.mkdirs() + tempTestDir.deleteRecursively() } } From 33df5c292bde6587509ade66f9a5afba05fa2dfc Mon Sep 17 00:00:00 2001 From: Gasper Kojek Date: Fri, 21 Jul 2023 10:22:47 +0200 Subject: [PATCH 2/2] Removed (now) unused RelativizingPathProvider --- .../devtools/ksp/RelativizingPathProvider.kt | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingPathProvider.kt diff --git a/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingPathProvider.kt b/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingPathProvider.kt deleted file mode 100644 index 44b5321124..0000000000 --- a/buildSrc/src/main/kotlin/com/google/devtools/ksp/RelativizingPathProvider.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.google.devtools.ksp - -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity -import org.gradle.process.CommandLineArgumentProvider -import java.io.File - -class RelativizingPathProvider( - @Input - val argumentName: String, - @InputDirectory - @PathSensitive(PathSensitivity.RELATIVE) - val file: File -): CommandLineArgumentProvider { - override fun asArguments(): Iterable = listOf("-D$argumentName=${file.absolutePath}") -}