Skip to content

Commit fb6555d

Browse files
committed
Configure jvm transformation task via multiplatform configuration function
1 parent c201c53 commit fb6555d

File tree

2 files changed

+11
-67
lines changed

2 files changed

+11
-67
lines changed

atomicfu-gradle-plugin/src/main/kotlin/kotlinx/atomicfu/plugin/gradle/AtomicFUGradlePlugin.kt

Lines changed: 7 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -70,19 +70,7 @@ private fun Project.configureDependencies() {
7070
private fun Project.configureTasks() {
7171
val config = config
7272
withPluginWhenEvaluated("kotlin") {
73-
if (config.transformJvm) {
74-
// skip transformation task if ir transformation is enabled
75-
if (rootProject.getBooleanProperty(ENABLE_JVM_IR_TRANSFORMATION)) return@withPluginWhenEvaluated
76-
configureJvmTransformation("compileTestKotlin") { sourceSet, transformedDir, originalDir ->
77-
createJvmTransformTask(sourceSet).configureJvmTask(
78-
sourceSet.compileClasspath,
79-
sourceSet.classesTaskName,
80-
transformedDir,
81-
originalDir,
82-
config
83-
)
84-
}
85-
}
73+
if (config.transformJvm) configureJvmTransformation()
8674
}
8775
withPluginWhenEvaluated("org.jetbrains.kotlin.js") {
8876
if (config.transformJs) configureJsTransformation()
@@ -182,12 +170,6 @@ private fun String.compilationNameToType(): CompilationType? = when (this) {
182170
else -> null
183171
}
184172

185-
private fun String.sourceSetNameToType(): CompilationType? = when (this) {
186-
SourceSet.MAIN_SOURCE_SET_NAME -> CompilationType.MAIN
187-
SourceSet.TEST_SOURCE_SET_NAME -> CompilationType.TEST
188-
else -> null
189-
}
190-
191173
private val Project.config: AtomicFUPluginExtension
192174
get() = extensions.findByName(EXTENSION_NAME) as? AtomicFUPluginExtension ?: AtomicFUPluginExtension(null)
193175

@@ -235,6 +217,12 @@ private fun KotlinCompile<*>.setFriendPaths(friendPathsFileCollection: FileColle
235217
}
236218
}
237219

220+
fun Project.configureJvmTransformation() {
221+
if (kotlinExtension is KotlinJvmProjectExtension || kotlinExtension is KotlinAndroidProjectExtension) {
222+
configureTransformationForTarget((kotlinExtension as KotlinSingleTargetExtension<*>).target)
223+
}
224+
}
225+
238226
fun Project.configureJsTransformation() =
239227
configureTransformationForTarget((kotlinExtension as KotlinJsProjectExtension).js())
240228

@@ -391,50 +379,6 @@ fun Project.configureMultiplatformPluginDependencies(version: String) {
391379
}
392380
}
393381

394-
fun Project.configureJvmTransformation(
395-
testTaskName: String,
396-
createTransformTask: (sourceSet: SourceSet, transformedDir: File, originalDir: FileCollection) -> Task
397-
) {
398-
val config = config
399-
sourceSets.all { sourceSet ->
400-
val compilationType = sourceSet.name.sourceSetNameToType()
401-
?: return@all // skip unknown types
402-
val classesDirs = (sourceSet.output.classesDirs as ConfigurableFileCollection).from as Collection<Any>
403-
// make copy of original classes directory
404-
val originalClassesDirs: FileCollection = project.files(classesDirs.toTypedArray()).filter { it.exists() }
405-
(sourceSet as ExtensionAware).extensions.add(ORIGINAL_DIR_NAME, originalClassesDirs)
406-
val transformedClassesDir =
407-
project.buildDir.resolve("classes/atomicfu/${sourceSet.name}")
408-
// make transformedClassesDir the source path for output.classesDirs
409-
(sourceSet.output.classesDirs as ConfigurableFileCollection).setFrom(transformedClassesDir)
410-
val transformTask = createTransformTask(sourceSet, transformedClassesDir, originalClassesDirs)
411-
//now transformTask is responsible for compiling this source set into the classes directory
412-
sourceSet.compiledBy(transformTask)
413-
(tasks.findByName(sourceSet.jarTaskName) as? Jar)?.apply {
414-
setupJarManifest(multiRelease = config.jvmVariant.toJvmVariant() == JvmVariant.BOTH)
415-
}
416-
// test should compile and run against original production binaries
417-
if (compilationType == CompilationType.TEST) {
418-
val mainSourceSet = sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME)
419-
val originalMainClassesDirs = project.files(
420-
// use Callable because there is no guarantee that main is configured before test
421-
Callable { (mainSourceSet as ExtensionAware).extensions.getByName(ORIGINAL_DIR_NAME) as FileCollection }
422-
)
423-
424-
(tasks.findByName(testTaskName) as? AbstractCompile)?.run {
425-
classpath =
426-
originalMainClassesDirs + sourceSet.compileClasspath - mainSourceSet.output.classesDirs
427-
428-
(this as? KotlinCompile<*>)?.setFriendPaths(originalMainClassesDirs)
429-
}
430-
431-
// todo: fix test runtime classpath for JS?
432-
(tasks.findByName(JavaPlugin.TEST_TASK_NAME) as? Test)?.classpath =
433-
originalMainClassesDirs + sourceSet.runtimeClasspath - mainSourceSet.output.classesDirs
434-
}
435-
}
436-
}
437-
438382
fun String.toJvmVariant(): JvmVariant = enumValueOf(toUpperCase(Locale.US))
439383

440384
fun Project.createJvmTransformTask(compilation: KotlinCompilation<*>): AtomicFUTransformTask =

atomicfu-gradle-plugin/src/test/kotlin/kotlinx/atomicfu/plugin/gradle/test/JvmProjectTest.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ class JvmLegacyTransformationTest : BaseKotlinGradleTest("jvm-simple") {
3535
checkTaskOutcomes(
3636
executedTasks = listOf(
3737
":compileKotlin",
38-
":transformAtomicfuClasses",
38+
":transformAtomicfu",
3939
":compileTestKotlin",
40-
":transformTestAtomicfuClasses"
40+
":transformTestAtomicfu"
4141
),
4242
excludedTasks = emptyList()
4343
)
@@ -95,8 +95,8 @@ class JvmIrTransformationTest : BaseKotlinGradleTest("jvm-simple") {
9595
":compileTestKotlin"
9696
),
9797
excludedTasks = listOf(
98-
":transformAtomicfuClasses",
99-
":transformTestAtomicfuClasses"
98+
":transformAtomicfu",
99+
":transformTestAtomicfu"
100100
)
101101
)
102102

0 commit comments

Comments
 (0)