Skip to content

Commit 729fc24

Browse files
authored
Fix AbstractKotlinCompile.ownModuleName usage (#2567)
* Fix usage of deprecated method on creating a standalone KotlinJvmCompile task * Use compilerOptions DSL for standalone KotlinJvmCompile task * Add a workaround for AbstractKotlinCompile.ownModuleName property usage The workaround tried to configure it only when it is available as via KT-64504 it will be removed in Kotlin 2.0.0 release.
1 parent 54840e0 commit 729fc24

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

buildSrc/src/main/kotlin/Java9Modularity.kt

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ import org.jetbrains.kotlin.gradle.plugin.*
1818
import org.jetbrains.kotlin.gradle.plugin.mpp.*
1919
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.*
2020
import org.jetbrains.kotlin.gradle.targets.jvm.*
21+
import org.jetbrains.kotlin.gradle.tasks.*
2122
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2223
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
24+
import org.jetbrains.kotlin.tooling.core.*
2325
import java.io.*
26+
import kotlin.reflect.*
27+
import kotlin.reflect.full.*
2428

2529
object Java9Modularity {
2630

@@ -108,12 +112,14 @@ object Java9Modularity {
108112
compileTask: KotlinCompile,
109113
sourceFile: File
110114
): TaskProvider<out KotlinJvmCompile> {
111-
apply<KotlinBaseApiPlugin>()
115+
apply<KotlinApiPlugin>()
112116
val verifyModuleTaskName = "verify${compileTask.name.removePrefix("compile").capitalize()}Module"
113117
// work-around for https://youtrack.jetbrains.com/issue/KT-60542
114-
val verifyModuleTask = plugins
115-
.findPlugin(KotlinBaseApiPlugin::class)!!
116-
.registerKotlinJvmCompileTask(verifyModuleTaskName)
118+
val kotlinApiPlugin = plugins.getPlugin(KotlinApiPlugin::class)
119+
val verifyModuleTask = kotlinApiPlugin.registerKotlinJvmCompileTask(
120+
verifyModuleTaskName,
121+
compileTask.compilerOptions.moduleName.get()
122+
)
117123
verifyModuleTask {
118124
group = VERIFICATION_GROUP
119125
description = "Verify Kotlin sources for JPMS problems"
@@ -126,13 +132,14 @@ object Java9Modularity {
126132
source(sourceFile)
127133
destinationDirectory.set(temporaryDir)
128134
multiPlatformEnabled.set(compileTask.multiPlatformEnabled)
129-
kotlinOptions {
130-
moduleName = compileTask.kotlinOptions.moduleName
131-
jvmTarget = "9"
135+
compilerOptions {
136+
jvmTarget.set(JvmTarget.JVM_9)
132137
// To support LV override when set in aggregate builds
133-
languageVersion = compileTask.kotlinOptions.languageVersion
134-
freeCompilerArgs += listOf("-Xjdk-release=9", "-Xsuppress-version-warnings", "-Xexpect-actual-classes")
135-
options.optIn.addAll(compileTask.kotlinOptions.options.optIn)
138+
languageVersion.set(compileTask.compilerOptions.languageVersion)
139+
freeCompilerArgs.addAll(
140+
listOf("-Xjdk-release=9", "-Xsuppress-version-warnings", "-Xexpect-actual-classes")
141+
)
142+
optIn.addAll(compileTask.kotlinOptions.options.optIn)
136143
}
137144
// work-around for https://youtrack.jetbrains.com/issue/KT-60583
138145
inputs.files(
@@ -145,12 +152,19 @@ object Java9Modularity {
145152
}
146153
).withPropertyName("moduleInfosOfLibraries")
147154
this as KotlinCompile
148-
// part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
149-
@Suppress("DEPRECATION")
150-
ownModuleName.set(compileTask.kotlinOptions.moduleName)
151-
// part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
152-
@Suppress("INVISIBLE_MEMBER")
153-
commonSourceSet.from(compileTask.commonSourceSet)
155+
val kotlinPluginVersion = KotlinToolingVersion(kotlinApiPlugin.pluginVersion)
156+
if (kotlinPluginVersion <= KotlinToolingVersion("1.9.255")) {
157+
// part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
158+
@Suppress("UNCHECKED_CAST")
159+
val ownModuleNameProp = (this::class.superclasses.first() as KClass<AbstractKotlinCompile<*>>)
160+
.declaredMemberProperties
161+
.find { it.name == "ownModuleName" }
162+
?.get(this) as? Property<String>
163+
ownModuleNameProp?.set(compileTask.kotlinOptions.moduleName)
164+
// part of work-around for https://youtrack.jetbrains.com/issue/KT-60541
165+
@Suppress("INVISIBLE_MEMBER")
166+
commonSourceSet.from(compileTask.commonSourceSet)
167+
}
154168
@OptIn(InternalKotlinGradlePluginApi::class)
155169
apply {
156170
multiplatformStructure.refinesEdges.set(compileTask.multiplatformStructure.refinesEdges)

0 commit comments

Comments
 (0)