Skip to content

Commit

Permalink
[Gradle] Don't register 'sourceSets' container dynamically
Browse files Browse the repository at this point in the history
Before this change created via 'KotlinJvmFactory'
'AndroidProjectExtension' and 'JvmProjectExtension' instances are
missing source sets container as it was added dynamically in the plugin.

On the other hand, there are no use-cases to add such a container
dynamically.

^KT-72467 Verification Pending
  • Loading branch information
Tapchicoma authored and qodana-bot committed Oct 23, 2024
1 parent 9d0cc47 commit 1ded9a4
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ public abstract class org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtensi
public static synthetic fun withSourcesJar$default (Lorg/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension;ZILjava/lang/Object;)V
}

public class org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension : org/jetbrains/kotlin/gradle/dsl/KotlinBaseExtension, org/jetbrains/kotlin/gradle/plugin/HasProject, org/jetbrains/kotlin/tooling/core/HasMutableExtras {
public abstract class org/jetbrains/kotlin/gradle/dsl/KotlinProjectExtension : org/gradle/api/plugins/ExtensionAware, org/jetbrains/kotlin/gradle/dsl/KotlinBaseExtension, org/jetbrains/kotlin/gradle/plugin/HasProject, org/jetbrains/kotlin/tooling/core/HasMutableExtras {
public field coreLibrariesVersion Ljava/lang/String;
public fun <init> (Lorg/gradle/api/Project;)V
public fun explicitApi ()V
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@

package org.jetbrains.kotlin.gradle.dsl

import com.gradle.scan.agent.serialization.scan.serializer.kryo.it
import org.gradle.api.Action
import org.gradle.api.Named
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.internal.plugins.DslObject
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.provider.Property
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.jvm.toolchain.JavaToolchainSpec
Expand All @@ -19,6 +20,7 @@ import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.CoroutineStart.Undispatched
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaTarget
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset
import org.jetbrains.kotlin.gradle.tasks.CompileUsingKotlinDaemon
Expand Down Expand Up @@ -77,21 +79,28 @@ internal fun KotlinBaseExtension.explicitApiModeAsCompilerArg(): String? {
}

@KotlinGradlePluginPublicDsl
open class KotlinProjectExtension @Inject constructor(
abstract class KotlinProjectExtension @Inject constructor(
override val project: Project
) : KotlinBaseExtension,
HasMutableExtras,
HasProject {
HasProject,
ExtensionAware {

override lateinit var coreLibrariesVersion: String

final override val extras: MutableExtras = mutableExtrasOf()

private val sourceSetsContainer = project.objects.domainObjectContainer(
KotlinSourceSet::class.java,
DefaultKotlinSourceSetFactory(project)
).also { kotlinSourceSets ->
// Required for Gradle to generate accessors to source sets or 'sourceSets {}' DSL
extensions.add("sourceSets", kotlinSourceSets)
}
override var sourceSets: NamedDomainObjectContainer<KotlinSourceSet>
@Suppress("UNCHECKED_CAST")
get() = DslObject(this).extensions.getByName("sourceSets") as NamedDomainObjectContainer<KotlinSourceSet>
internal set(value) {
DslObject(this).extensions.add("sourceSets", value)
get() = sourceSetsContainer
@Deprecated("Assigning new value to 'sourceSets' is deprecated", level = DeprecationLevel.ERROR)
internal set(_) {
}

internal suspend fun awaitSourceSets(): NamedDomainObjectContainer<KotlinSourceSet> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package org.jetbrains.kotlin.gradle.plugin

import org.gradle.api.GradleException
import org.gradle.api.NamedDomainObjectFactory
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.artifacts.ExternalDependency
Expand All @@ -41,7 +40,6 @@ import org.jetbrains.kotlin.gradle.plugin.internal.*
import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.plugin.mpp.apple.swiftexport.internal.initSwiftExportClasspathConfigurations
import org.jetbrains.kotlin.gradle.plugin.mpp.resources.resolve.KotlinTargetResourcesResolutionStrategy
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetFactory
import org.jetbrains.kotlin.gradle.plugin.statistics.BuildFusService
import org.jetbrains.kotlin.gradle.report.BuildMetricsService
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsCompilerAttribute
Expand Down Expand Up @@ -195,9 +193,6 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {

abstract val pluginVariant: String

internal open fun kotlinSourceSetFactory(project: Project): NamedDomainObjectFactory<KotlinSourceSet> =
DefaultKotlinSourceSetFactory(project)

override fun apply(project: Project) {
super.apply(project)
project.logger.info("Using Kotlin Gradle Plugin $pluginVariant variant")
Expand All @@ -212,14 +207,6 @@ abstract class KotlinBasePluginWrapper : DefaultKotlinBasePlugin() {

project.createKotlinExtension(projectExtensionClass).apply {
coreLibrariesVersion = pluginVersion

fun kotlinSourceSetContainer(factory: NamedDomainObjectFactory<KotlinSourceSet>) =
project.container(KotlinSourceSet::class.java, factory)

val topLevelExtension = project.topLevelExtension
if (topLevelExtension is KotlinProjectExtension) {
project.kotlinExtension.sourceSets = kotlinSourceSetContainer(kotlinSourceSetFactory(project))
}
}

project.extensions.add(KotlinTestsRegistry.PROJECT_EXTENSION_NAME, createTestRegistry(project))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import org.junit.Test
import org.junit.rules.TemporaryFolder
import kotlin.test.assertEquals
import kotlin.test.assertNotEquals
import kotlin.test.assertNotNull

class KotlinCompileApiTest {

Expand Down Expand Up @@ -199,6 +200,7 @@ class KotlinCompileApiTest {
jvmExtension.compilerOptions.jvmTarget.set(JvmTarget.JVM_21)
jvmExtension.compilerOptions.javaParameters.set(true)
jvmExtension.explicitApi = ExplicitApiMode.Strict
jvmExtension.sourceSets.register("main")

project.evaluate()

Expand All @@ -208,6 +210,7 @@ class KotlinCompileApiTest {
ExplicitApiMode.Strict,
(jvmTask.get() as KotlinCompile).explicitApiMode.get()
)
assertNotNull(jvmExtension.sourceSets.findByName("main"))
}

@Test
Expand All @@ -231,6 +234,7 @@ class KotlinCompileApiTest {
androidExtension.compilerOptions.jvmTarget.set(JvmTarget.JVM_21)
androidExtension.compilerOptions.javaParameters.set(true)
androidExtension.explicitApi = ExplicitApiMode.Strict
androidExtension.sourceSets.register("main")

project.evaluate()

Expand All @@ -240,6 +244,7 @@ class KotlinCompileApiTest {
ExplicitApiMode.Strict,
(androidTask.get() as KotlinCompile).explicitApiMode.get()
)
assertNotNull(androidExtension.sourceSets.findByName("main"))
}

@Test
Expand Down

0 comments on commit 1ded9a4

Please sign in to comment.