From: Samyak Jain <samyak.jn11@gmail.com>
Date: Fri, 4 Sep 2020 21:12:37 +0530
Subject: libraries//kotlin-gradle-plugin: Resolve various errors

Resolve various version conflicts errors and circular dependencies This resolves
android-gradle-plugin circular dependencies for source, and resolves various
unrefrence errors which was because of gradle circular dependencies (>4.7) the
same various files are backported in gradle (v4.4.1-12).
---
 .../internal/kapt/Kapt3KotlinGradleSubplugin.kt    |  22 +-
 .../gradle/internal/kapt/KaptWithKotlincTask.kt    |   9 +-
 .../jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt |  35 +---
 .../kotlin/gradle/plugin/TaskProviderHolder.kt     |   2 +-
 .../plugin/android/Android25ProjectHandler.kt      | 228 ---------------------
 .../gradle/plugin/mpp/KotlinSoftwareComponent.kt   |   9 +-
 .../kotlin/gradle/plugin/mpp/kotlinTargets.kt      |   2 +-
 .../kotlin/gradle/plugin/mpp/kotlinVariants.kt     |   2 +-
 .../scripting/internal/ScriptingGradleSubplugin.kt |   2 +-
 .../gradle/targets/android/KotlinAndroidTarget.kt  |  23 +--
 .../targets/android/KotlinAndroidTargetPreset.kt   |   1 -
 .../targets/jvm/KotlinJvmAndroidCompilation.kt     |   9 +-
 .../gradle/utils/NativeCompilerDownloader.kt       |   3 -
 13 files changed, 20 insertions(+), 327 deletions(-)
 delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt

diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
index 2eeda0c..78cd20a 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt
@@ -18,7 +18,6 @@ import org.gradle.api.tasks.SourceSet
 import org.gradle.api.tasks.TaskDependency
 import org.gradle.api.tasks.compile.AbstractCompile
 import org.gradle.api.tasks.compile.JavaCompile
-import org.gradle.process.CommandLineArgumentProvider
 import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
 import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.getKaptGeneratedClassesDir
 import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin.Companion.getKaptGeneratedKotlinSourcesDir
@@ -300,29 +299,12 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
 
         val androidOptions = kaptVariantData?.annotationProcessorOptions ?: emptyMap()
 
-        val apOptionsFromProviders =
-            if (isGradleVersionAtLeast(4, 6))
-                kaptVariantData?.annotationProcessorOptionProviders
-                    ?.flatMap { (it as CommandLineArgumentProvider).asArguments() }
-                    .orEmpty()
-            else
-                emptyList()
-
-        val subluginOptionsFromProvidedApOptions = apOptionsFromProviders.map {
-            // Use the internal subplugin option type to exclude them from Gradle input/output checks, as their providers are already
-            // properly registered as a nested input:
-
-            // Pass options as they are in the key-only form (key = 'a=b'), kapt will deal with them:
-            InternalSubpluginOption(key = it.removePrefix("-A"), value = "")
-        }
-
         val apOptionsPairsList: List<Pair<String, String>> =
             kaptExtension.getAdditionalArguments(project, kaptVariantData?.variantData, androidPlugin).toList() +
                     androidOptions.toList()
 
         return apOptionsPairsList.map { SubpluginOption(it.first, it.second) } +
-                FilesSubpluginOption(KAPT_KOTLIN_GENERATED, listOf(kotlinSourcesOutputDir)) +
-                subluginOptionsFromProvidedApOptions
+		FilesSubpluginOption(KAPT_KOTLIN_GENERATED, listOf(kotlinSourcesOutputDir))
     }
 
     private fun Kapt3SubpluginContext.buildAndAddOptionsTo(task: Task, container: CompilerPluginOptions, aptMode: String) {
@@ -512,7 +494,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
                 // This is done to avoid outputs intersections between Kapt and and javaCompile and make the up-to-date check for
                 // javaCompile more granular as it does not perform annotation processing:
                 if (kaptVariantData != null) {
-                    options.compilerArgumentProviders.removeAll(kaptVariantData.annotationProcessorOptionProviders)
+//                    options.compilerArgumentProviders.removeAll(kaptVariantData.annotationProcessorOptionProviders)
                 }
             }
         }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithKotlincTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithKotlincTask.kt
