@@ -16,18 +16,23 @@ import org.jetbrains.kotlin.gradle.*
1616import org.jetbrains.kotlin.gradle.dsl.*
1717import org.jetbrains.kotlin.gradle.plugin.*
1818import org.jetbrains.kotlin.gradle.plugin.mpp.*
19- import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.*
2019import org.jetbrains.kotlin.gradle.targets.jvm.*
2120import org.jetbrains.kotlin.gradle.tasks.*
2221import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2322import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
24- import org.jetbrains.kotlin.gradle.utils.*
2523import org.jetbrains.kotlin.tooling.core.*
2624import java.io.*
2725import kotlin.reflect.*
2826import kotlin.reflect.full.*
2927
3028object Java9Modularity {
29+ private val KotlinProjectExtension .targets: Iterable <KotlinTarget >
30+ get() = when (this ) {
31+ is KotlinSingleTargetExtension <* > -> listOf (this .target)
32+ is KotlinMultiplatformExtension -> targets
33+ else -> error(" Unexpected 'kotlin' extension $this " )
34+ }
35+
3136
3237 @JvmStatic
3338 @JvmOverloads
@@ -50,16 +55,19 @@ object Java9Modularity {
5055 }
5156
5257 target.compilations.forEach { compilation ->
53- val compileKotlinTask = compilation.compileKotlinTask as KotlinCompile
58+ @Suppress(" UNCHECKED_CAST" )
59+ val compileKotlinTask = compilation.compileTaskProvider as TaskProvider <KotlinCompile >
5460 val defaultSourceSet = compilation.defaultSourceSet
5561
5662 // derive the names of the source set and compile module task
5763 val sourceSetName = defaultSourceSet.name + " Module"
5864
5965 kotlin.sourceSets.create(sourceSetName) {
6066 val sourceFile = this .kotlin.find { it.name == " module-info.java" }
61- val targetDirectory = compileKotlinTask.destinationDirectory.map {
62- it.dir(" ../${it.asFile.name} Module" )
67+ val targetDirectory = compileKotlinTask.flatMap { task ->
68+ task.destinationDirectory.map {
69+ it.dir(" ../${it.asFile.name} Module" )
70+ }
6371 }
6472
6573 // only configure the compilation if necessary
@@ -110,7 +118,7 @@ object Java9Modularity {
110118 * but it currently won't compile to a module-info.class file.
111119 */
112120 private fun Project.registerVerifyModuleTask (
113- compileTask : KotlinCompile ,
121+ compileTask : TaskProvider < KotlinCompile > ,
114122 sourceFile : File
115123 ): TaskProvider <out KotlinJvmCompile > {
116124 apply<KotlinApiPlugin >()
@@ -120,28 +128,28 @@ object Java9Modularity {
120128 val kotlinApiPlugin = plugins.getPlugin(KotlinApiPlugin ::class )
121129 val verifyModuleTask = kotlinApiPlugin.registerKotlinJvmCompileTask(
122130 verifyModuleTaskName,
123- compileTask.compilerOptions.moduleName.get()
131+ compilerOptions = compileTask.get().compilerOptions,
132+ explicitApiMode = provider { ExplicitApiMode .Disabled }
124133 )
125134 verifyModuleTask {
126135 group = VERIFICATION_GROUP
127136 description = " Verify Kotlin sources for JPMS problems"
128- libraries.from(compileTask.libraries)
129- source(compileTask.sources)
130- source(compileTask.javaSources)
137+ libraries.from(compileTask.map { it. libraries } )
138+ source(compileTask.map { it. sources } )
139+ source(compileTask.map { it. javaSources } )
131140 // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
132- @Suppress(" INVISIBLE_MEMBER" )
133- source(compileTask.scriptSources)
141+ source(compileTask.map {
142+ @Suppress(" INVISIBLE_MEMBER" )
143+ it.scriptSources
144+ })
134145 source(sourceFile)
135146 destinationDirectory.set(temporaryDir)
136- multiPlatformEnabled.set(compileTask.multiPlatformEnabled)
147+ multiPlatformEnabled.set(compileTask.get(). multiPlatformEnabled)
137148 compilerOptions {
138149 jvmTarget.set(JvmTarget .JVM_9 )
139- // To support LV override when set in aggregate builds
140- languageVersion.set(compileTask.compilerOptions.languageVersion)
141150 freeCompilerArgs.addAll(
142151 listOf (" -Xjdk-release=9" , " -Xsuppress-version-warnings" , " -Xexpect-actual-classes" )
143152 )
144- optIn.addAll(compileTask.compilerOptions.optIn)
145153 }
146154 // work-around for https://youtrack.jetbrains.com/issue/KT-60583
147155 inputs.files(
@@ -162,18 +170,21 @@ object Java9Modularity {
162170 .declaredMemberProperties
163171 .find { it.name == " ownModuleName" }
164172 ?.get(this ) as ? Property <String >
165- ownModuleNameProp?.set(compileTask.compilerOptions.moduleName)
173+ ownModuleNameProp?.set(compileTask.flatMap { it. compilerOptions.moduleName} )
166174 }
167175
168176 val taskKotlinLanguageVersion = compilerOptions.languageVersion.orElse(KotlinVersion .DEFAULT )
169177 @OptIn(InternalKotlinGradlePluginApi ::class )
170178 if (taskKotlinLanguageVersion.get() < KotlinVersion .KOTLIN_2_0 ) {
171179 // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
172180 @Suppress(" INVISIBLE_MEMBER" )
173- commonSourceSet.from(compileTask.commonSourceSet)
181+ commonSourceSet.from(compileTask.map {
182+ @Suppress(" INVISIBLE_MEMBER" )
183+ it.commonSourceSet
184+ })
174185 } else {
175- multiplatformStructure.refinesEdges.set(compileTask.multiplatformStructure.refinesEdges)
176- multiplatformStructure.fragments.set(compileTask.multiplatformStructure.fragments)
186+ multiplatformStructure.refinesEdges.set(compileTask.flatMap { it. multiplatformStructure.refinesEdges } )
187+ multiplatformStructure.fragments.set(compileTask.flatMap { it. multiplatformStructure.fragments } )
177188 }
178189 // part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
179190 // and work-around for https://youtrack.jetbrains.com/issue/KT-60582
@@ -183,7 +194,7 @@ object Java9Modularity {
183194 }
184195
185196 private fun Project.registerCompileModuleTask (
186- compileTask : KotlinCompile ,
197+ compileTask : TaskProvider < KotlinCompile > ,
187198 sourceFile : File ,
188199 targetDirectory : Provider <out Directory >
189200 ) = tasks.register(" ${compileTask.name} Module" , JavaCompile ::class ) {
@@ -203,10 +214,12 @@ object Java9Modularity {
203214
204215 options.compilerArgumentProviders.add(object : CommandLineArgumentProvider {
205216 @get:CompileClasspath
206- val compileClasspath = compileTask.libraries
217+ val compileClasspath = objects.fileCollection().from(
218+ compileTask.map { it.libraries }
219+ )
207220
208221 @get:CompileClasspath
209- val compiledClasses = compileTask.destinationDirectory
222+ val compiledClasses = compileTask.flatMap { it. destinationDirectory }
210223
211224 @get:Input
212225 val moduleName = sourceFile
0 commit comments