11/*
2- * Copyright 2019-2022 Bjoern Kautler
2+ * Copyright 2019-2026 Bjoern Kautler
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
1717package net.kautler
1818
1919import org.gradle.api.JavaVersion.VERSION_1_8
20+ import org.gradle.api.resources.MissingResourceException
2021import kotlin.text.Charsets.UTF_8
2122
2223plugins {
2324 java
2425}
2526
27+ data class JavadocLibraryData (
28+ val dependency : String ,
29+ val version : String ,
30+ val urlPart : String
31+ ) {
32+ val destinationDir = layout.projectDirectory.dir(" config/javadoc/$dependency -$version " )
33+ }
34+
35+ val versions: Map <String , String > by project
36+ val messageFrameworkVersions: Map <String , List <String >> by project
37+
38+ val javadocLibraryData = listOf (
39+ JavadocLibraryData (" cdi" , versions.safeGet(" cdi" ), " jakarta.enterprise/jakarta.enterprise.cdi-api" ),
40+ JavadocLibraryData (" jakarta.inject-api" , versions.safeGet(" jakarta.inject-api" ), " jakarta.inject/jakarta.inject-api" ),
41+ JavadocLibraryData (" javacord" , messageFrameworkVersions.safeGet(" javacord" ).first(), " org.javacord/javacord-api" )
42+ )
43+
44+ val updateJavadocMetadata by tasks.registering
45+
46+ javadocLibraryData.forEach { javadocLibraryData ->
47+ val (dependency, version, urlPart) = javadocLibraryData
48+ val updateJavadocMetadataTask = tasks.register(" update${dependency.capitalize()} JavadocMetadata" ) {
49+ val textResourceFactory = resources.text
50+ doLast {
51+ javadocLibraryData.destinationDir.asFile.mkdirs()
52+
53+ try {
54+ textResourceFactory.fromUri(" https://static.javadoc.io/$urlPart /$version /package-list" ).asReader()
55+ } catch (_: MissingResourceException ) {
56+ textResourceFactory.fromUri(" https://static.javadoc.io/$urlPart /$version /element-list" ).asReader()
57+ }.buffered().use {
58+ javadocLibraryData.destinationDir.file(" package-list" ).asFile.writer().use { writer ->
59+ val firstLine = it.readLine()
60+ if (! firstLine.startsWith(" module:" )) {
61+ writer.write(firstLine)
62+ writer.write(" \n " )
63+ }
64+ it.copyTo(writer)
65+ }
66+ }
67+
68+ try {
69+ textResourceFactory.fromUri(" https://static.javadoc.io/$urlPart /$version /element-list" ).asReader().use {
70+ javadocLibraryData.destinationDir.file(" element-list" ).asFile.writer().use { writer ->
71+ it.copyTo(writer)
72+ }
73+ }
74+ } catch (_: MissingResourceException ) {
75+ // ignore missing element-list
76+ }
77+ }
78+ }
79+
80+ updateJavadocMetadata {
81+ dependsOn(updateJavadocMetadataTask)
82+ }
83+ }
84+
85+ val updateJdaJavadocMetadata by tasks.registering {
86+ val textResourceFactory = resources.text
87+ val jdaVersion = messageFrameworkVersions.safeGet(" jda" ).first()
88+ val destinationDir = layout.projectDirectory.dir(" config/javadoc/jda-$jdaVersion " )
89+ doLast {
90+ destinationDir.asFile.mkdirs()
91+
92+ textResourceFactory.fromUri(" https://ci.dv8tion.net/job/JDA/javadoc/element-list" ).asReader().use {
93+ destinationDir.file(" package-list" ).asFile.writer().use { writer ->
94+ it.copyTo(writer)
95+ }
96+ }
97+
98+ textResourceFactory.fromUri(" https://ci.dv8tion.net/job/JDA/javadoc/element-list" ).asReader().use {
99+ destinationDir.file(" element-list" ).asFile.writer().use { writer ->
100+ it.copyTo(writer)
101+ }
102+ }
103+ }
104+ }
105+
106+ updateJavadocMetadata {
107+ dependsOn(updateJdaJavadocMetadata)
108+ }
109+
26110tasks.withType<Javadoc >().configureEach {
27111 val javadocTask = this
28112 val javaToolChain = JavaVersion .toVersion(toolChain.version)
@@ -46,18 +130,26 @@ tasks.withType<Javadoc>().configureEach {
46130 standardDocletOptions.apply {
47131 locale = " en"
48132 encoding = UTF_8 .name()
49- links!! .apply {
50- val versions: Map <String , String > by project
51- val messageFrameworkVersions: Map <String , List <String >> by project
52- if (java.targetCompatibility != VERSION_1_8 ) {
53- error(" JavaDoc URL for JRE needs to be adapted to new target compatibility ${java.targetCompatibility} " )
54- }
55- add(" https://docs.oracle.com/javase/8/docs/api/" )
56- add(" https://static.javadoc.io/jakarta.enterprise/jakarta.enterprise.cdi-api/${versions[" cdi" ]} /" )
57- add(" https://static.javadoc.io/jakarta.inject/jakarta.inject-api/${versions[" jakarta.inject-api" ]} /" )
58- add(" https://static.javadoc.io/org.javacord/javacord-api/${messageFrameworkVersions.safeGet(" javacord" ).first()} /" )
59- add(" https://ci.dv8tion.net/job/JDA/javadoc/" )
133+
134+ if (java.targetCompatibility != VERSION_1_8 ) {
135+ error(" JavaDoc URL for JRE needs to be adapted to new target compatibility ${java.targetCompatibility} " )
136+ }
137+ linksOffline(
138+ " https://docs.oracle.com/javase/8/docs/api/" ,
139+ " ${layout.projectDirectory.file(" config/javadoc/java-8" ).asFile.toURI().toURL()} "
140+ )
141+ javadocLibraryData.forEach { javadocLibraryData ->
142+ val (_, version, urlPart) = javadocLibraryData
143+ linksOffline(
144+ " https://static.javadoc.io/$urlPart /$version /" ,
145+ " ${javadocLibraryData.destinationDir.asFile.toURI().toURL()} "
146+ )
60147 }
148+ linksOffline(
149+ " https://ci.dv8tion.net/job/JDA/javadoc/" ,
150+ " ${layout.projectDirectory.file(" config/javadoc/jda-${messageFrameworkVersions.safeGet(" jda" ).first()} " ).asFile.toURI().toURL()} "
151+ )
152+
61153 isUse = true
62154 isVersion = true
63155 isAuthor = true
0 commit comments