Skip to content

Commit adebb91

Browse files
committed
#843 setup sourceSets replaced on check target type
1 parent 862cd69 commit adebb91

4 files changed

Lines changed: 56 additions & 26 deletions

File tree

gradle.properties

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ org.gradle.caching=true
55
kotlin.code.style=official
66

77
kotlin.mpp.stability.nowarn=true
8-
kotlin.mpp.androidGradlePluginCompatibility.nowarn=true
98
kotlin.mpp.androidSourceSetLayoutVersion=2
109
kotlin.mpp.applyDefaultHierarchyTemplate=false
1110
kotlin.mpp.enableCInteropCommonization=true

resources-generator/src/main/kotlin/dev/icerock/gradle/MultiplatformResourcesPlugin.kt

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
package dev.icerock.gradle
66

77
import com.android.build.api.dsl.AndroidSourceSet
8+
import com.android.build.api.dsl.KotlinMultiplatformAndroidCompilation
9+
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
810
import com.android.build.api.extension.impl.CurrentAndroidGradlePluginVersion
911
import dev.icerock.gradle.extra.getOrRegisterGenerateResourcesTask
1012
import dev.icerock.gradle.generator.platform.android.AGP_8_11_0
@@ -21,7 +23,6 @@ import dev.icerock.gradle.generator.platform.js.setupJsKLibResources
2123
import dev.icerock.gradle.generator.platform.js.setupJsResourcesWithLinkTask
2224
import dev.icerock.gradle.tasks.GenerateMultiplatformResourcesTask
2325
import dev.icerock.gradle.utils.enableAndroidResources
24-
import dev.icerock.gradle.utils.getPlatformType
2526
import dev.icerock.gradle.utils.hasMinimalVersion
2627
import dev.icerock.gradle.utils.kotlinSourceSetsObservable
2728
import org.gradle.api.Plugin
@@ -35,12 +36,13 @@ import org.gradle.kotlin.dsl.withType
3536
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
3637
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
3738
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
38-
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
3939
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
4040
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
4141
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
42+
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
4243
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
4344
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
45+
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
4446
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
4547
import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask
4648
import org.jetbrains.kotlin.gradle.tasks.KotlinNativeCompile
@@ -109,13 +111,37 @@ open class MultiplatformResourcesPlugin : Plugin<Project> {
109111
setupJsResourcesWithLinkTask(target = target, project = project)
110112
}
111113

