Skip to content

Commit

Permalink
Give overrides more control and add some defaults
Browse files Browse the repository at this point in the history
  • Loading branch information
jpenilla committed Jan 29, 2024
1 parent 4fd42ea commit eb82a2d
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@ import org.gradle.api.tasks.Nested
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction
import org.incendo.cloudbuildlogic.JavadocLinksExtension.LinkOverride.Companion.replaceVariables
import java.util.function.Function
import kotlin.io.path.createDirectories
import kotlin.io.path.deleteIfExists
import kotlin.io.path.writeText

abstract class GenerateJavadocLinksFile : DefaultTask() {
@get:Input
abstract val overrides: MapProperty<String, String>
@get:Nested
abstract val overrides: MapProperty<String, JavadocLinksExtension.LinkOverride>

@get:Input
abstract val skip: SetProperty<String>
Expand Down Expand Up @@ -69,7 +70,7 @@ abstract class GenerateJavadocLinksFile : DefaultTask() {
for ((c, o) in overrides.get()) {
if (coordinates.startsWith(c)) {
overridden = true
output.append(o.replaceVariables(id))
output.append(o.link(defaultJavadocProvider.get(), id))
break
}
}
Expand All @@ -81,12 +82,6 @@ abstract class GenerateJavadocLinksFile : DefaultTask() {
file.writeText(output.toString())
}

private fun String.replaceVariables(id: ModuleComponentIdentifier): String {
return replace("{group}", id.group)
.replace("{name}", id.module)
.replace("{version}", id.version)
}

private fun ResolvedArtifactResult.componentIdentifier(): ModuleComponentIdentifier? =
id.componentIdentifier as? ModuleComponentIdentifier

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.gradle.api.tasks.Input
import java.util.function.Predicate

abstract class JavadocLinksExtension {
abstract val overrides: MapProperty<String, String>
abstract val overrides: MapProperty<String, LinkOverride>
abstract val excludes: ListProperty<String>
abstract val filter: Property<DependencyFilter>

Expand All @@ -24,18 +24,29 @@ abstract class JavadocLinksExtension {
overrides.putAll(defaultOverrides())
}

fun defaultOverrides(): Map<String, String> {
return mapOf()
fun defaultOverrides(): Map<String, LinkOverride> {
return mapOf(
"net.kyori:" to LinkOverride.KyoriRule(),
"io.papermc.paper:paper-api:" to LinkOverride.PaperApiRule(),
)
}

fun override(dep: ModuleDependency, link: String) {
overrides.put(key(dep), link)
overrides.put(key(dep), LinkOverride.Simple(link))
}

fun override(dep: Provider<out ModuleDependency>, link: String) {
override(dep.get(), link)
}

fun override(dep: ModuleDependency, link: LinkOverride) {
overrides.put(key(dep), link)
}

fun override(dep: Provider<out ModuleDependency>, link: LinkOverride) {
override(dep.get(), link)
}

fun exclude(dep: ModuleDependency) {
excludes.add(key(dep))
}
Expand All @@ -46,6 +57,47 @@ abstract class JavadocLinksExtension {

private fun key(dep: ModuleDependency) = dep.group + ':' + dep.name + (dep.version?.let { ":$it" } ?: "")

fun interface LinkOverride {
fun link(defaultProvider: String, id: ModuleComponentIdentifier): String

companion object {
fun String.replaceVariables(id: ModuleComponentIdentifier): String {
return replace("{group}", id.group)
.replace("{name}", id.module)
.replace("{version}", id.version)
}
}

class PassThrough : LinkOverride {
override fun link(defaultProvider: String, id: ModuleComponentIdentifier): String {
return defaultProvider.replaceVariables(id)
}
}

data class Simple(val replacement: String) : LinkOverride {
override fun link(defaultProvider: String, id: ModuleComponentIdentifier): String {
return replacement.replaceVariables(id)
}
}

class PaperApiRule : LinkOverride {
override fun link(defaultProvider: String, it: ModuleComponentIdentifier): String {
val ver = it.version.split('.').take(2).joinToString(".")
return "https://jd.papermc.io/paper/$ver/"
}
}

class KyoriRule : LinkOverride {
override fun link(defaultProvider: String, it: ModuleComponentIdentifier): String {
val name = it.module.replace("adventure-", "")
if (name.contains("examination")) {
return PassThrough().link(defaultProvider, it)
}
return "https://jd.advntr.dev/$name/${it.version}"
}
}
}

fun interface DependencyFilter : Predicate<ModuleComponentIdentifier> {
data class NoSnapshots(
@get:Input
Expand Down

0 comments on commit eb82a2d

Please sign in to comment.