Disallow unsafe reads of KPM PluginData from Compile Task

This commit is contained in:
Anton Lakotka
2021-06-05 12:56:20 +02:00
committed by Space
parent 52abecab43
commit c8b9a3a6f0
3 changed files with 27 additions and 1 deletions
@@ -10,6 +10,12 @@ import kotlin.test.assertTrue
class KpmCompilerPluginIT : BaseGradleIT() {
/**
* Gradle implementation of KPM uses features of 6.4+ version
*/
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("6.4")
@Test
fun testTransientPluginOptions() {
val project = transformProjectWithPluginsDsl("kpmTransientPluginOptions")
@@ -118,6 +118,26 @@ class KpmCompilerPluginTest {
assertEquals(1, pluginDataObtainCount)
}
@Test
fun `it should not be possible to read plugin data during configuration phase`() {
val project = buildProjectWithKPM {
plugins.apply(TestPluginWithListeners::class.java)
projectModel {
main {
jvm
}
}
// Getting task shouldn't fail due to laziness
val task = tasks.getByName("compileKotlinJvm") as AbstractKotlinCompile<*>
// But trying to get pluginData during "configuration" should fail
assertFailsWith<IllegalStateException> { task.kotlinPluginData!!.get() }
}
project.evaluate()
}
private fun Project.pluginDataOfTask(taskName: String) = this
.tasks
.getByName(taskName)
@@ -42,7 +42,7 @@ private fun Project.compilerPluginDataProvider(
val builder = CompilerPluginOptionsBuilder(project, configurationName)
builder += pluginDataList()
builder.build()
}.apply { finalizeValueOnRead() }
}.apply { disallowUnsafeRead() }
}
internal class CompilerPluginOptionsBuilder(