Separate plugins for different Gradle APIs

This commit is contained in:
Tad Fisher
2024-06-04 13:11:18 -07:00
parent a935331795
commit 85cebdd557
40 changed files with 1258 additions and 3993 deletions

View File

@@ -0,0 +1,12 @@
plugins {
`plugin-conventions`
}
dependencies {
implementation(project(":plugin:common"))
compileOnly(libs.gradle.api.get69())
}
tasks.shadowJar {
archiveFileName = "plugin-base.jar"
}

View File

@@ -0,0 +1,18 @@
package org.nixos.gradle2nix
import org.gradle.api.invocation.Gradle
import org.gradle.internal.operations.BuildOperationListenerManager
object DependencyExtractorApplierBase : DependencyExtractorApplier {
override fun apply(
gradle: Gradle,
extractor: DependencyExtractor,
) {
val buildOperationListenerManager = gradle.service<BuildOperationListenerManager>()
buildOperationListenerManager.addListener(extractor)
gradle.buildFinished {
buildOperationListenerManager.removeListener(extractor)
}
}
}

View File

@@ -0,0 +1,7 @@
package org.nixos.gradle2nix
abstract class Gradle2NixPlugin : AbstractGradle2NixPlugin(
GradleCacheAccessFactoryBase,
DependencyExtractorApplierBase,
ResolveAllArtifactsApplierBase,
)

View File

@@ -0,0 +1,18 @@
package org.nixos.gradle2nix
import org.gradle.api.internal.artifacts.ivyservice.ArtifactCachesProvider
import org.gradle.api.invocation.Gradle
object GradleCacheAccessFactoryBase : GradleCacheAccessFactory {
override fun create(gradle: Gradle): GradleCacheAccess {
return GradleCacheAccessBase(gradle)
}
}
class GradleCacheAccessBase(gradle: Gradle) : GradleCacheAccess {
private val artifactCachesProvider = gradle.service<ArtifactCachesProvider>()
override fun useCache(block: () -> Unit) {
artifactCachesProvider.writableCacheLockingManager.useCache(block)
}
}

View File

@@ -0,0 +1,20 @@
package org.nixos.gradle2nix
import org.gradle.api.Project
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.nixos.gradle2nix.model.RESOLVE_PROJECT_TASK
object ResolveAllArtifactsApplierBase : AbstractResolveAllArtifactsApplier() {
override fun Project.registerProjectTask(): TaskProvider<*> =
tasks.register(RESOLVE_PROJECT_TASK, ResolveProjectDependenciesTaskBase::class.java)
}
abstract class ResolveProjectDependenciesTaskBase : ResolveProjectDependenciesTask() {
@TaskAction
fun action() {
for (configuration in getReportableConfigurations()) {
configuration.artifactFiles().count()
}
}
}