diff options
author | Nelson Osacky <nosacky@gradle.com> | 2022-03-06 21:22:52 +0100 |
---|---|---|
committer | laszio <ting-yuan@users.noreply.github.com> | 2022-04-05 13:01:13 -0700 |
commit | 0c82e893706f0810059500287064cc80f02b8bc2 (patch) | |
tree | 380971b6e7911426ab3b54f0590e8442dc9f5300 /gradle-plugin | |
parent | a942d3ee92a9779336417beacd840929e7309289 (diff) | |
download | ksp-0c82e893706f0810059500287064cc80f02b8bc2.tar.gz |
Validate command line arguments
Diffstat (limited to 'gradle-plugin')
-rw-r--r-- | gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt | 6 | ||||
-rw-r--r-- | gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt | 26 |
2 files changed, 31 insertions, 1 deletions
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 b428c4fb..b2bd730b 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 @@ -144,7 +144,11 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool options += SubpluginOption("apoption", "${it.key}=${it.value}") } kspExtension.commandLineArgumentProviders.forEach { - options += SubpluginOption("apoption", it.asArguments().joinToString("")) + val argument = it.asArguments().joinToString("") + if (!argument.matches(Regex("/S=/S"))) { + throw IllegalArgumentException("KSP apoption does not match /S=/S: $argument") + } + options += SubpluginOption("apoption", argument) } return options } 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 d90062cb..d2ce0bb9 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 @@ -202,4 +202,30 @@ class GradleCompilationTest { assertThat(schemasFolder.exists()).isTrue() assertThat(schemasFolder.resolve("Database/1.json").exists()).isTrue() } + + @Test + fun invalidArguments() { + testRule.setupAppAsJvmApp() + testRule.appModule.addSource("Foo.kt", "class Foo") + testRule.appModule.buildFileAdditions.add(""" + ksp { + arg(Provider()) + } + class Provider() : CommandLineArgumentProvider { + override fun asArguments(): Iterable<String> { + return listOf( + "invalid" + ) + } + } + """.trimIndent()) + testRule.appModule.dependencies.addAll( + listOf( + artifact(configuration = "ksp", "androidx.room:room-compiler:2.4.2") + ) + ) + + val result = testRule.runner().withArguments(":app:assemble").buildAndFail() + assertThat(result.output).contains("KSP apoption does not match /S=/S: invalid") + } } |