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/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}") -} 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 b5e77a19c3..5e1c30d266 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" @@ -96,7 +97,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( @@ -105,19 +107,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 { @@ -136,10 +133,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 2cb53f0ee9..0336850982 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,16 +19,26 @@ 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") dependsOn(":kotlin-analysis-api: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 0cd009a2f3..a6b7c07b3d 100644 --- a/kotlin-analysis-api/build.gradle.kts +++ b/kotlin-analysis-api/build.gradle.kts @@ -1,5 +1,5 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.google.devtools.ksp.RelativizingPathProvider +import com.google.devtools.ksp.RelativizingLocalPathProvider description = "Kotlin Symbol Processing implementation using Kotlin Analysis API" @@ -126,17 +126,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() } }