Skip to content

Commit c39cad3

Browse files
authored
Output the graph to dot file for png renderig support (#6)
1 parent 1bd56fe commit c39cad3

File tree

5 files changed

+49
-5
lines changed

5 files changed

+49
-5
lines changed

cacheinvalidationindex/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ gradlePlugin {
1919
dependencies {
2020
implementation(kotlin("stdlib-jdk8"))
2121
implementation(libs.jgrapht.core)
22+
implementation(libs.jgrapht.io)
2223

2324
testImplementation(libs.junit)
2425
testImplementation(libs.truth)

cacheinvalidationindex/src/main/java/com/ivanalvarado/cacheinvalidationindex/CacheInvalidationIndexPlugin.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ivanalvarado.cacheinvalidationindex
33
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.AffectedSubgraphsImpl
44
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.BuildDagFromDependencyPairsImpl
55
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.FindDependencyPairsImpl
6+
import com.ivanalvarado.cacheinvalidationindex.writer.GraphVizWriter
67
import org.gradle.api.Plugin
78
import org.gradle.api.Project
89
import org.gradle.internal.configuration.problems.taskPathFrom
@@ -20,7 +21,8 @@ class CacheInvalidationIndexPlugin : Plugin<Project> {
2021
CacheInvalidationIndexTask::class.java,
2122
FindDependencyPairsImpl(),
2223
BuildDagFromDependencyPairsImpl(),
23-
AffectedSubgraphsImpl()
24+
AffectedSubgraphsImpl(),
25+
GraphVizWriter()
2426
)
2527
cacheInvalidationIndexTaskProvider.configure { task ->
2628
task.configurationToAnalyze.set(extension.configurationToAnalyze)

cacheinvalidationindex/src/main/java/com/ivanalvarado/cacheinvalidationindex/CacheInvalidationIndexTask.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.ivanalvarado.cacheinvalidationindex
33
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.AffectedSubgraphs
44
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.BuildDagFromDependencyPairs
55
import com.ivanalvarado.cacheinvalidationindex.domain.usecase.FindDependencyPairs
6+
import com.ivanalvarado.cacheinvalidationindex.writer.GraphVizWriter
67
import org.gradle.api.DefaultTask
78
import org.gradle.api.provider.SetProperty
89
import org.gradle.api.tasks.Input
@@ -12,7 +13,8 @@ import javax.inject.Inject
1213
abstract class CacheInvalidationIndexTask @Inject constructor(
1314
private val findDependencyPairs: FindDependencyPairs,
1415
private val buildDagFromDependencyPairs: BuildDagFromDependencyPairs,
15-
private val affectedSubgraphs: AffectedSubgraphs
16+
private val affectedSubgraphs: AffectedSubgraphs,
17+
private val graphVizWriter: GraphVizWriter
1618
) : DefaultTask() {
1719

1820
@get:Input
@@ -23,10 +25,11 @@ abstract class CacheInvalidationIndexTask @Inject constructor(
2325
val rootProject = project.rootProject
2426
val configurationsToAnalyze = configurationToAnalyze.get()
2527
val sampleList = findDependencyPairs(rootProject, configurationsToAnalyze)
26-
println("Dependency Pairs: $sampleList")
2728
val dag = buildDagFromDependencyPairs(sampleList)
28-
println("DAG: $dag")
2929
val affectedSubgraphs = affectedSubgraphs(dag)
30-
println("Affected Subgraphs: $affectedSubgraphs")
30+
graphVizWriter.writeGraph(
31+
graph = affectedSubgraphs.find { it.node == project.path }!!.affectedDag,
32+
file = project.file("build/graph.dot")
33+
)
3134
}
3235
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.ivanalvarado.cacheinvalidationindex.writer
2+
3+
import com.ivanalvarado.cacheinvalidationindex.domain.model.DependencyEdge
4+
import org.jgrapht.graph.AbstractGraph
5+
import org.jgrapht.nio.DefaultAttribute
6+
import org.jgrapht.nio.dot.DOTExporter
7+
import java.io.File
8+
9+
class GraphVizWriter {
10+
11+
fun writeGraph(graph: AbstractGraph<String, DependencyEdge>, file: File) {
12+
val exporter = DOTExporter<String, DependencyEdge> { vertex ->
13+
vertex.sanitize()
14+
}
15+
16+
exporter.setVertexAttributeProvider { vertex ->
17+
buildMap {
18+
put("label", DefaultAttribute.createAttribute(vertex))
19+
}
20+
}
21+
22+
exporter.setEdgeAttributeProvider { edge ->
23+
buildMap {
24+
put("label", DefaultAttribute.createAttribute(edge.configuration))
25+
}
26+
}
27+
28+
file.delete()
29+
exporter.exportGraph(graph, file)
30+
}
31+
32+
private fun String.sanitize(): String {
33+
return this.replace("-", "_")
34+
.replace(".", "_")
35+
.replace(":", "_")
36+
}
37+
}

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ truth = "1.4.4"
66

77
[libraries]
88
jgrapht-core = { group = "org.jgrapht", name = "jgrapht-core", version.ref = "jgrapht" }
9+
jgrapht-io = { group = "org.jgrapht", name = "jgrapht-io", version.ref = "jgrapht" }
910
junit = { group = "junit", name = "junit", version.ref = "junit" }
1011
truth = { group = "com.google.truth", name = "truth", version.ref = "truth" }
1112

0 commit comments

Comments
 (0)