Skip to content

Commit aa07463

Browse files
committed
aaaaaaaaahahhhhhhhh
1 parent a4b5c75 commit aa07463

File tree

141 files changed

+4415
-397
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+4415
-397
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import java.net.URI
2+
import java.net.http.HttpClient
3+
import java.net.http.HttpRequest
4+
import java.net.http.HttpResponse
5+
import kotlin.io.path.createDirectories
6+
import kotlin.io.path.deleteIfExists
7+
import org.gradle.api.DefaultTask
8+
import org.gradle.api.artifacts.MinimalExternalModuleDependency
9+
import org.gradle.api.file.DirectoryProperty
10+
import org.gradle.api.provider.ListProperty
11+
import org.gradle.api.tasks.Input
12+
import org.gradle.api.tasks.OutputDirectory
13+
import org.gradle.api.tasks.TaskAction
14+
15+
abstract class DownloadJavadocListFiles : DefaultTask() {
16+
17+
@get:Input
18+
abstract val dependencies: ListProperty<MinimalExternalModuleDependency>
19+
20+
@get:OutputDirectory
21+
abstract val output: DirectoryProperty
22+
23+
@TaskAction
24+
fun run() {
25+
val client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build()
26+
27+
val outDir = output.get().asFile.toPath()
28+
val base = "https://static.javadoc.io"
29+
dependencies.get().forEach { m ->
30+
val types = listOf("element", "package")
31+
var response: HttpResponse<*>? = null
32+
for (type in types) {
33+
val filePath = "${m.module.group}/${m.module.name}/${m.versionConstraint}/$type-list"
34+
val url = "$base/$filePath"
35+
val outFile = outDir.resolve(filePath)
36+
outFile.parent.createDirectories()
37+
38+
val request = HttpRequest.newBuilder().GET().uri(URI.create(url)).build()
39+
response = client.send(request, HttpResponse.BodyHandlers.ofFile(outFile))
40+
if (response.statusCode() == 200) {
41+
break
42+
}
43+
44+
outFile.deleteIfExists()
45+
}
46+
if (response == null || response.statusCode() != 200) {
47+
throw Exception("Failed: $response")
48+
}
49+
}
50+
}
51+
}

buildSrc/src/main/kotlin/HypoJavaExtension.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import org.gradle.api.NamedDomainObjectContainer
12
import org.gradle.api.artifacts.MinimalExternalModuleDependency
23
import org.gradle.api.artifacts.ProjectDependency
34
import org.gradle.api.model.ObjectFactory
45
import org.gradle.api.provider.ListProperty
6+
import org.gradle.kotlin.dsl.domainObjectContainer
57
import org.gradle.kotlin.dsl.listProperty
68

