[Gradle] Implement KotlinTargetSideEffect.extensionPoint
KT-61634
This commit is contained in:
committed by
Space Team
parent
1827df82c4
commit
f89a46710a
+2
-1
@@ -9,6 +9,7 @@ import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.DeprecatedTargetPresetApi
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.targets.android.internal.InternalKotlinTargetPreset
|
||||
import org.jetbrains.kotlin.gradle.targets.runKotlinTargetSideEffects
|
||||
|
||||
@DeprecatedTargetPresetApi
|
||||
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
||||
@@ -42,7 +43,7 @@ abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompila
|
||||
}
|
||||
|
||||
createKotlinTargetConfigurator().configureTarget(result)
|
||||
|
||||
result.runKotlinTargetSideEffects()
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.gradle.targets
|
||||
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinGradlePluginExtensionPoint
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||
|
||||
/**
|
||||
* Will be invoked once a new [KotlinTarget] was created.
|
||||
* See [registerKotlinPluginExtensions] to register an effect.
|
||||
*
|
||||
* ### Example
|
||||
* ```kotlin
|
||||
* internal val KotlinNativeTargetLoggingSideEffect = KotlinTargetSideEffect<KotlinNativeTarget> {
|
||||
* project.logger.debug(konanTarget.name)
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* Will print the name of a konanTarget once a new KotlinNativeTarget was created
|
||||
*/
|
||||
internal fun interface KotlinTargetSideEffect {
|
||||
operator fun invoke(target: KotlinTarget)
|
||||
|
||||
companion object {
|
||||
val extensionPoint = KotlinGradlePluginExtensionPoint<KotlinTargetSideEffect>()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* see [KotlinTargetSideEffect]
|
||||
*/
|
||||
internal inline fun <reified T : KotlinTarget> KotlinTargetSideEffect(crossinline effect: (T) -> Unit) = KotlinTargetSideEffect { target ->
|
||||
if (target is T) effect(target)
|
||||
}
|
||||
|
||||
|
||||
internal fun KotlinTarget.runKotlinTargetSideEffects() {
|
||||
KotlinTargetSideEffect.extensionPoint[project].forEach { effect ->
|
||||
effect(this)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user