114+
if (target is KotlinMultiplatformAndroidLibraryTarget) {
115+
target.compilations
116+
.withType(KotlinMultiplatformAndroidCompilation::class)
117+
.configureEach { compilation ->
118+
compilation.kotlinSourceSetsObservable.forAll { sourceSet ->
119+
println("DBG: sourceSets kmpat $sourceSet")
120+
val genTaskProvider: TaskProvider<GenerateMultiplatformResourcesTask> =
121+
sourceSet.getOrRegisterGenerateResourcesTask(mrExtension)
122+
println("DBG: compilations KotlinMultiplatformAndroidCompilation: ${target.platformType.name}")
123+
genTaskProvider.configure {
124+
it.platformType.set(target.platformType.name)
125+
}
126+
127+
setupAndroidTasks(
128+
target = target,
129+
sourceSet = sourceSet,
130+
genTaskProvider = genTaskProvider,
131+
compilation = compilation
132+
)
133+
}
134+
}
135+
136+
}
137+
112138
target.compilations.configureEach { compilation ->
113139
compilation.kotlinSourceSetsObservable.forAll { sourceSet: KotlinSourceSet ->
114140
val genTaskProvider: TaskProvider<GenerateMultiplatformResourcesTask> =
115141
sourceSet.getOrRegisterGenerateResourcesTask(mrExtension)
116142

117143
genTaskProvider.configure {
118-
it.platformType.set(target.getPlatformType())
144+
it.platformType.set(target.platformType.name)
119145

120146
if (target is KotlinNativeTarget) {
121147
it.konanTarget.set(target.konanTarget.name)
@@ -199,32 +225,28 @@ open class MultiplatformResourcesPlugin : Plugin<Project> {
199225
) {
200226
sourceSet.kotlin.srcDir(genTaskProvider.map { it.outputSourcesDir })
201227

202-
when (target.platformType) {
203-
KotlinPlatformType.jvm, KotlinPlatformType.js -> {
228+
when (target) {
229+
is KotlinJsIrTarget, is KotlinJvmTarget -> {
204230
sourceSet.resources.srcDir(genTaskProvider.map { it.outputResourcesDir })
205231
sourceSet.resources.srcDir(genTaskProvider.map { it.outputAssetsDir })
206232
}
207233

208-
KotlinPlatformType.androidJvm -> {
209-
if (target is KotlinAndroidTarget) {
210-
// Fix: android sourceSets indexation in IDE
211-
// Usage of api of v2.model in AGP broken for IDE resources indexing
212-
// For correct indexing of resources set resource directory
213-
// https://issuetracker.google.com/issues/329702045
214-
@OptIn(ExperimentalKotlinGradlePluginApi::class)
215-
val androidSourceSet: AndroidSourceSet =
216-
target.project.getAndroidSourceSetOrNull(sourceSet) ?: return
217-
androidSourceSet.res.srcDir(genTaskProvider.map { it.outputResourcesDir })
218-
219-
// Assets added in variants for correct generation
220-
// see: dev.icerock.gradle.generator.platform.android
221-
// .SetupAndroidUtilsKt.addGenerationTaskDependency
222-
// androidSourceSet.assets.srcDir(genTaskProvider.map { it.outputAssetsDir })
223-
}
234+
is KotlinAndroidTarget -> {
235+
// Fix: android sourceSets indexation in IDE
236+
// Usage of api of v2.model in AGP broken for IDE resources indexing
237+
// For correct indexing of resources set resource directory
238+
// https://issuetracker.google.com/issues/329702045
239+
@OptIn(ExperimentalKotlinGradlePluginApi::class)
240+
val androidSourceSet: AndroidSourceSet =
241+
target.project.getAndroidSourceSetOrNull(sourceSet) ?: return
242+
androidSourceSet.res.srcDir(genTaskProvider.map { it.outputResourcesDir })
243+
244+
// Assets added in variants for correct generation
245+
// see: dev.icerock.gradle.generator.platform.android
246+
// .SetupAndroidUtilsKt.addGenerationTaskDependency
247+
// androidSourceSet.assets.srcDir(genTaskProvider.map { it.outputAssetsDir })
224248
}
225-
226-
KotlinPlatformType.common, KotlinPlatformType.native,
227-
KotlinPlatformType.wasm -> Unit
249+
else -> Unit
228250
}
229251
}
230252
}

resources-generator/src/main/kotlin/dev/icerock/gradle/generator/platform/android/SetupAndroidUtils.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.gradle.api.Project
2323
import org.gradle.api.tasks.TaskProvider
2424
import org.gradle.kotlin.dsl.extra
2525
import org.gradle.kotlin.dsl.findByType
26+
import org.jetbrains.kotlin.cfg.pseudocode.and
2627
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
2728
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
2829
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
@@ -102,6 +103,7 @@ internal fun setupAndroidTasks(
102103
}
103104

104105
if (androidExtension == null && target is KotlinAndroidTarget) {
106+
println("DBG: legacy code")
105107
val androidCompilation = compilation as KotlinJvmAndroidCompilation
106108

107109
// Legacy Android Plugin (com.android.library).
@@ -110,7 +112,8 @@ internal fun setupAndroidTasks(
110112
kotlinSourceSet = sourceSet
111113
) ?: throw GradleException("can't find android source set for $sourceSet")
112114

113-
// Assign the Android source set name to the task (used for skipping build-type-specific tasks).
115+
// Assign the Android source set name to the task
116+
// (used for skipping build-type-specific tasks).
114117
genTaskProvider.configure { it.androidSourceSetName.set(androidSourceSet.name) }
115118

116119
// Wire generated sources into AGP's legacy Variant API.
@@ -193,6 +196,8 @@ internal fun setupAndroidVariantsSync(project: Project) {
193196
?: error("can't find AndroidComponentsExtension")
194197

195198
componentsExtension.onVariants { variant: Variant ->
199+
println("DBG: sync ${variant.name} added in variants")
200+
196201
androidVariants.add(variant)
197202
}
198203
}
@@ -228,6 +233,7 @@ private fun variantHandler(
228233
genTaskProvider: TaskProvider<GenerateMultiplatformResourcesTask>,
229234
compilation: KotlinCompilation<*>,
230235
) {
236+
println("DBG: variantHandler ${variant.name} ${compilation.platformType} ${compilation.compilationName}")
231237
if (compilation !is KotlinMultiplatformAndroidCompilation) return
232238

233239
if (variant.name == compilation.componentName) {

resources-generator/src/main/kotlin/dev/icerock/gradle/utils/KotlinPlatformTypeUtils.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@ internal val KotlinPlatformType.isCommon: Boolean
1313

1414
internal fun KotlinTarget.getPlatformType(): String {
1515
return if (this is KotlinMultiplatformAndroidLibraryTarget) {
16+
println("DBG: getPlatformType kmpAT but ${this.name} ${this.platformType.name}")
1617
KotlinPlatformType.androidJvm.name
1718
} else {
19+
println("DBG: getPlatformType kmpAT ${this.platformType.name}")
20+
1821
platformType.name
1922
}
2023
}

0 commit comments

Comments
 (0)