aboutsummaryrefslogtreecommitdiff
path: root/gradle-plugin
diff options
context:
space:
mode:
authorNelson Osacky <nosacky@gradle.com>2022-03-06 21:22:52 +0100
committerlaszio <ting-yuan@users.noreply.github.com>2022-04-05 13:01:13 -0700
commit0c82e893706f0810059500287064cc80f02b8bc2 (patch)
tree380971b6e7911426ab3b54f0590e8442dc9f5300 /gradle-plugin
parenta942d3ee92a9779336417beacd840929e7309289 (diff)
downloadksp-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.kt6
-rw-r--r--gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/GradleCompilationTest.kt26
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")
+ }
}