index 5deea4d..ef94e49 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithKotlincTask.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/KaptWithKotlincTask.kt
@@ -5,6 +5,7 @@
 
 package org.jetbrains.kotlin.gradle.internal
 
+import com.intellij.openapi.util.text.StringUtil
 import com.intellij.openapi.util.SystemInfo
 import org.gradle.api.GradleException
 import org.gradle.api.file.FileCollection
@@ -104,7 +105,11 @@ open class KaptWithKotlincTask : KaptTask(), CompilerArgumentAwareWithInput<K2JV
             environment = environment
         )
     }
+    private fun getJavaRuntimeVersion(): String {
+        val rtVersion = System.getProperty("java.runtime.version")
+        return if (Character.isDigit(rtVersion[0])) rtVersion else System.getProperty("java.version")
+    }
 
     private val isAtLeastJava9: Boolean
-        get() = SystemInfo.isJavaVersionAtLeast(9, 0, 0)
-}
\ No newline at end of file
+		get() = StringUtil.compareVersionNumbers(getJavaRuntimeVersion(), "9") >= 0
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
index 8ef9ec3..c23ea82 100755
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt
@@ -141,7 +141,7 @@ internal abstract class KotlinSourceSetProcessor<T : AbstractKotlinCompile<*>>(
             var shouldCreateTask = false
             if (useLazyTaskConfiguration) {
                 try {
-                    named(expectedClassesTaskName)
+                    findByName(expectedClassesTaskName)
                 } catch (e: Exception) {
                     shouldCreateTask = true
                 }
@@ -636,7 +636,6 @@ internal open class KotlinAndroidPlugin(
         val androidTarget = KotlinAndroidTarget("", project)
         (project.kotlinExtension as KotlinAndroidProjectExtension).target = androidTarget
 
-        applyToTarget(kotlinPluginVersion, androidTarget)
 
         applyUserDefinedAttributes(androidTarget)
 
@@ -645,36 +644,6 @@ internal open class KotlinAndroidPlugin(
         project.whenEvaluated { project.components.addAll(androidTarget.components) }
     }
 
-    companion object {
-        fun androidTargetHandler(
-            kotlinPluginVersion: String,
-            androidTarget: KotlinAndroidTarget
-        ): AbstractAndroidProjectHandler<*> {
-            val tasksProvider = AndroidTasksProvider(androidTarget.targetName)
-
-            val version = loadAndroidPluginVersion()
-            if (version != null) {
-                val minimalVersion = "3.0.0"
-                if (compareVersionNumbers(version, minimalVersion) < 0) {
-                    throw IllegalStateException("Kotlin: Unsupported version of com.android.tools.build:gradle plugin: version $minimalVersion or higher should be used with kotlin-android plugin")
-                }
-            }
-
-            val kotlinTools = KotlinConfigurationTools(
-                tasksProvider,
-                kotlinPluginVersion
-            )
-
-            return Android25ProjectHandler(kotlinTools)
-        }
-
-        fun applyToTarget(
-            kotlinPluginVersion: String,
-            kotlinTarget: KotlinAndroidTarget
-        ) {
-            androidTargetHandler(kotlinPluginVersion, kotlinTarget).configureTarget(kotlinTarget)
-        }
-    }
 }
 
 class KotlinConfigurationTools internal constructor(
@@ -1041,4 +1010,4 @@ internal fun compareVersionNumbers(v1: String?, v2: String?): Int {
         }
         return 0
     }
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt
index dd11ed7..e0e566f 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/TaskProviderHolder.kt
@@ -22,7 +22,7 @@ import org.gradle.api.tasks.TaskProvider
 
 class TaskProviderHolder<T : Task>(project: Project, private val name: String, type: Class<T>, configureAction: (T) -> (Unit)) :
     TaskHolder<T> {
-    private val provider: TaskProvider<T> = project.tasks.register(name, type, configureAction)
+    private val provider: TaskProvider<T> = project.tasks.create(name, type, configureAction) as TaskProvider<T>
 
     override fun getTaskOrProvider(): Any = provider
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt
deleted file mode 100644
index 0117da6..0000000
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 2010-2018 JetBrains s.r.o. 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.plugin
-
-import com.android.build.gradle.*
-import com.android.build.gradle.api.*
-import com.android.build.gradle.tasks.MergeResources
-import com.android.builder.model.SourceProvider
-import org.gradle.api.Project
-import org.gradle.api.file.FileCollection
-import org.gradle.api.tasks.bundling.AbstractArchiveTask
-import org.gradle.api.tasks.compile.AbstractCompile
-import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin
-import org.jetbrains.kotlin.gradle.internal.KaptTask
-import org.jetbrains.kotlin.gradle.internal.KaptVariantData
-import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
-import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
-import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
-import java.io.File
-import java.util.concurrent.Callable
-
-class Android25ProjectHandler(
-    kotlinConfigurationTools: KotlinConfigurationTools
-) : AbstractAndroidProjectHandler<BaseVariant>(kotlinConfigurationTools) {
-
-    override fun forEachVariant(project: Project, action: (BaseVariant) -> Unit) {
-        val androidExtension = project.extensions.getByName("android")
-        when (androidExtension) {
-            is AppExtension -> androidExtension.applicationVariants.all(action)
-            is LibraryExtension -> {
-                androidExtension.libraryVariants.all(action)
-                if (androidExtension is FeatureExtension) {
-                    androidExtension.featureVariants.all(action)
-                }
-            }
-            is TestExtension -> androidExtension.applicationVariants.all(action)
-        }
-        if (androidExtension is TestedExtension) {
-            androidExtension.testVariants.all(action)
-            androidExtension.unitTestVariants.all(action)
-        }
-    }
-
-    override fun wireKotlinTasks(
-        project: Project,
-        compilation: KotlinJvmAndroidCompilation,
-        androidPlugin: BasePlugin,
-        androidExt: BaseExtension,
-        variantData: BaseVariant,
-        javaTask: AbstractCompile,
-        kotlinTask: KotlinCompile
-    ) {
-        val preJavaKotlinOutputFiles = mutableListOf<File>().apply {
-            add(kotlinTask.destinationDir)
-            if (Kapt3GradleSubplugin.isEnabled(project)) {
-                // Add Kapt3 output as well, since there's no SyncOutputTask with the new API
-                val kaptClasssesDir = Kapt3GradleSubplugin.getKaptGeneratedClassesDir(project, getVariantName(variantData))
-                add(kaptClasssesDir)
-            }
-        }
-        val preJavaKotlinOutput = project.files(*preJavaKotlinOutputFiles.toTypedArray()).builtBy(kotlinTask)
-
-        val preJavaClasspathKey = variantData.registerPreJavacGeneratedBytecode(preJavaKotlinOutput)
-        kotlinTask.dependsOn(variantData.getSourceFolders(SourceKind.JAVA))
-
-        kotlinTask.mapClasspath {
-            val kotlinClasspath = variantData.getCompileClasspath(preJavaClasspathKey)
-            kotlinClasspath + project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt))
-        }
-
-        // Find the classpath entries that comes from the tested variant and register it as the friend path, lazily
-        kotlinTask.friendPaths = lazy {
-            variantData.getCompileClasspathArtifacts(preJavaClasspathKey)
-                .filter { it.id.componentIdentifier is TestedComponentIdentifier }
-                .map { it.file.absolutePath }
-                .toTypedArray()
-        }
-        kotlinTask.javaOutputDir = javaTask.destinationDir
-    }
-
-    override fun getSourceProviders(variantData: BaseVariant): Iterable<SourceProvider> =
-        variantData.sourceSets
-
-    override fun getAllJavaSources(variantData: BaseVariant): Iterable<File> =
-        variantData.getSourceFolders(SourceKind.JAVA).map { it.dir }
-
-    override fun getVariantName(variant: BaseVariant): String = variant.name
-
-    override fun getFlavorNames(variant: BaseVariant): List<String> = variant.productFlavors.map { it.name }
-
-    override fun getBuildTypeName(variant: BaseVariant): String = variant.buildType.name
-
-    override fun getTestedVariantData(variantData: BaseVariant): BaseVariant? = when (variantData) {
-        is TestVariant -> variantData.testedVariant
-        is UnitTestVariant -> variantData.testedVariant as? BaseVariant
-        else -> null
-    }
-
-    override fun getJavaTask(variantData: BaseVariant): AbstractCompile? {
-        @Suppress("DEPRECATION") // There is always a Java compile task -- the deprecation was for Jack
-        return variantData::class.java.methods.firstOrNull { it.name == "getJavaCompileProvider" }
-            ?.invoke(variantData)
-            ?.let { taskProvider ->
-                // org.gradle.api.tasks.TaskProvider is added in Gradle 4.8
-                taskProvider::class.java.methods.firstOrNull { it.name == "get" }?.invoke(taskProvider) as AbstractCompile?
-            } ?: variantData.javaCompile
-    }
-
-    override fun addJavaSourceDirectoryToVariantModel(variantData: BaseVariant, javaSourceDirectory: File) =
-        variantData.addJavaSourceFoldersToModel(javaSourceDirectory)
-
-    override fun getResDirectories(variantData: BaseVariant): FileCollection {
-        val getAllResourcesMethod =
-            variantData::class.java.methods.firstOrNull { it.name == "getAllRawAndroidResources" }
-        if (getAllResourcesMethod != null) {
-            val allResources = getAllResourcesMethod.invoke(variantData) as FileCollection
-            return allResources
-        }
-
-        val project = variantData.mergeResources.project
-        return project.files(Callable { variantData.mergeResources?.computeResourceSetList0() ?: emptyList() })
-    }
-
-    override fun getLibraryOutputTask(variant: BaseVariant): AbstractArchiveTask? =
-        (variant as? LibraryVariant)?.packageLibrary
-
-    override fun setUpDependencyResolution(variant: BaseVariant, compilation: KotlinJvmAndroidCompilation) {
-        val project = compilation.target.project
-
-        AbstractKotlinTargetConfigurator.defineConfigurationsForCompilation(compilation)
-
-        compilation.compileDependencyFiles = variant.compileConfiguration.apply {
-            usesPlatformOf(compilation.target)
-            project.addExtendsFromRelation(name, compilation.compileDependencyConfigurationName)
-        }
-
-        compilation.runtimeDependencyFiles = variant.runtimeConfiguration.apply {
-            usesPlatformOf(compilation.target)
-            project.addExtendsFromRelation(name, compilation.runtimeDependencyConfigurationName)
-        }
-
-        // TODO this code depends on the convention that is present in the Android plugin as there's no public API
-        // We should request such API in the Android plugin
-        val apiElementsConfigurationName = "${variant.name}ApiElements"
-        val runtimeElementsConfigurationName = "${variant.name}RuntimeElements"
-
-        // KT-29476, the Android *Elements configurations need Kotlin MPP dependencies:
-        if (project.configurations.findByName(apiElementsConfigurationName) != null) {
-            project.addExtendsFromRelation(apiElementsConfigurationName, compilation.apiConfigurationName)
-        }
-        if (project.configurations.findByName(runtimeElementsConfigurationName) != null) {
-            project.addExtendsFromRelation(runtimeElementsConfigurationName, compilation.implementationConfigurationName)
-            project.addExtendsFromRelation(runtimeElementsConfigurationName, compilation.runtimeOnlyConfigurationName)
-        }
-
-        listOf(apiElementsConfigurationName, runtimeElementsConfigurationName).forEach { outputConfigurationName ->
-            project.configurations.findByName(outputConfigurationName)?.usesPlatformOf(compilation.target)
-        }
-    }
-
-    private inner class KaptVariant(variantData: BaseVariant) : KaptVariantData<BaseVariant>(variantData) {
-        override val name: String = getVariantName(variantData)
-        override val sourceProviders: Iterable<SourceProvider> = getSourceProviders(variantData)
-        override fun addJavaSourceFoldersToModel(generatedFilesDir: File) =
-            addJavaSourceDirectoryToVariantModel(variantData, generatedFilesDir)
-
-        override val annotationProcessorOptions: Map<String, String>? =
-            variantData.javaCompileOptions.annotationProcessorOptions.arguments
-
-        override fun registerGeneratedJavaSource(
-            project: Project,
-            kaptTask: KaptTask,
-            javaTask: AbstractCompile
-        ) {
-            val kaptSourceOutput = project.fileTree(kaptTask.destinationDir).builtBy(kaptTask)
-            variantData.registerExternalAptJavaOutput(kaptSourceOutput)
-            variantData.dataBindingDependencyArtifactsIfSupported?.let { kaptTask.dependsOn(it) }
-        }
-
-        override val annotationProcessorOptionProviders: List<*>
-            get() = try {
-                // Public API added in Android Gradle Plugin 3.2.0-alpha15:
-                val apOptions = variantData.javaCompileOptions.annotationProcessorOptions
-                apOptions.javaClass.getMethod("getCompilerArgumentProviders").invoke(apOptions) as List<*>
-            } catch (e: NoSuchMethodException) {
-                emptyList<Any>()
-            }
-    }
-
-    //TODO A public API is expected for this purpose. Once it is available, use the public API
-    private fun MergeResources.computeResourceSetList0(): List<File>? {
-        val computeResourceSetListMethod = MergeResources::class.java.declaredMethods
-            .firstOrNull { it.name == "computeResourceSetList" && it.parameterCount == 0 } ?: return null
-
-        val oldIsAccessible = computeResourceSetListMethod.isAccessible
-        try {
-            computeResourceSetListMethod.isAccessible = true
-
-            val resourceSets = computeResourceSetListMethod.invoke(this) as? Iterable<*>
-
-            return resourceSets
-                ?.mapNotNull { resourceSet ->
-                    val getSourceFiles = resourceSet?.javaClass?.methods?.find { it.name == "getSourceFiles" && it.parameterCount == 0 }
-                    val files = getSourceFiles?.invoke(resourceSet)
-                    @Suppress("UNCHECKED_CAST")
-                    files as? Iterable<File>
-                }
-                ?.flatten()
-
-        } finally {
-            computeResourceSetListMethod.isAccessible = oldIsAccessible
-        }
-    }
-
-    //TODO once the Android plugin reaches its 3.0.0 release, consider compiling against it (remove the reflective call)
-    private val BaseVariant.dataBindingDependencyArtifactsIfSupported: FileCollection?
-        get() = this::class.java.methods
-            .find { it.name == "getDataBindingDependencyArtifacts" }
-            ?.also { it.isAccessible = true }
-            ?.invoke(this) as? FileCollection
-
-    override fun wrapVariantDataForKapt(variantData: BaseVariant): KaptVariantData<BaseVariant> =
-        KaptVariant(variantData)
-}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt
index a962898..6f368f6 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinSoftwareComponent.kt
@@ -10,7 +10,7 @@ import org.gradle.api.artifacts.*
 import org.gradle.api.attributes.Attribute
 import org.gradle.api.attributes.AttributeContainer
 import org.gradle.api.attributes.Usage
-import org.gradle.api.capabilities.Capability
+// import org.gradle.api.capabilities.Capability
 import org.gradle.api.component.ComponentWithCoordinates
 import org.gradle.api.component.ComponentWithVariants
 import org.gradle.api.component.SoftwareComponent
@@ -81,9 +81,6 @@ class DefaultKotlinUsageContext(
     override fun getDependencies(): MutableSet<out ModuleDependency> =
         configuration.incoming.dependencies.withType(ModuleDependency::class.java)
 
-    override fun getDependencyConstraints(): MutableSet<out DependencyConstraint> =
-        configuration.incoming.dependencyConstraints
-
     override fun getArtifacts(): Set<PublishArtifact> =
         overrideConfigurationArtifacts ?:
         // TODO Gradle Java plugin does that in a different way; check whether we can improve this
@@ -112,7 +109,7 @@ class DefaultKotlinUsageContext(
         return result
     }
 
-    override fun getCapabilities(): Set<Capability> = emptySet()
+//    override fun getCapabilities(): Set<Capability> = emptySet()
 
-    override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
+//    override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
 }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt
index 25227a2..c84c658 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt
@@ -115,7 +115,7 @@ abstract class AbstractKotlinTarget(
                             configuration.isCanBeConsumed = false
                             configuration.isCanBeResolved = false
                             configuration.dependencies.addAll(kotlinUsageContext.dependencies)
-                            configuration.dependencyConstraints.addAll(kotlinUsageContext.dependencyConstraints)
+//                            configuration.dependencyConstraints.addAll(kotlinUsageContext.dependencyConstraints)
                             configuration.artifacts.addAll(kotlinUsageContext.artifacts)
 
                             kotlinUsageContext.attributes.keySet().forEach {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt
index b699ba3..6cae5ce 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinVariants.kt
@@ -124,7 +124,7 @@ class KotlinVariantWithMetadataDependency(
     ) : KotlinUsageContext by parentUsageContext {
         override fun getDependencies() = parentUsageContext.dependencies + additionalDependencies
 
-        override fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
+        fun getGlobalExcludes(): Set<ExcludeRule> = emptySet()
     }
 }
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt
index a5ec36d..a2e7493 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/scripting/internal/ScriptingGradleSubplugin.kt
@@ -65,7 +65,7 @@ class ScriptingGradleSubplugin : Plugin<Project> {
                     }
                 }
                 if (useLazyTaskConfiguration) {
-                    project.tasks.withType(KotlinCompile::class.java).configureEach(configureAction)
+                    project.tasks.withType(KotlinCompile::class.java).all(configureAction)
                 } else {
                     project.tasks.withType(KotlinCompile::class.java, configureAction)
                 }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt
index 3646c72..0f3b5af 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt
@@ -69,27 +69,6 @@ open class KotlinAndroidTarget(
                         add(getVariantName(it))
                 }
             }
