[Gradle][KT-51583][Minor] add 'projectBuilder' block to buildProject functions
This commit is contained in:
committed by
Space
parent
8acf04cf23
commit
f713782737
+3
@@ -44,5 +44,8 @@ internal inline fun <reified T : Any> Any.addExtension(name: String, extension:
|
||||
internal inline fun <reified T : Any> Any.getExtension(name: String): T? =
|
||||
(this as ExtensionAware).extensions.getByName(name) as T?
|
||||
|
||||
internal inline fun <reified T : Any> Any.findExtension(name: String): T? =
|
||||
(this as ExtensionAware).extensions.findByName(name)?.let { it as T? }
|
||||
|
||||
inline val Any.extraProperties: ExtraPropertiesExtension
|
||||
get() = (this as ExtensionAware).extensions.extraProperties
|
||||
|
||||
+5
@@ -12,6 +12,8 @@ import org.gradle.build.event.BuildEventsListenerRegistry
|
||||
import org.gradle.internal.service.DefaultServiceRegistry
|
||||
import org.gradle.internal.service.scopes.ProjectScopeServices
|
||||
import org.gradle.tooling.events.OperationCompletionListener
|
||||
import org.jetbrains.kotlin.gradle.plugin.addExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.findExtension
|
||||
import java.lang.reflect.Field
|
||||
import java.util.concurrent.atomic.AtomicReference
|
||||
|
||||
@@ -21,7 +23,9 @@ import java.util.concurrent.atomic.AtomicReference
|
||||
* https://github.com/gradle/gradle/issues/16774 (Waiting for Gradle 7.5)
|
||||
*/
|
||||
internal fun addBuildEventsListenerRegistryMock(project: Project) {
|
||||
val executedExtensionKey = "addBuildEventsListenerRegistryMock.executed"
|
||||
try {
|
||||
if (project.findExtension<Boolean>(executedExtensionKey) == true) return
|
||||
val projectScopeServices = (project as DefaultProject).services as ProjectScopeServices
|
||||
val state: Field = ProjectScopeServices::class.java.superclass.getDeclaredField("state")
|
||||
state.isAccessible = true
|
||||
@@ -33,6 +37,7 @@ internal fun addBuildEventsListenerRegistryMock(project: Project) {
|
||||
// add service and set state so that future mutations are not allowed
|
||||
projectScopeServices.add(BuildEventsListenerRegistry::class.java, BuildEventsListenerRegistryMock)
|
||||
stateValue.set(enumClass.enumConstants[1])
|
||||
project.addExtension(executedExtensionKey, true)
|
||||
} catch (e: Throwable) {
|
||||
throw RuntimeException(e)
|
||||
}
|
||||
|
||||
+10
-9
@@ -11,32 +11,33 @@ import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||
import org.jetbrains.kotlin.gradle.kpm.applyKpmPlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformJvmPlugin
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinPm20ProjectExtension
|
||||
|
||||
fun buildProject(
|
||||
configBuilder: ProjectBuilder.() -> Unit = { },
|
||||
configProject: Project.() -> Unit = {},
|
||||
projectBuilder: ProjectBuilder.() -> Unit = { },
|
||||
configureProject: Project.() -> Unit = {},
|
||||
): ProjectInternal = ProjectBuilder
|
||||
.builder()
|
||||
.apply(configBuilder)
|
||||
.apply(projectBuilder)
|
||||
.build()
|
||||
//temporary solution for BuildEventsListenerRegistry
|
||||
.also { addBuildEventsListenerRegistryMock(it) }
|
||||
.apply(configProject)
|
||||
.apply(configureProject)
|
||||
.let { it as ProjectInternal }
|
||||
|
||||
fun buildProjectWithMPP(code: Project.() -> Unit = {}) = buildProject {
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
fun buildProjectWithMPP(projectBuilder: ProjectBuilder.() -> Unit = { }, code: Project.() -> Unit = {}) = buildProject(projectBuilder) {
|
||||
project.applyMultiplatformPlugin()
|
||||
code()
|
||||
}
|
||||
|
||||
fun buildProjectWithKPM(code: Project.() -> Unit= {}) = buildProject {
|
||||
project.plugins.apply("org.jetbrains.kotlin.multiplatform.pm20")
|
||||
fun buildProjectWithKPM(projectBuilder: ProjectBuilder.() -> Unit = { }, code: Project.() -> Unit= {}) = buildProject(projectBuilder) {
|
||||
project.applyKpmPlugin()
|
||||
code()
|
||||
}
|
||||
|
||||
fun buildProjectWithJvm(code: Project.() -> Unit = {}) = buildProject {
|
||||
fun buildProjectWithJvm(projectBuilder: ProjectBuilder.() -> Unit = {}, code: Project.() -> Unit = {}) = buildProject(projectBuilder) {
|
||||
project.plugins.apply(KotlinPlatformJvmPlugin::class.java)
|
||||
code()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user