All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.dropbox.gradle.plugins.dependencyguard.internal.DependencyVisitor.kt Maven / Gradle / Ivy

Go to download

A Gradle plugin that helps protect against unintentional transitive dependency changes.

The newest version!
package com.dropbox.gradle.plugins.dependencyguard.internal

import com.dropbox.gradle.plugins.dependencyguard.models.ArtifactDependency
import com.dropbox.gradle.plugins.dependencyguard.models.Dependency
import com.dropbox.gradle.plugins.dependencyguard.models.ModuleDependency
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.artifacts.result.ResolvedComponentResult
import org.gradle.api.artifacts.result.ResolvedDependencyResult

internal object DependencyVisitor {

    private fun ResolvedDependencyResult.toDep(): Dependency? {
        return when (val componentIdentifier = selected.id) {
            is ProjectComponentIdentifier -> ModuleDependency(
                path = componentIdentifier.projectPath,
            )
            is ModuleComponentIdentifier -> {
                ArtifactDependency(
                    group = componentIdentifier.group,
                    artifact = componentIdentifier.module,
                    version = componentIdentifier.version,
                )
            }
            else -> {
                null
            }
        }
    }

    private fun visit(
        reportData: MutableList,
        resolvedDependencyResults: Collection
    ) {
        for (resolvedDependencyResult: ResolvedDependencyResult in resolvedDependencyResults) {
            resolvedDependencyResult.toDep()
                ?.let { dep: Dependency ->
                    if (!reportData.contains(dep)) {
                        reportData.add(dep)
                        visit(
                            reportData = reportData,
                            resolvedDependencyResults = resolvedDependencyResult
                                .selected
                                .dependencies
                                .filterIsInstance()
                        )
                    }
                }
        }
    }

    fun traverseComponentDependencies(resolvedComponentResult: ResolvedComponentResult): List {
        val firstLevelDependencies = resolvedComponentResult
            .dependencies
            .filterIsInstance()

        val dependencies = mutableListOf()
        visit(dependencies, firstLevelDependencies)
        return dependencies
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy