buildSrc/src/main/kotlin/VersionAlignment.kt
author Da Risk <da_risk@geekorum.com>
Fri, 08 May 2020 21:33:19 -0400
changeset 1 831cffa9c991
child 10 9aad34f43f71
permissions -rw-r--r--
source import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     1
package com.geekorum.build
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     2
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     3
import org.gradle.api.artifacts.ComponentMetadataContext
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     4
import org.gradle.api.artifacts.ComponentMetadataRule
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     5
import org.gradle.api.artifacts.Dependency
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     6
import org.gradle.api.artifacts.dsl.ComponentMetadataHandler
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     7
import org.gradle.api.artifacts.dsl.DependencyHandler
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     8
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     9
private val componentsPlatform = mutableMapOf<ComponentMetadataHandler, MutableSet<String>>()
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    10
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    11
fun DependencyHandler.createComponentsPlatforms() {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    12
    components.apply {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    13
        getOrCreatePlatform(DaggerPlatform)
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    14
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    15
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    16
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    17
private fun ComponentMetadataHandler.getOrCreatePlatform(platformFactory: PlatformFactory): String {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    18
    val componentsSet = componentsPlatform.getOrPut(this) { mutableSetOf() }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    19
    if (!componentsSet.contains(platformFactory.platformName)) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    20
        componentsSet.add(platformFactory.createPlatform(this))
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    21
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    22
    return platformFactory.platformName
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    23
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    24
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    25
internal class DaggerPlatform {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    26
    companion object : PlatformFactory("com.google.dagger:dagger-platform",
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    27
        AlignmentRule::class.java)
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    28
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    29
    open class AlignmentRule : SameGroupAlignmentRule(platformName, "com.google.dagger")
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    30
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    31
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    32
fun DependencyHandler.enforcedDaggerPlatform(version: String): Dependency {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    33
    return enforcedPlatform("${components.getOrCreatePlatform(DaggerPlatform)}:$version")
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    34
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    35
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    36
open class PlatformFactory(
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    37
    internal val platformName: String,
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    38
    private val alignmentRule: Class<out ComponentMetadataRule>
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    39
) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
    fun createPlatform(components: ComponentMetadataHandler): String {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    41
        components.all(alignmentRule)
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    42
        return platformName
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    43
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    44
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    45
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    46
internal open class SameGroupAlignmentRule(
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    47
    private val platformName: String,
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    48
    private val group: String
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    49
) : ComponentMetadataRule {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    51
    override fun execute(ctx: ComponentMetadataContext) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    52
        ctx.details.run {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    53
            if (id.group == group) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    54
                belongsTo("$platformName:${id.version}")
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    55
            }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    56
        }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    57
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    59
}