Skip to content

Commit

Permalink
New dependency notation base API
Browse files Browse the repository at this point in the history
  • Loading branch information
jmfayard committed Jun 15, 2021
1 parent 60bdd3d commit 3699300
Show file tree
Hide file tree
Showing 13 changed files with 279 additions and 79 deletions.
Expand Up @@ -3,7 +3,8 @@ package de.fayard.refreshVersions.core.internal
/**
* The rules are case sensitive.
*/
internal abstract class ArtifactVersionKeyRule protected constructor(
@InternalRefreshVersionsApi
abstract class ArtifactVersionKeyRule protected constructor(
internal val artifactPattern: String,
internal val versionKeyPattern: String
) : Comparable<ArtifactVersionKeyRule> {
Expand All @@ -24,12 +25,17 @@ internal abstract class ArtifactVersionKeyRule protected constructor(

private val versionKeySignificantCharsLength = versionKeyPattern.count { it != ' ' }

override fun toString(): String = """
$artifactPattern
$versionKeyPattern
""".trimIndent()

companion object {

operator fun invoke(
artifactPattern: String,
versionKeyPattern: String
): ArtifactVersionKeyRule = ArtifactVersionKeyRuleRegexImpl(artifactPattern, versionKeyPattern)
): ArtifactVersionKeyRule = ArtifactVersionKeyRuleRegexImpl(artifactPattern.trimStart(), versionKeyPattern)

private val comparator: Comparator<ArtifactVersionKeyRule> = compareBy<ArtifactVersionKeyRule> {
it.versionKeySignificantCharsLength
Expand Down
@@ -0,0 +1,26 @@
package de.fayard.refreshVersions.core.internal

import org.gradle.kotlin.dsl.IsNotADependency

@InternalRefreshVersionsApi
open class DependencyGroup(
val group: String,
val rule: ArtifactVersionKeyRule? = null,
var usePlatformConstraints: Boolean = false
) : IsNotADependency {
companion object {
val ALL = mutableListOf<DependencyGroup>()
val ALL_RULES: List<ArtifactVersionKeyRule>
get() = ALL.mapNotNull { it.rule }
}

init {
ALL.add(this)
}

fun module(module: String): String {
assert(module.trim() == module)
assert(module.contains(":").not())
return "$group:$module" + if (usePlatformConstraints) "" else ":_"
}
}
Expand Up @@ -23,7 +23,8 @@ open class RefreshVersionsPlugin : Plugin<Any> {
"kotlin(x)-version-alias-rules",
"square-version-alias-rules",
"other-version-alias-rules",
"testing-version-alias-rules"
"testing-version-alias-rules",
"dependency-groups-alias-rules"
).map {
RefreshVersionsPlugin::class.java.getResourceAsStream("/refreshVersions-rules/$it.txt")!!
.bufferedReader()
Expand Down
@@ -1,17 +1,6 @@
package de.fayard.refreshVersions.internal

import AndroidX
import COIL
import CashApp
import Firebase
import Google
import JakeWharton
import Kotlin
import KotlinX
import Ktor
import Splitties
import Square
import Testing
import dependencies.ALL_DEPENDENCIES_NOTATIONS
import dependencies.DependencyNotationAndGroup
import org.gradle.api.artifacts.ModuleIdentifier
import java.lang.reflect.Field
Expand Down Expand Up @@ -44,20 +33,7 @@ internal data class DependencyMapping(
}

internal fun getArtifactNameToConstantMapping(excludeBomDependencies: Boolean = false): List<DependencyMapping> {
return sequenceOf(
AndroidX,
CashApp,
Google,
JakeWharton,
Firebase,
Kotlin,
KotlinX,
Splitties,
Square,
Ktor,
Testing,
COIL
).flatMap { objectInstance ->
return ALL_DEPENDENCIES_NOTATIONS.asSequence().flatMap { objectInstance ->
getArtifactNameToConstantMappingFromObject(
objectInstance,
excludeBomDependencies = excludeBomDependencies,
Expand Down Expand Up @@ -95,6 +71,7 @@ private fun getArtifactNameToConstantMappingFromObject(
it != typeOf<String>() && it.javaType != java.lang.Void::class.java
}
}.flatMap { kProperty ->
if (kProperty.name == "rule") return@flatMap emptySequence()
@Suppress("unchecked_cast")
val nestedObjectInstance = (kProperty as KProperty1<Any?, Any>).get(objectInstance)
getArtifactNameToConstantMappingFromObject(
Expand Down
40 changes: 40 additions & 0 deletions plugins/dependencies/src/main/kotlin/dependencies/Kodein.kt
@@ -0,0 +1,40 @@
@file:Suppress("PackageDirectoryMismatch", "SpellCheckingInspection", "unused")

import de.fayard.refreshVersions.core.internal.ArtifactVersionKeyRule
import de.fayard.refreshVersions.core.internal.DependencyGroup
import org.gradle.api.Incubating

/**
* painless Kotlin dependency injection
*
* - [Official website here](https://kodein.org/di/)
* - GitHub page: [Kodein-Framework/Kodein-DI](https://github.com/Kodein-Framework/Kodein-DI)
* - [GitHub Releases here](https://github.com/Kodein-Framework/Kodein-DI/releases)
*/

@Incubating
object Kodein {


val di = DI()

class DI : DependencyGroup(
group = "org.kodein.di",
rule = ArtifactVersionKeyRule(
artifactPattern = " org.kodein.di:kodein-di(-*)",
versionKeyPattern = " ^^^^^^^^^ "
)
) {
val androidCore = module("kodein-di-framework-android-core")
val androidSupport = module("kodein-di-framework-android-support")
val androidx = module("kodein-di-framework-android-x")
val configurableJS = module("kodein-di-conf-js")
val configurableJvm = module("kodein-di-conf-jvm")
val js = module("kodein-di-js")
val jsr330 = module("kodein-di-jxinject-jvm")
val ktor = module("kodein-di-framework-ktor-server-jvm")
val tornadofx = module("kodein-di-framework-tornadofx-jvm")
}
}


91 changes: 49 additions & 42 deletions plugins/dependencies/src/main/kotlin/dependencies/Orchid.kt
@@ -1,7 +1,8 @@
@file:Suppress("PackageDirectoryMismatch", "SpellCheckingInspection", "unused")

import de.fayard.refreshVersions.core.internal.ArtifactVersionKeyRule
import de.fayard.refreshVersions.core.internal.DependencyGroup
import org.gradle.api.Incubating
import org.gradle.kotlin.dsl.IsNotADependency

@Incubating
/**
Expand All @@ -17,66 +18,72 @@ import org.gradle.kotlin.dsl.IsNotADependency
*
* GitHub page: [orchidhq/Orchid](https://github.com/orchidhq/Orchid)
*/
object Orchid {
object Orchid : DependencyGroup(
group = "io.github.javaeden.orchid",
rule = ArtifactVersionKeyRule(
artifactPattern = " io.github.javaeden.orchid:*",
versionKeyPattern = " ^^^^^^"
)
) {

private const val groupId = "io.github.javaeden.orchid"

const val core = "$groupId:OrchidCore:_"
const val test = "$groupId:OrchidTest:_"
val core = module("OrchidCore")
val test = module("OrchidTest")

/**
* Official webpage: [orchid.run/plugins](https://orchid.run/plugins)
*/
val plugins = Plugins

object Plugins : IsNotADependency {
const val changelog = "$groupId:OrchidChangelog:_"
const val forms = "$groupId:OrchidForms:_"
const val groovydoc = "$groupId:OrchidGroovydoc:_"
const val javadoc = "$groupId:OrchidJavadoc:_"
const val kotlindoc = "$groupId:OrchidKotlindoc:_"
const val kss = "$groupId:OrchidKSS:_"
const val netlifyCMS = "$groupId:OrchidNetlifyCMS:_"
const val pages = "$groupId:OrchidPages:_"
const val pluginDocs = "$groupId:OrchidPluginDocs:_"
const val posts = "$groupId:OrchidPosts:_"
const val presentations = "$groupId:OrchidPresentations:_"
const val search = "$groupId:OrchidSearch:_"
const val sourceDoc = "$groupId:OrchidSourceDoc:_"
const val swagger = "$groupId:OrchidSwagger:_"
const val swiftdoc = "$groupId:OrchidSwiftdoc:_"
const val taxonomies = "$groupId:OrchidTaxonomies:_"
const val wiki = "$groupId:OrchidWiki:_"
const val asciidoc = "$groupId:OrchidAsciidoc:_"
const val bible = "$groupId:OrchidBible:_"
const val diagrams = "$groupId:OrchidDiagrams:_"
const val syntaxHighlighter = "$groupId:OrchidSyntaxHighlighter:_"
const val writersBlocks = "$groupId:OrchidWritersBlocks:_"
const val azure = "$groupId:OrchidAzure:_"
const val bitbucket = "$groupId:OrchidBitbucket:_"
const val github = "$groupId:OrchidGithub:_"
const val gitlab = "$groupId:OrchidGitlab:_"
const val netlify = "$groupId:OrchidNetlify:_"
object Plugins : DependencyGroup(group = "io.github.javaeden.orchid") {
val changelog = module("OrchidChangelog")
val forms = module("OrchidForms")
val groovydoc = module("OrchidGroovydoc")
val javadoc = module("OrchidJavadoc")
val kotlindoc = module("OrchidKotlindoc")
val kss = module("OrchidKSS")
val netlifyCMS = module("OrchidNetlifyCMS")
val pages = module("OrchidPages")
val pluginDocs = module("OrchidPluginDocs")
val posts = module("OrchidPosts")
val presentations = module("OrchidPresentations")
val search = module("OrchidSearch")
val sourceDoc = module("OrchidSourceDoc")
val swagger = module("OrchidSwagger")
val swiftdoc = module("OrchidSwiftdoc")
val taxonomies = module("OrchidTaxonomies")
val wiki = module("OrchidWiki")
val asciidoc = module("OrchidAsciidoc")
val bible = module("OrchidBible")
val diagrams = module("OrchidDiagrams")
val syntaxHighlighter = module("OrchidSyntaxHighlighter")
val writersBlocks = module("OrchidWritersBlocks")
val azure = module("OrchidAzure")
val bitbucket = module("OrchidBitbucket")
val github = module("OrchidGithub")
val gitlab = module("OrchidGitlab")
val netlify = module("OrchidNetlify")
}

/**
* Official webpage: [orchid.run/themes](https://orchid.run/themes)
*/
val themes = Themes

object Themes : IsNotADependency {
const val bsDoc = "$groupId:OrchidBsDoc:_"
const val copper = "$groupId:OrchidCopper:_"
const val editorial = "$groupId:OrchidEditorial:_"
const val futureImperfect = "$groupId:OrchidFutureImperfect:_"
object Themes : DependencyGroup(group = "io.github.javaeden.orchid") {
val bsDoc = module("OrchidBsDoc")
val copper = module("OrchidCopper")
val editorial = module("OrchidEditorial")
val futureImperfect = module("OrchidFutureImperfect")
}

val bundles = Bundles

object Bundles : IsNotADependency {
const val all = "$groupId:OrchidAll:_"
const val blog = "$groupId:OrchidBlog:_"
const val docs = "$groupId:OrchidDocs:_"
const val languagePack = "$groupId:OrchidLanguagePack:_"
object Bundles : DependencyGroup(group = "io.github.javaeden.orchid") {
val all = module("OrchidAll")
val blog = module("OrchidBlog")
val docs = module("OrchidDocs")
val languagePack = module("OrchidLanguagePack")
}
}
34 changes: 34 additions & 0 deletions plugins/dependencies/src/main/kotlin/dependencies/_ALL.kt
@@ -0,0 +1,34 @@
package dependencies

import AndroidX
import COIL
import CashApp
import Firebase
import Google
import JakeWharton
import Kodein
import Kotlin
import KotlinX
import Ktor
import Orchid
import Splitties
import Square
import Testing

internal val ALL_DEPENDENCIES_NOTATIONS = listOf(
AndroidX,
CashApp,
Google,
JakeWharton,
Firebase,
Kodein,
Kotlin,
KotlinX,
Splitties,
Square,
Ktor,
Testing,
COIL,
Kodein,
Orchid
)
@@ -0,0 +1,5 @@
org.kodein.di:kodein-di(-*)
^^^^^^^^^

io.github.javaeden.orchid:*
^^^^^^
Expand Up @@ -6,6 +6,3 @@ io.ktor:*

io.coil-kt:coil(-*)
^^^^^^^

io.github.javaeden.orchid:*
^^^^^^
@@ -1,11 +1,9 @@
package de.fayard.refreshVersions.rules

import de.fayard.refreshVersions.core.internal.ArtifactVersionKeyReader
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.DynamicTest
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.TestFactory
import de.fayard.refreshVersions.core.internal.DependencyGroup
import dependencies.ALL_DEPENDENCIES_NOTATIONS
import org.junit.jupiter.api.*
import testutils.junit.dynamicTest
import java.io.File

Expand All @@ -30,6 +28,14 @@ class BundledRulesTest {
}
}

@Test
fun `generate rules file for dependency groups`() {
ALL_DEPENDENCIES_NOTATIONS
val file = rulesDir.resolve("dependency-groups-alias-rules.txt")
val content = DependencyGroup.ALL_RULES.joinToString(separator = "\n\n")
file.writeText(content)
}

@Test
@Disabled("Not implemented yet")
fun `check all dependencies constants have version key rules`() {
Expand Down

0 comments on commit 3699300

Please sign in to comment.