com.autonomousapps.advice.ReasonableDependency.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.advice
import com.autonomousapps.internal.Component
import com.autonomousapps.internal.KtFile
/**
* A sort of exploded [Dependency]; it includes a list of all the facilities it provides. It can be
* "reasoned" about.
*/
data class ReasonableDependency(
val dependency: Dependency,
val isTransitive: Boolean,
val isCompileOnly: Boolean,
val isSecurityProvider: Boolean,
// TODO these three have a lot of overlap. Model it somehow?
val publicClasses: Set?,
val usedTransitiveClasses: Set?,
val classes: Set,
val constantFields: Map>,
val ktFiles: Set,
val providesInlineMembers: Boolean?,
val providesConstants: Boolean?,
val providesGeneralImports: Boolean?,
val providesManifestComponents: Boolean?,
val providesResByRes: Boolean?,
val providesResBySource: Boolean?,
val providesNativeLibs: Boolean?
) : Comparable {
override fun compareTo(other: ReasonableDependency): Int = dependency.compareTo(other.dependency)
class Builder(val dependency: Dependency) {
var variants: Set = emptySet()
var component: Component? = null
var usedTransitiveClasses: Set? = null
var publicClasses: Set? = null
var providesInlineMembers: Boolean? = null
var providesConstants: Boolean? = null
var providesGeneralImports: Boolean? = null
var providesManifestComponents: Boolean? = null
var providesResByRes: Boolean? = null
var providesResBySource: Boolean? = null
var providesNativeLibs: Boolean? = null
fun build(): ReasonableDependency {
val component = component ?: error("component required")
val constantFields = component.constantFields.filter { (_, value) ->
value.isNotEmpty()
}
return ReasonableDependency(
dependency = dependency,
isTransitive = component.isTransitive,
isCompileOnly = component.isCompileOnlyAnnotations,
isSecurityProvider = component.isSecurityProvider,
publicClasses = publicClasses,
usedTransitiveClasses = usedTransitiveClasses,
classes = component.classes,
constantFields = constantFields,
ktFiles = component.ktFiles.toSet(),
providesInlineMembers = providesInlineMembers,
providesConstants = providesConstants,
providesGeneralImports = providesGeneralImports,
providesManifestComponents = providesManifestComponents,
providesResByRes = providesResByRes,
providesResBySource = providesResBySource,
providesNativeLibs = providesNativeLibs
)
}
}
}