Add attributes to the kotlin subplugins classpath.
This removes selection ambiguity and provides Gradle multi-variant support for 3rd party compile plugins wrapped in Gradle. ^KT-49227 In Progress
This commit is contained in:
+10
-1
@@ -43,6 +43,7 @@ import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropKlibLibraryEl
|
||||
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.KotlinTestsRegistry
|
||||
import org.jetbrains.kotlin.gradle.tooling.registerBuildKotlinToolingMetadataTask
|
||||
import org.jetbrains.kotlin.gradle.utils.addGradlePluginMetadataAttributes
|
||||
import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility
|
||||
import org.jetbrains.kotlin.gradle.utils.getOrPut
|
||||
import org.jetbrains.kotlin.gradle.utils.loadPropertyFromResources
|
||||
@@ -75,9 +76,17 @@ abstract class KotlinBasePluginWrapper : Plugin<Project> {
|
||||
|
||||
addKotlinCompilerConfiguration(project)
|
||||
|
||||
project.configurations.maybeCreate(PLUGIN_CLASSPATH_CONFIGURATION_NAME)
|
||||
project.configurations.maybeCreate(PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply {
|
||||
isVisible = false
|
||||
isCanBeConsumed = false
|
||||
addGradlePluginMetadataAttributes(project)
|
||||
}
|
||||
|
||||
project.configurations.maybeCreate(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME).apply {
|
||||
isVisible = false
|
||||
isCanBeConsumed = false
|
||||
isTransitive = false
|
||||
addGradlePluginMetadataAttributes(project)
|
||||
}
|
||||
project.registerCommonizerClasspathConfigurationIfNecessary()
|
||||
|
||||
|
||||
+4
-4
@@ -38,10 +38,7 @@ import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||
import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.registerTask
|
||||
import org.jetbrains.kotlin.gradle.tasks.withType
|
||||
import org.jetbrains.kotlin.gradle.utils.COMPILE
|
||||
import org.jetbrains.kotlin.gradle.utils.RUNTIME
|
||||
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
|
||||
import org.jetbrains.kotlin.gradle.utils.*
|
||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||
import java.util.concurrent.Callable
|
||||
import kotlin.reflect.KMutableProperty1
|
||||
@@ -281,8 +278,11 @@ abstract class AbstractKotlinTargetConfigurator<KotlinTargetType : KotlinTarget>
|
||||
val configurations = target.project.configurations
|
||||
|
||||
configurations.maybeCreate(compilation.pluginConfigurationName).apply {
|
||||
addGradlePluginMetadataAttributes(project)
|
||||
|
||||
if (target.platformType == KotlinPlatformType.native) {
|
||||
extendsFrom(configurations.getByName(NATIVE_COMPILER_PLUGIN_CLASSPATH_CONFIGURATION_NAME))
|
||||
|
||||
isTransitive = false
|
||||
} else {
|
||||
extendsFrom(target.project.commonKotlinPluginClasspath)
|
||||
|
||||
+2
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.FilesSubpluginOption
|
||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
|
||||
import org.jetbrains.kotlin.gradle.tasks.CompilerPluginOptions
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilerPluginData
|
||||
import org.jetbrains.kotlin.gradle.utils.addGradlePluginMetadataAttributes
|
||||
import org.jetbrains.kotlin.gradle.utils.newProperty
|
||||
import org.jetbrains.kotlin.project.model.*
|
||||
import java.io.File
|
||||
@@ -94,6 +95,7 @@ internal class CompilerPluginOptionsBuilder(
|
||||
isCanBeResolved = true
|
||||
isVisible = false
|
||||
reorderPluginClasspathDependencies()
|
||||
addGradlePluginMetadataAttributes(project)
|
||||
}
|
||||
artifacts.forEach { project.dependencies.add(configurationName, it) }
|
||||
|
||||
|
||||
+23
@@ -8,6 +8,13 @@ package org.jetbrains.kotlin.gradle.utils
|
||||
import org.gradle.api.NamedDomainObjectProvider
|
||||
import org.gradle.api.Project
|
||||
import org.gradle.api.artifacts.Configuration
|
||||
import org.gradle.api.attributes.Category
|
||||
import org.gradle.api.attributes.LibraryElements
|
||||
import org.gradle.api.attributes.Usage
|
||||
import org.gradle.api.attributes.plugin.GradlePluginApiVersion
|
||||
import org.gradle.kotlin.dsl.named
|
||||
import org.gradle.util.GradleVersion
|
||||
import java.lang.RuntimeException
|
||||
|
||||
fun Project.addExtendsFromRelation(extendingConfigurationName: String, extendsFromConfigurationName: String, forced: Boolean = true) {
|
||||
if (extendingConfigurationName == extendsFromConfigurationName) return
|
||||
@@ -23,3 +30,19 @@ fun NamedDomainObjectProvider<Configuration>.extendsFrom(other: NamedDomainObjec
|
||||
if (name == other.name) return
|
||||
configure { extending -> extending.extendsFrom(other.get()) }
|
||||
}
|
||||
|
||||
internal fun Configuration.addGradlePluginMetadataAttributes(
|
||||
project: Project
|
||||
) {
|
||||
attributes {
|
||||
it.attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.LIBRARY))
|
||||
it.attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_RUNTIME))
|
||||
it.attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, project.objects.named(LibraryElements.JAR))
|
||||
if (GradleVersion.current() >= GradleVersion.version("7.0")) {
|
||||
it.attribute(
|
||||
GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE,
|
||||
project.objects.named(GradlePluginApiVersion::class.java, GradleVersion.current().version)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user