com.autonomousapps.tasks.ByteCodeSourceExploderTask.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dependency-analysis-gradle-plugin Show documentation
Show all versions of dependency-analysis-gradle-plugin Show documentation
Analyzes dependency usage in Android and JVM projects
package com.autonomousapps.tasks
import com.autonomousapps.TASK_GROUP_DEP_INTERNAL
import com.autonomousapps.internal.ClassFilesParser
import com.autonomousapps.internal.utils.bufferWriteJsonSet
import com.autonomousapps.internal.utils.filterToClassFiles
import com.autonomousapps.internal.utils.getAndDelete
import org.gradle.api.DefaultTask
import org.gradle.api.file.ConfigurableFileCollection
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.ProjectLayout
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.*
import org.gradle.workers.WorkAction
import org.gradle.workers.WorkParameters
import org.gradle.workers.WorkerExecutor
import javax.inject.Inject
// TODO no need for this hierarchy anymore
abstract class ByteCodeSourceExploderTask : DefaultTask() {
@get:OutputFile
abstract val output: RegularFileProperty
}
@CacheableTask
abstract class ClassListExploderTask @Inject constructor(
private val workerExecutor: WorkerExecutor,
private val layout: ProjectLayout
) : ByteCodeSourceExploderTask() {
init {
group = TASK_GROUP_DEP_INTERNAL
description = "Produces a report of all classes referenced by a given set of class files"
}
/** Class files generated by any JVM source (Java, Kotlin, Groovy, etc.). May be empty. */
@get:Classpath
@get:InputFiles
abstract val classes: ConfigurableFileCollection
/** Class files generated by Kotlin source. May be empty. Android-only. */
@get:Classpath
@get:InputFiles
abstract val kotlinClasses: ConfigurableFileCollection
/** Class files generated by Java source. May be empty. Android-only. */
@get:Classpath
@get:InputFiles
abstract val javaClasses: ConfigurableFileCollection
@TaskAction fun action() {
workerExecutor.noIsolation().submit(ClassListExploderWorkAction::class.java) {
classFiles.setFrom(
classes.asFileTree
.plus(javaClasses.asFileTree)
.plus(kotlinClasses.asFileTree)
.filterToClassFiles()
.files
)
buildDir.set(layout.buildDirectory)
output.set([email protected])
}
}
interface ClassListExploderParameters : WorkParameters {
val classFiles: ConfigurableFileCollection
val buildDir: DirectoryProperty
val output: RegularFileProperty
}
abstract class ClassListExploderWorkAction : WorkAction {
override fun execute() {
val output = parameters.output.getAndDelete()
val usedClasses = ClassFilesParser(
classes = parameters.classFiles.asFileTree.files,
buildDir = parameters.buildDir.get().asFile
).analyze()
output.bufferWriteJsonSet(usedClasses)
}
}
}