Avoid iterating jar inputs in inspectClassesForKotlinIC task
Jar's inputs can contain zipTrees in case of fat jars,
which can cause slow build
(Gradle unpacks them into temporary dir; that can be slow)
#KT-24956 fixed
This commit is contained in:
+1
@@ -387,6 +387,7 @@ internal abstract class AbstractKotlinPlugin(
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
val inspectTask = project.tasks.create("inspectClassesForKotlinIC", InspectClassesForMultiModuleIC::class.java)
|
val inspectTask = project.tasks.create("inspectClassesForKotlinIC", InspectClassesForMultiModuleIC::class.java)
|
||||||
|
inspectTask.sourceSetName = SourceSet.MAIN_SOURCE_SET_NAME
|
||||||
inspectTask.jarTask = jarTask
|
inspectTask.jarTask = jarTask
|
||||||
inspectTask.dependsOn(classesTask)
|
inspectTask.dependsOn(classesTask)
|
||||||
jarTask.dependsOn(inspectTask)
|
jarTask.dependsOn(inspectTask)
|
||||||
|
|||||||
+8
-4
@@ -7,9 +7,9 @@ package org.jetbrains.kotlin.gradle.tasks
|
|||||||
|
|
||||||
import org.gradle.api.DefaultTask
|
import org.gradle.api.DefaultTask
|
||||||
import org.gradle.api.file.FileCollection
|
import org.gradle.api.file.FileCollection
|
||||||
|
import org.gradle.api.plugins.JavaPluginConvention
|
||||||
import org.gradle.api.tasks.*
|
import org.gradle.api.tasks.*
|
||||||
import org.gradle.jvm.tasks.Jar
|
import org.gradle.jvm.tasks.Jar
|
||||||
import org.jetbrains.kotlin.gradle.utils.inputsCompatible
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.isClassFile
|
import org.jetbrains.kotlin.gradle.utils.isClassFile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
@@ -17,6 +17,9 @@ internal open class InspectClassesForMultiModuleIC : DefaultTask() {
|
|||||||
@get:Internal
|
@get:Internal
|
||||||
lateinit var jarTask: Jar
|
lateinit var jarTask: Jar
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
lateinit var sourceSetName: String
|
||||||
|
|
||||||
@Suppress("MemberVisibilityCanBePrivate")
|
@Suppress("MemberVisibilityCanBePrivate")
|
||||||
@get:OutputFile
|
@get:OutputFile
|
||||||
internal val classesListFile: File
|
internal val classesListFile: File
|
||||||
@@ -25,7 +28,9 @@ internal open class InspectClassesForMultiModuleIC : DefaultTask() {
|
|||||||
@Suppress("MemberVisibilityCanBePrivate")
|
@Suppress("MemberVisibilityCanBePrivate")
|
||||||
@get:InputFiles
|
@get:InputFiles
|
||||||
internal val classFiles: FileCollection
|
internal val classFiles: FileCollection
|
||||||
get() = jarTask.inputsCompatible.files.filter { it.isClassFile() }
|
get() = project.convention.findPlugin(JavaPluginConvention::class.java)?.let {
|
||||||
|
it.sourceSets.findByName(sourceSetName)?.output?.asFileTree?.filter { it.isClassFile() }
|
||||||
|
} ?: project.files()
|
||||||
|
|
||||||
@get:Input
|
@get:Input
|
||||||
internal val archivePath: String
|
internal val archivePath: String
|
||||||
@@ -34,8 +39,7 @@ internal open class InspectClassesForMultiModuleIC : DefaultTask() {
|
|||||||
@TaskAction
|
@TaskAction
|
||||||
fun run() {
|
fun run() {
|
||||||
classesListFile.parentFile.mkdirs()
|
classesListFile.parentFile.mkdirs()
|
||||||
val paths = classFiles.map { it.canonicalPath }.sorted()
|
val text = classFiles.map { it.absolutePath }.sorted().joinToString(File.pathSeparator)
|
||||||
val text = paths.joinToString(File.pathSeparator)
|
|
||||||
classesListFile.writeText(text)
|
classesListFile.writeText(text)
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user