[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.DeprecatedTargetPresetApi
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.targets.android.internal.InternalKotlinTargetPreset
|
import org.jetbrains.kotlin.gradle.targets.android.internal.InternalKotlinTargetPreset
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.runKotlinTargetSideEffects
|
||||||
|
|
||||||
@DeprecatedTargetPresetApi
|
@DeprecatedTargetPresetApi
|
||||||
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
|
||||||
@@ -42,7 +43,7 @@ abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompila
|
|||||||
}
|
}
|
||||||
|
|
||||||
createKotlinTargetConfigurator().configureTarget(result)
|
createKotlinTargetConfigurator().configureTarget(result)
|
||||||
|
result.runKotlinTargetSideEffects()
|
||||||
return result
|
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