-
-        val variantNames =
-            KotlinAndroidPlugin.androidTargetHandler(project.getKotlinPluginVersion()!!, this)
-                .getLibraryVariantNames()
-
-        val missingVariants =
-            publishLibraryVariants?.minus(variantNames).orEmpty()
-
-        if (missingVariants.isNotEmpty())
-            throw InvalidUserDataException(
-                "Kotlin target '$targetName' tried to set up publishing for Android build variants that are not library variants " +
-                        "or do not exist:\n" + missingVariants.joinToString("\n") { "* $it" } +
-                        "\nCheck the 'publishLibraryVariants' property, it should point to existing Android library variants. Publishing " +
-                        "of application and test variants is not supported."
-            )
-    }
-
-    override val kotlinComponents by lazy {
-        checkPublishLibraryVariantsExist()
-
-        KotlinAndroidPlugin.androidTargetHandler(project.getKotlinPluginVersion()!!, this).doCreateComponents()
     }
 
     // Capture the type parameter T for `AbstractAndroidProjectHandler`
@@ -200,4 +179,4 @@ open class KotlinAndroidTarget(
             )
         }
     }
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt
index f02f60f..f697961 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetPreset.kt
@@ -23,7 +23,6 @@ class KotlinAndroidTargetPreset(
             preset = this@KotlinAndroidTargetPreset
         }
 
-        KotlinAndroidPlugin.applyToTarget(kotlinPluginVersion, result)
         return result
     }
 
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt
index f67e909..9fbb29d 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmAndroidCompilation.kt
@@ -19,11 +19,4 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
      override val compileKotlinTask: org.jetbrains.kotlin.gradle.tasks.KotlinCompile
          get() = super.compileKotlinTask as org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
-     override val relatedConfigurationNames: List<String>
-         get() = super.relatedConfigurationNames + listOf(
-             "${androidVariant.name}ApiElements",
-             "${androidVariant.name}RuntimeElements",
-             androidVariant.compileConfiguration.name,
-             androidVariant.runtimeConfiguration.name
-         )
- }
\ No newline at end of file
+ }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/NativeCompilerDownloader.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/NativeCompilerDownloader.kt
index d428049..7aff46f 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/NativeCompilerDownloader.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/NativeCompilerDownloader.kt
@@ -59,9 +59,6 @@ class NativeCompilerDownloader(
                 val layout = it as IvyPatternRepositoryLayout
                 layout.artifact("[artifact]-[revision].[ext]")
             }
-            repo.metadataSources {
-                it.artifact()
-            }
         }
     }
 
