Skip to content

Commit 49f7779

Browse files
committed
fix: make GraphViewTask sensitive to new transitive project edges
1 parent be28d26 commit 49f7779

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

src/main/kotlin/com/autonomousapps/tasks/GraphViewTask.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.autonomousapps.internal.graph.GraphWriter
88
import com.autonomousapps.internal.utils.bufferWriteJson
99
import com.autonomousapps.internal.utils.getAndDelete
1010
import com.autonomousapps.internal.utils.mapNotNullToSet
11+
import com.autonomousapps.internal.utils.mapToOrderedSet
1112
import com.autonomousapps.internal.utils.toCoordinates
1213
import com.autonomousapps.model.Coordinates
1314
import com.autonomousapps.model.CoordinatesContainer
@@ -18,6 +19,7 @@ import org.gradle.api.Project
1819
import org.gradle.api.artifacts.Configuration
1920
import org.gradle.api.artifacts.FileCollectionDependency
2021
import org.gradle.api.artifacts.result.ResolvedComponentResult
22+
import org.gradle.api.artifacts.result.ResolvedDependencyResult
2123
import org.gradle.api.file.ConfigurableFileCollection
2224
import org.gradle.api.file.RegularFileProperty
2325
import org.gradle.api.provider.Property
@@ -65,6 +67,14 @@ public abstract class GraphViewTask : DefaultTask() {
6567
@get:InputFile
6668
public abstract val declarations: RegularFileProperty
6769

70+
/** Tracks resolved components so project dependency changes invalidate this task. */
71+
@get:Input
72+
public abstract val compileClasspathComponentIds: SetProperty<String>
73+
74+
/** See [compileClasspathComponentIds]. */
75+
@get:Input
76+
public abstract val runtimeClasspathComponentIds: SetProperty<String>
77+
6878
/** Needed to make sure task gives the same result if the build configuration in a composite changed between runs. */
6979
@get:Input
7080
public abstract val buildPath: Property<String>
@@ -118,6 +128,9 @@ public abstract class GraphViewTask : DefaultTask() {
118128
.mapNotNullToSet { it.toCoordinates() }
119129
})
120130

131+
compileClasspathComponentIds.set(compileClasspathResult.map { it.allComponentIds() })
132+
runtimeClasspathComponentIds.set(runtimeClasspathResult.map { it.allComponentIds() })
133+
121134
compileFiles.setFrom(project.provider { compileClasspath.externalArtifactsFor(jarAttr).artifactFiles })
122135
runtimeFiles.setFrom(project.provider { runtimeClasspath.externalArtifactsFor(jarAttr).artifactFiles })
123136
}
@@ -153,3 +166,21 @@ public abstract class GraphViewTask : DefaultTask() {
153166
outputRuntimeDot.writeText(graphWriter.toDot(runtimeGraph))
154167
}
155168
}
169+
170+
private fun ResolvedComponentResult.allComponentIds(): Set<String> {
171+
val visited = mutableSetOf<ResolvedComponentResult>()
172+
val queue = ArrayDeque<ResolvedComponentResult>()
173+
queue.add(this)
174+
175+
while (queue.isNotEmpty()) {
176+
val node = queue.removeFirst()
177+
if (!visited.add(node)) {
178+
continue
179+
}
180+
node.dependencies.asSequence()
181+
.filterIsInstance<ResolvedDependencyResult>()
182+
.forEach { queue.add(it.selected) }
183+
}
184+
185+
return visited.mapToOrderedSet { it.id.displayName }
186+
}

0 commit comments

Comments
 (0)