79
open class HypoJavaExtension(objects: ObjectFactory) {
@@ -10,4 +12,6 @@ open class HypoJavaExtension(objects: ObjectFactory) {
1012

1113
val javadocLibs: ListProperty<MinimalExternalModuleDependency> = objects.listProperty()
1214
val javadocProjects: ListProperty<ProjectDependency> = objects.listProperty()
15+
16+
val patchJavadocList: NamedDomainObjectContainer<HypoPatchSpec> = objects.domainObjectContainer(HypoPatchSpec::class)
1317
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import org.gradle.api.Named
2+
import org.gradle.api.artifacts.MinimalExternalModuleDependency
3+
import org.gradle.api.provider.Property
4+
5+
interface HypoPatchSpec : Named {
6+
7+
val library: Property<MinimalExternalModuleDependency>
8+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import javax.inject.Inject
2+
import kotlin.io.path.bufferedReader
3+
import kotlin.io.path.bufferedWriter
4+
import kotlin.io.path.deleteIfExists
5+
import kotlin.io.path.isRegularFile
6+
import kotlin.io.path.readText
7+
import org.gradle.api.DefaultTask
8+
import org.gradle.api.file.DirectoryProperty
9+
import org.gradle.api.file.FileSystemOperations
10+
import org.gradle.api.provider.ListProperty
11+
import org.gradle.api.tasks.Input
12+
import org.gradle.api.tasks.InputDirectory
13+
import org.gradle.api.tasks.OutputDirectory
14+
import org.gradle.api.tasks.TaskAction
15+
16+
abstract class PatchJavadocList : DefaultTask() {
17+
18+
@get:InputDirectory
19+
abstract val input: DirectoryProperty
20+
21+
@get:Input
22+
abstract val patches: ListProperty<HypoPatchSpec>
23+
24+
@get:OutputDirectory
25+
abstract val output: DirectoryProperty
26+
27+
@get:Inject
28+
abstract val fs: FileSystemOperations
29+
30+
@TaskAction
31+
fun run() {
32+
fs.sync {
33+
from(input)
34+
into(output)
35+
}
36+
37+
val outputDir = output.get().asFile.toPath()
38+
patches.get().forEach { patch ->
39+
val lib = patch.library.get()
40+
41+
val packageListFile = outputDir.resolve("${lib.module.group}/${lib.module.name}/${lib.versionConstraint}/package-list")
42+
val elementListFile = packageListFile.resolveSibling("element-list")
43+
44+
if (elementListFile.isRegularFile()) {
45+
val originalText = elementListFile.readText()
46+
elementListFile.bufferedWriter().use { writer ->
47+
writer.appendLine("module:${patch.name}")
48+
writer.append(originalText)
49+
}
50+
} else {
51+
elementListFile.bufferedWriter().use { writer ->
52+
writer.appendLine("module:${patch.name}")
53+
54+
packageListFile.bufferedReader().use { reader ->
55+
reader.copyTo(writer)
56+
}
57+
}
58+
}
59+
60+
packageListFile.deleteIfExists()
61+
}
62+
}
63+
}
Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
1-
import java.net.URI
2-
import java.net.http.HttpClient
3-
import java.net.http.HttpRequest
4-
import java.net.http.HttpResponse
51
import kotlin.io.path.absolutePathString
6-
import kotlin.io.path.createDirectories
7-
import kotlin.io.path.deleteIfExists
8-
import kotlin.io.path.notExists
92

103
plugins {
114
`java-library`
@@ -21,7 +14,11 @@ java {
2114
}
2215

2316
tasks.withType<JavaCompile>().configureEach {
24-
options.release = 11
17+
options.release = 21
18+
}
19+
20+
hypoJava.patchJavadocList.register("org.jetbrains.annotations") {
21+
library.set(lib("annotations"))
2522
}
2623

2724
afterEvaluate {
@@ -44,42 +41,24 @@ afterEvaluate {
4441

4542
// javadoc doesn't like that static.javadoc.io redirects, so we'll manually copy the
4643
// {element,package}-list for it so it doesn't complain
47-
val elementLists = layout.buildDirectory.dir("javadocElementLists")
48-
val javadocElementList by tasks.registering {
49-
inputs.property("libs", hypoJava.javadocLibs)
50-
outputs.dir(elementLists)
51-
52-
doLast {
53-
val client = HttpClient.newBuilder().followRedirects(HttpClient.Redirect.ALWAYS).build()
44+
val javadocElementList by tasks.registering(DownloadJavadocListFiles::class) {
45+
dependencies.set(hypoJava.javadocLibs)
46+
output.set(layout.buildDirectory.dir("javadocElementLists"))
47+
}
5448

55-
val outDir = elementLists.get().asFile.toPath()
56-
val base = "https://static.javadoc.io"
57-
hypoJava.javadocLibs.get().forEach { m ->
58-
val types = listOf("element", "package")
59-
var response: HttpResponse<*>? = null
60-
for (type in types) {
61-
val filePath = "${m.module.group}/${m.module.name}/${m.versionConstraint}/$type-list"
62-
val url = "$base/$filePath"
63-
val outFile = outDir.resolve(filePath)
64-
outFile.parent.createDirectories()
65-
66-
val request = HttpRequest.newBuilder().GET().uri(URI.create(url)).build()
67-
response = client.send(request, HttpResponse.BodyHandlers.ofFile(outFile))
68-
if (response.statusCode() == 200) {
69-
break
70-
}
71-
72-
outFile.deleteIfExists()
73-
}
74-
if (response == null || response.statusCode() != 200) {
75-
throw Exception("Failed: $response")
76-
}
77-
}
78-
}
49+
val elementLists = layout.buildDirectory.dir("javadocElementListsPatched")
50+
val javadocElementListPatch by tasks.registering(PatchJavadocList::class) {
51+
input.set(javadocElementList.flatMap { it.output })
52+
patches.set(hypoJava.patchJavadocList)
53+
output.set(elementLists)
7954
}
8055

8156
tasks.javadoc {
82-
dependsOn(javadocElementList)
57+
dependsOn(javadocElementListPatch)
58+
59+
javadocTool = javaToolchains.javadocToolFor {
60+
languageVersion = JavaLanguageVersion.of(21)
61+
}
8362

8463
for (projDep in hypoJava.jdkVersionProjects.get()) {
8564
val proj = project(projDep.path)
@@ -106,10 +85,5 @@ afterEvaluate {
10685
val url = "$base/${p.group}/${p.name}/${p.version}"
10786
opt.linksOffline(url, javadocTask.get().destinationDir!!.absolutePath)
10887
}
109-
110-
doLast {
111-
// a lot of tools still require a package-list file instead of element-list
112-
destinationDir!!.resolve("element-list").copyTo(destinationDir!!.resolve("package-list"))
113-
}
11488
}
11589
}

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ junit-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "jun
3434
junit-runtime = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
3535
junit-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit-platform" }
3636

37+
guava = "com.google.guava:guava:33.4.7-jre"
38+
3739
# Linting
3840
errorprone-core = { module = "com.google.errorprone:error_prone_core", version.ref = "errorprone" }
3941
errorprone-annotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "errorprone" }

gradle/wrapper/gradle-wrapper.jar

181 Bytes
Binary file not shown.

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

gradlew

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

gradlew.bat

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)