diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/ModuleType.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/ModuleType.kt index 0f8aa04..cfffff9 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/ModuleType.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/ModuleType.kt @@ -1,14 +1,16 @@ package dev.iurysouza.modulegraph -import java.io.Serializable +import java.io.Serializable as JavaSerializable +import kotlinx.serialization.Serializable import org.gradle.api.Project import org.gradle.api.artifacts.ExternalModuleDependency @Suppress("UnusedPrivateMember") +@Serializable sealed class ModuleType( open val id: String, open val color: String, -) : Serializable { +) : JavaSerializable { data class Unknown(override val color: String = "#676767") : ModuleType("unknown", color) data class Custom( diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt index d38c9f2..ed874a2 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/CreateModuleGraphTask.kt @@ -8,14 +8,24 @@ import dev.iurysouza.modulegraph.Theme import dev.iurysouza.modulegraph.model.GraphConfig import dev.iurysouza.modulegraph.model.GraphParseResult import org.gradle.api.DefaultTask +import org.gradle.api.file.Directory +import org.gradle.api.file.DirectoryProperty import org.gradle.api.logging.LogLevel import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.Optional +import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.options.Option +/** + * The gradle task for this plugin, + * which holds all the configuration data that needs to be provided for the work to happen. + * + * All the properties defined in this task need to be Serializable - + * this is a requirement for the Gradle Configuration Cache to work. + */ abstract class CreateModuleGraphTask : DefaultTask() { @get:Input @@ -103,6 +113,10 @@ abstract class CreateModuleGraphTask : DefaultTask() { @get:Option(option = "graphModels", description = "The produced graph models") internal abstract val graphModels: ListProperty + @get:OutputDirectory + @get:Option(option = "projectDirectory", description = "The root project directory") + internal abstract val projectDirectory: DirectoryProperty + init { group = "Reporting" description = "Creates a mermaid dependency graph for the project" @@ -118,7 +132,8 @@ abstract class CreateModuleGraphTask : DefaultTask() { val config = result.config val mermaidGraph = Mermaid.generateGraph(result) - val readmeFile = project.layout.projectDirectory.file(config.readmePath) + val root = projectDirectory.orNull ?: error("projectDirectory is not set") + val readmeFile = root.file(config.readmePath) ReadmeWriter.appendOrOverwriteGraph( mermaidGraph = mermaidGraph, diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt index adcbec5..c35875d 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/Module.kt @@ -1,13 +1,15 @@ package dev.iurysouza.modulegraph.gradle import dev.iurysouza.modulegraph.ModuleType -import java.io.Serializable +import java.io.Serializable as JavaSerializable +import kotlinx.serialization.Serializable +@Serializable internal data class Module( val path: String, val configName: String? = null, val type: ModuleType = ModuleType.Java(), -) : Serializable { +) : JavaSerializable { companion object { private const val serialVersionUID: Long = 46465844 } diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/ModuleGraphPlugin.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/ModuleGraphPlugin.kt index 61c5a5d..39ed89e 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/ModuleGraphPlugin.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/gradle/ModuleGraphPlugin.kt @@ -34,6 +34,7 @@ open class ModuleGraphPlugin : Plugin { task.setStyleByModuleType.set(extension.setStyleByModuleType) task.rootModulesRegex.set(extension.rootModulesRegex) task.graphConfigs.set(extension.graphConfigs) + task.projectDirectory.set(project.layout.projectDirectory) val primaryGraphConfig = getPrimaryGraphConfig(task) val additionalGraphConfigs = task.graphConfigs.getOrElse(emptyList()) diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt index 8c4c2ad..dc8e0d1 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphConfig.kt @@ -3,10 +3,13 @@ package dev.iurysouza.modulegraph.model import dev.iurysouza.modulegraph.LinkText import dev.iurysouza.modulegraph.Orientation import dev.iurysouza.modulegraph.Theme +import java.io.Serializable as JavaSerializable +import kotlinx.serialization.Serializable /** * The config for a single graph to be made. */ +@Serializable data class GraphConfig( /* Output parameters */ @@ -69,7 +72,7 @@ data class GraphConfig( * the generated graph will only include dependencies (direct and transitive) of root modules. */ val rootModulesRegex: String?, -) { +) : JavaSerializable { class Builder( /** @see [GraphConfig.readmePath] */ diff --git a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt index 8d8f12d..d228991 100644 --- a/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt +++ b/plugin-build/modulegraph/src/main/kotlin/dev/iurysouza/modulegraph/model/GraphParseResult.kt @@ -1,10 +1,13 @@ package dev.iurysouza.modulegraph.model import dev.iurysouza.modulegraph.model.alias.ProjectGraph +import kotlinx.serialization.Serializable +import java.io.Serializable as JavaSerializable +@Serializable internal data class GraphParseResult( /** The output graph model after parsing */ val graph: ProjectGraph, /** The original config provided used to produce [graph] */ val config: GraphConfig, -) +) : JavaSerializable