Skip to content

Commit

Permalink
Update min required gradle version to 7.4
Browse files Browse the repository at this point in the history
  • Loading branch information
SgtSilvio committed Mar 27, 2024
1 parent 04bdf96 commit 5b98dbd
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 146 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ plugins {

## Requirements

- Gradle 6.7 or higher
- Gradle 7.4 or higher

## Configuration

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import org.gradle.api.attributes.DocsType
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.javadoc.Javadoc
import org.gradle.kotlin.dsl.*
import org.gradle.util.GradleVersion

/**
* @author Silvio Giebl
Expand All @@ -34,11 +33,7 @@ class JavadocLinksPlugin : Plugin<Project> {

val javadoc = project.tasks.named<Javadoc>(JavaPlugin.JAVADOC_TASK_NAME)

val javadocLinksTaskClass = when {
GradleVersion.current() >= GradleVersion.version("7.4") -> JavadocLinksTask::class
else -> JavadocLinksTaskBefore_7_4::class
}
val javadocLinksTask = project.tasks.register(TASK_NAME, javadocLinksTaskClass) {
val javadocLinksTask = project.tasks.register<JavadocLinksTask>(TASK_NAME) {
useConfiguration(configuration)
javaVersion.set(javadoc.flatMap { it.javadocTool }.map { it.metadata.languageVersion })
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,62 @@
package io.github.sgtsilvio.gradle.javadoc.links

import org.gradle.api.DefaultTask
import org.gradle.api.JavaVersion
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ModuleVersionIdentifier
import org.gradle.api.artifacts.component.ComponentArtifactIdentifier
import org.gradle.api.artifacts.result.ResolvedComponentResult
import org.gradle.api.artifacts.result.ResolvedDependencyResult
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.TaskAction
import org.gradle.api.file.ArchiveOperations
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.provider.Property
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.*
import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.listProperty
import org.gradle.kotlin.dsl.property
import java.io.File
import java.util.*
import javax.inject.Inject

/**
* @author Silvio Giebl
*/
abstract class JavadocLinksTask : AbstractJavadocLinksTask() {
abstract class JavadocLinksTask @Inject constructor(
private val fileSystemOperations: FileSystemOperations,
private val archiveOperations: ArchiveOperations,
) : DefaultTask() {

private companion object {
const val ELEMENT_LIST_NAME = "element-list"
const val PACKAGE_LIST_NAME = "package-list"
}

@get:Input
var urlProvider: (ModuleVersionIdentifier) -> String =
{ id -> "https://javadoc.io/doc/${id.group}/${id.name}/${id.version}/" }

@get:Input
val javaVersion: Property<JavaLanguageVersion> = project.objects.property<JavaLanguageVersion>()
.convention(JavaLanguageVersion.of(JavaVersion.current().majorVersion))

@get:InputFiles
@get:PathSensitive(PathSensitivity.NONE)
protected val javadocJars = project.objects.fileCollection()

@get:Input
protected val artifactIds = project.objects.listProperty<ComponentArtifactIdentifier>()

@get:Input
protected val rootComponent = project.objects.property<ResolvedComponentResult>()

override fun useConfiguration(configuration: Configuration) {
@get:OutputDirectory
protected val outputDirectory: Provider<File> = project.provider { temporaryDir }

@get:Internal
internal val javadocOptionsFile: Provider<File> = outputDirectory.map { it.resolve("javadoc.options") }

fun useConfiguration(configuration: Configuration) {
val artifacts = configuration.incoming.artifacts
javadocJars.setFrom(artifacts.artifactFiles)
artifactIds.set(artifacts.resolvedArtifacts.map { results -> results.map { result -> result.id } })
Expand Down Expand Up @@ -50,6 +85,30 @@ abstract class JavadocLinksTask : AbstractJavadocLinksTask() {
javadocOptionsFile.writeText(options.joinToString("\n"))
}

private fun linkToStdLib(javaVersion: JavaLanguageVersion) = when {
javaVersion.asInt() >= 11 -> "-link https://docs.oracle.com/en/java/javase/$javaVersion/docs/api/"
else -> "-link https://docs.oracle.com/javase/$javaVersion/docs/api/"
}

private fun linkToComponent(id: ModuleVersionIdentifier, javadocJar: File, outputDirectory: File): String {
val url = urlProvider(id)
val offlineLocation = outputDirectory.resolve("${id.group}/${id.name}/${id.version}")

fileSystemOperations.copy {
from(archiveOperations.zipTree(javadocJar)) { include(ELEMENT_LIST_NAME, PACKAGE_LIST_NAME) }
into(offlineLocation)
}
val elementListFile = offlineLocation.resolve(ELEMENT_LIST_NAME)
val packageListFile = offlineLocation.resolve(PACKAGE_LIST_NAME)
if (elementListFile.exists() && !packageListFile.exists()) {
elementListFile.copyTo(packageListFile)
} else if (!elementListFile.exists() && packageListFile.exists()) {
packageListFile.copyTo(elementListFile)
}

return "-linkoffline $url $offlineLocation"
}

private inline fun iterateComponents(
rootComponent: ResolvedComponentResult,
action: (ResolvedComponentResult) -> Unit,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ import org.gradle.testkit.runner.TaskOutcome
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.io.TempDir
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import java.io.File

/**
Expand All @@ -28,9 +27,8 @@ internal class ConfigurationCacheTest {
includedProjectDir = rootDir.resolve("included-project").apply { mkdir() }
}

@ParameterizedTest
@ValueSource(strings = ["6.8", "7.4.2"]) // ensure that version checks work: min version, >= 7.4
fun configurationCacheReused(gradleVersion: String) {
@Test
fun configurationCacheReused() {
projectDir.resolve("settings.gradle.kts").writeText(
"""
rootProject.name = "test"
Expand Down Expand Up @@ -130,7 +128,6 @@ internal class ConfigurationCacheTest {
)

val result = GradleRunner.create()
.withGradleVersion(gradleVersion)
.withProjectDir(projectDir)
.withPluginClasspath()
.withArguments("javadoc", "--configuration-cache")
Expand All @@ -146,7 +143,6 @@ internal class ConfigurationCacheTest {
projectDir.resolve("build").deleteRecursively()

val result2 = GradleRunner.create()
.withGradleVersion(gradleVersion)
.withProjectDir(projectDir)
.withPluginClasspath()
.withArguments("javadoc", "--configuration-cache")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ internal class MinRequiredGradleVersionTest {
)

val result = GradleRunner.create()
.withGradleVersion("6.7")
.withGradleVersion("7.4.2")
.withProjectDir(projectDir)
.withPluginClasspath()
.withArguments("javadoc")
Expand Down

0 comments on commit 5b98dbd

Please sign in to comment.