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

com.autonomousapps.advice.ReasonableDependency.kt Maven / Gradle / Ivy

There is a newer version: 2.0.2
Show newest version
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
      )
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy