buildSrc/src/main/kotlin/VersionAlignment.kt
author Da Risk <da_risk@geekorum.com>
Thu, 23 Jul 2020 15:31:52 -0400
changeset 14 222aa3a71ff1
parent 10 9aad34f43f71
child 20 5d8a0555733d
permissions -rw-r--r--
Added tag geekttrss-1.5.2 for changeset 8ba4aeeb8392
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     1
/*
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     2
 * Geekdroid is a utility library for development on the Android
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     3
 * Platform.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     4
 *
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     5
 * Copyright (C) 2017-2020 by Frederic-Charles Barthelery.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     6
 *
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     7
 * This file is part of Geekdroid.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     8
 *
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
     9
 * Geekdroid is free software: you can redistribute it and/or modify
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    10
 * it under the terms of the GNU General Public License as published by
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    11
 * the Free Software Foundation, either version 3 of the License, or
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    12
 * (at your option) any later version.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    13
 *
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    14
 * Geekdroid is distributed in the hope that it will be useful,
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    17
 * GNU General Public License for more details.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    18
 *
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    19
 * You should have received a copy of the GNU General Public License
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    20
 * along with Geekdroid.  If not, see <http://www.gnu.org/licenses/>.
9aad34f43f71 More license headers
Da Risk <da_risk@geekorum.com>
parents: 1
diff changeset
    21
 */
1
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    22
package com.geekorum.build
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
import org.gradle.api.artifacts.ComponentMetadataContext
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    25
import org.gradle.api.artifacts.ComponentMetadataRule
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    26
import org.gradle.api.artifacts.Dependency
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    27
import org.gradle.api.artifacts.dsl.ComponentMetadataHandler
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    28
import org.gradle.api.artifacts.dsl.DependencyHandler
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    29
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    30
private val componentsPlatform = mutableMapOf<ComponentMetadataHandler, MutableSet<String>>()
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.createComponentsPlatforms() {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    33
    components.apply {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    34
        getOrCreatePlatform(DaggerPlatform)
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
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    37
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    38
private fun ComponentMetadataHandler.getOrCreatePlatform(platformFactory: PlatformFactory): String {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    39
    val componentsSet = componentsPlatform.getOrPut(this) { mutableSetOf() }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
    if (!componentsSet.contains(platformFactory.platformName)) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    41
        componentsSet.add(platformFactory.createPlatform(this))
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    42
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    43
    return platformFactory.platformName
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 class DaggerPlatform {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    47
    companion object : PlatformFactory("com.google.dagger:dagger-platform",
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    48
        AlignmentRule::class.java)
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    49
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
    open class AlignmentRule : SameGroupAlignmentRule(platformName, "com.google.dagger")
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    51
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    52
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    53
fun DependencyHandler.enforcedDaggerPlatform(version: String): Dependency {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    54
    return enforcedPlatform("${components.getOrCreatePlatform(DaggerPlatform)}:$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
open class PlatformFactory(
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
    internal val platformName: String,
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    59
    private val alignmentRule: Class<out ComponentMetadataRule>
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    60
) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    61
    fun createPlatform(components: ComponentMetadataHandler): String {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    62
        components.all(alignmentRule)
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    63
        return platformName
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    64
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    65
}
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
internal open class SameGroupAlignmentRule(
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    68
    private val platformName: String,
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    69
    private val group: String
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    70
) : ComponentMetadataRule {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    71
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    72
    override fun execute(ctx: ComponentMetadataContext) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    73
        ctx.details.run {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    74
            if (id.group == group) {
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    75
                belongsTo("$platformName:${id.version}")
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    76
            }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    77
        }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    78
    }
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    79
831cffa9c991 source import
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    80
}